FELIX-3976 - Move the online manipulator out of the core bundle
 
FELIX-3903 - Migrate tests to pax exam 3 : migrate the online-manipulator tests to pax exam 3



git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1458665 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/manipulator/manipulator-it/pom.xml b/ipojo/manipulator/manipulator-it/pom.xml
index 17dff4e..f0a7f4a 100644
--- a/ipojo/manipulator/manipulator-it/pom.xml
+++ b/ipojo/manipulator/manipulator-it/pom.xml
@@ -180,6 +180,12 @@
             <version>1.9.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo.manipulator.online</artifactId>
+            <version>1.9.0-SNAPSHOT</version>
+        </dependency>
+
         <!-- End of tested version -->
 
         <dependency>
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/pom.xml b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/pom.xml
new file mode 100644
index 0000000..6b0e681
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/pom.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>org.apache.felix.ipojo.manipulator.manipulator-it</artifactId>
+        <version>1.9.0-SNAPSHOT</version>
+        <relativePath>../../../pom.xml</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ipojo-online-manipulator-test</artifactId>
+
+    <name>${project.artifactId}</name>
+
+</project>
\ No newline at end of file
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/components/Consumer.java b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/components/Consumer.java
new file mode 100644
index 0000000..0549286
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/components/Consumer.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.felix.ipojo.test.online.components;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Requires;
+import org.apache.felix.ipojo.test.online.services.Hello;
+
+@Component
+public class Consumer {
+    
+    @Requires
+    private Hello hello;
+    
+    public Consumer() {
+        System.out.println(hello.sayHello());
+    }
+
+}
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/components/MyProvider.java b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/components/MyProvider.java
new file mode 100644
index 0000000..d2ef530
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/components/MyProvider.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.felix.ipojo.test.online.components;
+
+
+import org.apache.felix.ipojo.test.online.services.Hello;
+
+public class MyProvider implements Hello {
+    
+    public String sayHello() {
+        return "Hello";
+    }
+
+}
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/services/Hello.java b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/services/Hello.java
new file mode 100644
index 0000000..a58fb1f
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/java/org/apache/felix/ipojo/test/online/services/Hello.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.felix.ipojo.test.online.services;
+
+public interface Hello {
+    
+    public String sayHello();
+
+}
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/resources/consumer.xml b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/resources/consumer.xml
new file mode 100644
index 0000000..a78ad3c
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/resources/consumer.xml
@@ -0,0 +1,22 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<ipojo>
+<instance component="org.apache.felix.ipojo.test.online.components.Consumer"/>
+</ipojo>
\ No newline at end of file
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/resources/provider.xml b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/resources/provider.xml
new file mode 100644
index 0000000..593779f
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/main/resources/provider.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<ipojo>
+<component classname="org.apache.felix.ipojo.test.online.components.MyProvider">
+	<provides/>
+</component>
+<instance component="org.apache.felix.ipojo.test.online.components.MyProvider"/>
+</ipojo>
\ No newline at end of file
diff --git a/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/test/java/org/apache/felix/ipojo/test/online/OnlineManipulatorTest.java b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/test/java/org/apache/felix/ipojo/test/online/OnlineManipulatorTest.java
new file mode 100644
index 0000000..2571269
--- /dev/null
+++ b/ipojo/manipulator/manipulator-it/src/it/online-manipulator-it/src/test/java/org/apache/felix/ipojo/test/online/OnlineManipulatorTest.java
@@ -0,0 +1,352 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.felix.ipojo.test.online;
+
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.architecture.Architecture;
+import org.apache.felix.ipojo.architecture.InstanceDescription;
+import org.apache.felix.ipojo.test.online.components.Consumer;
+import org.apache.felix.ipojo.test.online.components.MyProvider;
+import org.apache.felix.ipojo.test.online.services.Hello;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.io.StreamUtils;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerMethod;
+import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.osgi.framework.*;
+import org.ow2.chameleon.testing.helpers.OSGiHelper;
+
+import javax.inject.Inject;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import static org.ops4j.pax.exam.CoreOptions.*;
+import static org.ops4j.pax.exam.MavenUtils.asInProject;
+
+
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerMethod.class)
+public class OnlineManipulatorTest {
+
+
+    private static File TMP = new File("target/tmp-bundle");
+
+    @Inject
+    BundleContext context;
+
+    private OSGiHelper helper;
+
+
+    @Configuration
+    public Option[] configure() throws IOException {
+        String providerWithMetadata = providerWithMetadata();
+        String providerWithMetadataInMetaInf = providerWithMetadataInMetaInf();
+        String providerWithoutMetadata = providerWithoutMetadata();
+        String consumerWithMetadata = consumerWithMetadata();
+        String consumerWithoutMetadata = consumerWithoutMetadata();
+
+        return options(
+                cleanCaches(),
+                mavenBundle("org.apache.felix", "org.apache.felix.ipojo").versionAsInProject(),
+                mavenBundle("org.ow2.chameleon.testing", "osgi-helpers").versionAsInProject(),
+                mavenBundle("org.apache.felix","org.apache.felix.ipojo.manipulator.online").versionAsInProject(),
+                junitBundles(),
+
+                provision(
+                        TinyBundles.bundle()
+                                .add(Hello.class)
+                                .set(Constants.BUNDLE_SYMBOLICNAME, "ServiceInterface")
+                                .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.test.online.services")
+                                .build()
+                ),
+
+                systemProperty("providerWithMetadata").value(providerWithMetadata),
+                systemProperty("providerWithMetadataInMetaInf").value(providerWithMetadataInMetaInf),
+                systemProperty("providerWithoutMetadata").value(providerWithoutMetadata),
+                systemProperty("consumerWithMetadata").value(consumerWithMetadata),
+                systemProperty("consumerWithoutMetadata").value(consumerWithoutMetadata)
+        );
+
+    }
+
+    @Before
+    public void before() {
+        helper = new OSGiHelper(context);
+    }
+
+    @After
+    public void after() {
+        helper.dispose();
+    }
+
+    private static File getTemporaryFile(String name) throws IOException {
+        if (!TMP.exists()) {
+            TMP.mkdirs();
+            TMP.deleteOnExit();
+        }
+        File file = File.createTempFile(name, ".jar", TMP);
+        //File file = new File(TMP, name + ".jar");
+        if (file.exists()) {
+            file.delete();
+        }
+        file.deleteOnExit();
+        return file;
+    }
+
+    @Test
+    public void installProviderWithMetadata1() throws BundleException, InvalidSyntaxException, Exception {
+        String url = context.getProperty("providerWithMetadata");
+        Assert.assertNotNull(url);
+        Bundle bundle = context.installBundle("ipojo:" + url);
+        bundle.start();
+
+        assertBundle("Provider");
+
+        helper.waitForService(Hello.class.getName(), null, 5000);
+        assertValidity();
+        Assert.assertNotNull(context.getServiceReference(Hello.class.getName()));
+    }
+
+
+    @Test
+    public void installProviderWithMetadata2() throws BundleException, InvalidSyntaxException, IOException {
+        String url = context.getProperty("providerWithMetadataInMetaInf");
+        Assert.assertNotNull(url);
+        context.installBundle("ipojo:" + url).start();
+        assertBundle("Provider");
+        helper.waitForService(Hello.class.getName(), null, 5000);
+        assertValidity();
+        Assert.assertNotNull(context.getServiceReference(Hello.class.getName()));
+    }
+
+    @Test
+    public void installProviderWithoutMetadata() throws BundleException, InvalidSyntaxException, IOException {
+        String url = context.getProperty("providerWithoutMetadata");
+        Assert.assertNotNull(url);
+        context.installBundle("ipojo:" + url).start();
+        assertBundle("Provider");
+        helper.waitForService(Hello.class.getName(), null, 5000);
+        assertValidity();
+        Assert.assertNotNull(context.getServiceReference(Hello.class.getName()));
+    }
+
+    @Test
+    public void installConsumerWithMetadata() throws BundleException, InvalidSyntaxException, IOException {
+        String url = context.getProperty("providerWithoutMetadata");
+        Assert.assertNotNull(url);
+        context.installBundle("ipojo:" + url).start();
+        assertBundle("Provider");
+
+        String url2 = context.getProperty("consumerWithMetadata");
+        Assert.assertNotNull(url);
+        context.installBundle("ipojo:" + url2).start();
+        assertBundle("Consumer");
+        helper.waitForService(Hello.class.getName(), null, 5000);
+        // Wait for activation.
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        assertValidity();
+        Assert.assertNotNull(context.getServiceReference(Hello.class.getName()));
+    }
+
+    @Test
+    public void installConsumerWithoutMetadata() throws BundleException, InvalidSyntaxException, IOException {
+        String url = context.getProperty("providerWithMetadataInMetaInf");
+        Assert.assertNotNull(url);
+        context.installBundle("ipojo:" + url).start();
+        assertBundle("Provider");
+        helper.waitForService(Hello.class.getName(), null, 5000);
+
+        String url2 = context.getProperty("consumerWithoutMetadata");
+        Assert.assertNotNull(url);
+        context.installBundle("ipojo:" + url2).start();
+        assertBundle("Consumer");
+        // Wait for activation.
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        assertValidity();
+        Assert.assertNotNull(context.getServiceReference(Hello.class.getName()));
+    }
+
+    /**
+     * Gets a regular bundle containing metadata file
+     *
+     * @return the url of the bundle
+     * @throws java.io.IOException
+     */
+    public static String providerWithMetadata() throws IOException {
+        InputStream is = TinyBundles.bundle()
+                .add("metadata.xml", OnlineManipulatorTest.class.getClassLoader().getResource("provider.xml"))
+                .add(MyProvider.class)
+                .set(Constants.BUNDLE_SYMBOLICNAME, "Provider")
+                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.test.online.services")
+                .build();
+
+        File out = getTemporaryFile("providerWithMetadata");
+        StreamUtils.copyStream(is, new FileOutputStream(out), true);
+        return out.toURI().toURL().toExternalForm();
+    }
+
+    /**
+     * Gets a regular bundle containing metadata file in the META-INF directory
+     *
+     * @return the url of the bundle
+     * @throws java.io.IOException
+     */
+    public static String providerWithMetadataInMetaInf() throws IOException {
+        InputStream is = TinyBundles.bundle()
+                .add("META-INF/metadata.xml", OnlineManipulatorTest.class.getClassLoader().getResource("provider.xml"))
+                .add(MyProvider.class)
+                .set(Constants.BUNDLE_SYMBOLICNAME, "Provider")
+                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.test.online.services")
+                .build();
+
+        File out = getTemporaryFile("providerWithMetadataInMetaInf");
+        StreamUtils.copyStream(is, new FileOutputStream(out), true);
+        return out.toURI().toURL().toExternalForm();
+    }
+
+    /**
+     * Gets a provider bundle which does not contain the metadata file.
+     *
+     * @return the url of the bundle + metadata
+     * @throws java.io.IOException
+     */
+    public static String providerWithoutMetadata() throws IOException {
+        InputStream is = TinyBundles.bundle()
+                //.addResource("metadata.xml", this.getClass().getClassLoader().getResource("provider.xml"))
+                .add(MyProvider.class)
+                .set(Constants.BUNDLE_SYMBOLICNAME, "Provider")
+                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.test.online.services")
+                .build();
+
+        File out = getTemporaryFile("providerWithoutMetadata");
+        StreamUtils.copyStream(is, new FileOutputStream(out), true);
+        String url = out.toURI().toURL().toExternalForm();
+
+        return url + "!" + OnlineManipulatorTest.class.getClassLoader().getResource("provider.xml");
+    }
+
+    /**
+     * Gets a consumer bundle using annotation containing the instance
+     * declaration in the metadata.
+     *
+     * @return the url of the bundle
+     * @throws java.io.IOException
+     */
+    public static String consumerWithMetadata() throws IOException {
+        InputStream is = TinyBundles.bundle()
+                .add("metadata.xml", OnlineManipulatorTest.class.getClassLoader().getResource("consumer.xml"))
+                .add(Consumer.class)
+                .set(Constants.BUNDLE_SYMBOLICNAME, "Consumer")
+                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.test.online.services")
+                .build();
+
+        File out = getTemporaryFile("consumerWithMetadata");
+        StreamUtils.copyStream(is, new FileOutputStream(out), true);
+        return out.toURI().toURL().toExternalForm();
+    }
+
+    /**
+     * Gets a consumer bundle using annotation that does not contain
+     * metadata
+     *
+     * @return the url of the bundle + metadata
+     * @throws java.io.IOException
+     */
+    public static String consumerWithoutMetadata() throws IOException {
+        InputStream is = TinyBundles.bundle()
+                .add(Consumer.class)
+                .set(Constants.BUNDLE_SYMBOLICNAME, "Consumer")
+                .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.test.online.services")
+                .build();
+
+        File out = getTemporaryFile("consumerWithoutMetadata");
+        StreamUtils.copyStream(is, new FileOutputStream(out), true);
+        String url = out.toURI().toURL().toExternalForm();
+
+        return url + "!" + OnlineManipulatorTest.class.getClassLoader().getResource("consumer.xml");
+    }
+
+
+    public void dumpServices() throws InvalidSyntaxException {
+        ServiceReference[] refs = context.getAllServiceReferences(null, null);
+        System.out.println(" === Services === ");
+        for (ServiceReference ref : refs) {
+            String[] itf = (String[]) ref.getProperty(Constants.OBJECTCLASS);
+            System.out.println(itf[0]);
+        }
+        System.out.println("====");
+    }
+
+    public void dumpBundles() throws InvalidSyntaxException {
+        Bundle[] bundles = context.getBundles();
+        System.out.println(" === Bundles === ");
+        for (Bundle bundle : bundles) {
+            String sn = bundle.getSymbolicName();
+            System.out.println(sn);
+        }
+        System.out.println("====");
+    }
+
+    private void assertBundle(String sn) {
+        for (Bundle bundle : context.getBundles()) {
+            if (bundle.getSymbolicName().equals(sn)
+                    && bundle.getState() == Bundle.ACTIVE) {
+                return;
+            }
+
+        }
+        Assert.fail("Cannot find the bundle " + sn);
+    }
+
+    private void assertValidity() {
+        try {
+            ServiceReference[] refs = context.getServiceReferences(Architecture.class.getName(), null);
+            Assert.assertNotNull(refs);
+            for (ServiceReference ref : refs) {
+                InstanceDescription id = ((Architecture) context.getService(ref)).getInstanceDescription();
+                int state = id.getState();
+                Assert.assertEquals("State of " + id.getName(), ComponentInstance.VALID, state);
+            }
+        } catch (InvalidSyntaxException e) {
+            Assert.fail(e.getMessage());
+        }
+
+    }
+
+
+}
diff --git a/ipojo/manipulator/online-manipulator/changelog.txt b/ipojo/manipulator/online-manipulator/changelog.txt
new file mode 100644
index 0000000..a4e730d
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/changelog.txt
@@ -0,0 +1,20 @@
+Changes from the 1.4.2 to 1.6.0

+-------------------------------

+** Improvement

+    * [FELIX-1427] - Service injection with Smart Proxies

+    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified

+

+    

+Changes from the 1.4.0 to 1.4.2

+-------------------------------

+** Bug

+    * [FELIX-1518] - iPOJO manipulator is really slow even when annotation are ignored

+    

+

+Version 1.4.0

+-------------

+** Improvement

+    * Update parent pom

+    * Initial commit

+    

+   

diff --git a/ipojo/manipulator/online-manipulator/pom.xml b/ipojo/manipulator/online-manipulator/pom.xml
new file mode 100644
index 0000000..8bb540d
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/pom.xml
@@ -0,0 +1,179 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <parent>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>felix-parent</artifactId>
+        <version>2.1</version>
+        <relativePath>../../../pom/pom.xml</relativePath>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <packaging>bundle</packaging>
+    <name>Apache Felix iPOJO - Online Manipulator</name>
+    <artifactId>org.apache.felix.ipojo.manipulator.online</artifactId>
+    <version>1.9.0-SNAPSHOT</version>
+
+    <description>
+        iPOJO online manipulator allowing install time manipulation of iPOJO bundle.
+    </description>
+    <url>http://felix.apache.org/site/apache-felix-ipojo-online-manipulator.html</url>
+
+    <properties>
+        <ipojo.import.packages>[1.8.0,2.0.0)</ipojo.import.packages>
+        <ipojo.manipulator.version>${project.version}</ipojo.manipulator.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <version>4.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <version>4.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo.metadata</artifactId>
+            <version>1.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>asm</groupId>
+            <artifactId>asm-all</artifactId>
+            <version>3.3.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>asm</groupId>
+                    <artifactId>asm-tree</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>1.9.5</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.0</version>
+                <configuration>
+                    <target>1.5</target>
+                    <source>1.5</source>
+                    <testTarget>1.5</testTarget>
+                    <testSource>1.5</testSource>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>2.3.7</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+                        <Private-Package>org.apache.felix.ipojo.online.manipulator</Private-Package>
+                        <Bundle-DocURL>
+                            http://felix.apache.org/site/apache-felix-ipojo-online-manipulator.html
+                        </Bundle-DocURL>
+                        <Export-Package>
+                            org.apache.felix.ipojo.manipulation*; version="${ipojo.manipulator.version}",
+                            org.apache.felix.ipojo.xml.parser; version="${ipojo.manipulator.version}",
+                            org.apache.felix.ipojo.manipulator*; version="${ipojo.manipulator.version}",
+                            org.apache.felix.ipojo.annotations*; version="${ipojo.manipulator.version}",
+                        </Export-Package>
+                        <Private-Package>
+                            org.objectweb.asm,
+                            org.objectweb.asm.commons,
+                            org.objectweb.asm.signature,
+                            org.objectweb.asm.tree,
+                            org.apache.felix.ipojo.online.manipulator
+                        </Private-Package>
+                        <Import-Package>!sun.io, org.osgi.framework;version=1.3, *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-ipojo-plugin</artifactId>
+                <version>1.9.0-SNAPSHOT</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>ipojo-bundle</goal>
+                        </goals>
+                        <configuration>
+                            <ignoreAnnotations>true</ignoreAnnotations>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <enableRulesSummary>false</enableRulesSummary>
+                    <violationSeverity>warning</violationSeverity>
+                    <configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <!-- check src only (except remote resources additions) -->
+                    <includes>
+                        <include>src/**</include>
+                    </includes>
+                    <excludes>
+                        <exclude>src/main/appended-resources/**</exclude>
+                        <exclude>src/main/resources/META-INF/**</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/DEPENDENCIES b/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/DEPENDENCIES
new file mode 100644
index 0000000..844c77e
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/DEPENDENCIES
@@ -0,0 +1,21 @@
+I. Included Third-Party Software
+
+This product includes software developed at
+Copyright (c) 2000-2005 INRIA, France Telecom
+Licensed under BSD License.
+
+This product includes software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright (c) OSGi Alliance (2000, 2007).
+Licensed under the Apache License 2.0.
+
+II. Used Third-Party Software
+
+This product uses software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright (c) OSGi Alliance (2000, 2009).
+Licensed under the Apache License 2.0.
+
+III. Overall License Summary
+- Apache License 2.0
+- BSD License
diff --git a/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/LICENSE b/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/LICENSE
new file mode 100644
index 0000000..194131d
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/LICENSE
@@ -0,0 +1,42 @@
+
+
+APACHE FELIX iPOJO Online Manipulator:
+
+The Apache Felix iPOJO Online Manipulator includes a number of subcomponents with
+separate copyright notices and license terms. Your use of the source
+code for the these subcomponents is subject to the terms and
+conditions of the following licenses. 
+
+
+For the ASM component:
+
+Copyright (c) 2000-2005 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/NOTICE b/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/NOTICE
new file mode 100644
index 0000000..4ae983c
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/src/main/appended-resources/META-INF/NOTICE
@@ -0,0 +1,8 @@
+This product includes software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright (c) OSGi Alliance (2000, 2009).
+Licensed under the Apache License 2.0.
+
+This product includes software developed at
+Copyright (c) 2000-2005 INRIA, France Telecom
+Licensed under BSD License.
diff --git a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPOJOURLHandler.java b/ipojo/manipulator/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
similarity index 80%
rename from ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPOJOURLHandler.java
rename to ipojo/manipulator/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
index 9a046ac..786c20b 100644
--- a/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPOJOURLHandler.java
+++ b/ipojo/manipulator/online-manipulator/src/main/java/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.ipojo;
+package org.apache.felix.ipojo.online.manipulator;
 
 import org.apache.felix.ipojo.manipulator.Pojoization;
 import org.osgi.framework.BundleContext;
@@ -33,44 +33,46 @@
 import java.util.jar.JarFile;
 
 /**
-* iPOJO URL Handler allowing installation time manipulation.
-* When a bundle is installed with the <code>ipojo:</code> URL
-* prefix, the bundle is downloaded and manipulated by this 
-* handler.
-* The metadata.xml file can either be provided inside the bundle (root,
-* or in META-INF) or given in the URL:
-* ipojo:URL_BUNDLE!URL_METADATA.
-* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
-*/
-public class IPOJOURLHandler extends org.osgi.service.url.AbstractURLStreamHandlerService implements URLStreamHandlerService {
-    
+ * iPOJO URL Handler allowing installation time manipulation.
+ * When a bundle is installed with the <code>ipojo:</code> URL
+ * prefix, the bundle is downloaded and manipulated by this
+ * handler.
+ * The metadata.xml file can either be provided inside the bundle (root,
+ * or in META-INF) or given in the URL:
+ * ipojo:URL_BUNDLE!URL_METADATA.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class IPOJOURLHandler
+        extends org.osgi.service.url.AbstractURLStreamHandlerService implements URLStreamHandlerService {
+
     /**
      * The bundle context.
      */
     private BundleContext m_context;
-    
     /**
      * The directory storing bundles.
      */
     private File m_temp;
-    
+
     /**
      * Creates a IPOJOURLHandler.
      * Gets the bundle context and create the working
      * directory.
+     *
      * @param bc the bundle context
      */
     public IPOJOURLHandler(BundleContext bc) {
         m_context = bc;
         m_temp = m_context.getDataFile("temp");
-        if (! m_temp.exists()) {
+        if (!m_temp.exists()) {
             m_temp.mkdir();
         }
     }
-    
+
     /**
      * Stops the URL handler:
-     * Deletes the working directory.  
+     * Deletes the working directory.
      */
     public void stop() {
         File[] files = m_temp.listFiles();
@@ -85,16 +87,17 @@
     /**
      * Opens a connection using the ipojo url handler.
      * This methods parses the URL and manipulate the given bundle.
+     *
      * @param url the url.
      * @return the URL connection on the manipulated bundle
-     * @throws java.io.IOException  occurs when the bundle cannot be either downloaded, or manipulated or
-     * installed correctly.
+     * @throws java.io.IOException occurs when the bundle cannot be either downloaded, or manipulated or
+     *                             installed correctly.
      * @see org.osgi.service.url.AbstractURLStreamHandlerService#openConnection(java.net.URL)
      */
     public URLConnection openConnection(URL url) throws IOException {
         System.out.println("Processing URL : " + url);
 
-       // Parse the url:
+        // Parse the url:
         String full = url.toExternalForm();
         // Remote ipojo://
         if (full.startsWith("ipojo:")) {
@@ -137,22 +140,22 @@
 
         // Pojoization
         Pojoization pojoizator = new Pojoization();
-        File out =  new File(m_temp, bundle.getName() + "-ipojo.jar");
+        File out = new File(m_temp, bundle.getName() + "-ipojo.jar");
         System.out.println("Pojoization " + bundle.exists() + " - " + metadata.exists());
         try {
             pojoizator.pojoization(bundle, out, metadata);
         } catch (Exception e) {
-            if (! pojoizator.getErrors().isEmpty()) {
+            if (!pojoizator.getErrors().isEmpty()) {
                 throw new IOException("Errors occured during the manipulation : " + pojoizator.getErrors());
             }
             e.printStackTrace();
             throw new RuntimeException(e.getMessage());
         }
 
-        if (! pojoizator.getErrors().isEmpty()) {
+        if (!pojoizator.getErrors().isEmpty()) {
             throw new IOException("Errors occured during the manipulation : " + pojoizator.getErrors());
         }
-        if (! pojoizator.getWarnings().isEmpty()) {
+        if (!pojoizator.getWarnings().isEmpty()) {
             System.err.println("Warnings occured during the manipulation : " + pojoizator.getWarnings());
         }
 
@@ -173,10 +176,11 @@
     /**
      * Downloads the content pointed by the given url to
      * the given file.
-     * @param url   the url
-     * @param file  the file
+     *
+     * @param url  the url
+     * @param file the file
      * @throws java.io.IOException occurs if the content cannot be read
-     * and save inside the file
+     *                             and save inside the file
      */
     private void save(URL url, File file) throws IOException {
         InputStream is = url.openStream();
@@ -185,10 +189,11 @@
 
     /**
      * Saves the content of the input stream to the given file.
-     * @param is    the input stream to read
-     * @param file  the file
-     * @throws java.io.IOException  occurs if the content cannot be read
-     * and save inside the file
+     *
+     * @param is   the input stream to read
+     * @param file the file
+     * @throws java.io.IOException occurs if the content cannot be read
+     *                             and save inside the file
      */
     private void save(InputStream is, File file) throws IOException {
         FileOutputStream writer = new FileOutputStream(file);
@@ -213,16 +218,17 @@
      * <li>the root of the jar file</li>
      * <li>the META-INF directory</li>
      * </ol>
-     * @param jar   the jar file
-     * @return  the founded file or <code>null</code> if not found.
-     * @throws java.io.IOException  occurs when the Jar file cannot be read.
+     *
+     * @param jar the jar file
+     * @return the founded file or <code>null</code> if not found.
+     * @throws java.io.IOException occurs when the Jar file cannot be read.
      */
     private File findMetadata(JarFile jar) throws IOException {
         JarEntry je = jar.getJarEntry("metadata.xml");
         if (je == null) {
             je = jar.getJarEntry("META-INF/metadata.xml");
         }
-        
+
         if (je == null) {
             System.out.println("Metadata file not found, use annotations only.");
             return null; // Not Found, use annotation only
@@ -233,7 +239,7 @@
             System.out.println("Metadata file saved to " + metadata.getAbsolutePath());
             return metadata;
         }
-        
+
     }
-    
+
 }
diff --git a/ipojo/manipulator/online-manipulator/src/main/resources/META-INF/constants.properties b/ipojo/manipulator/online-manipulator/src/main/resources/META-INF/constants.properties
new file mode 100644
index 0000000..d070319
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/src/main/resources/META-INF/constants.properties
@@ -0,0 +1,22 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# This file define the different constant we use in the manipulator. This file is filtered by Maven.
+manipulator.version=${project.version}
+ipojo.import.packages=${ipojo.import.packages}
\ No newline at end of file
diff --git a/ipojo/manipulator/online-manipulator/src/main/resources/META-INF/services/org.apache.felix.ipojo.manipulator.spi.Module b/ipojo/manipulator/online-manipulator/src/main/resources/META-INF/services/org.apache.felix.ipojo.manipulator.spi.Module
new file mode 100644
index 0000000..d3b15f9
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/src/main/resources/META-INF/services/org.apache.felix.ipojo.manipulator.spi.Module
@@ -0,0 +1 @@
+org.apache.felix.ipojo.manipulator.metadata.annotation.module.DefaultBindingModule
\ No newline at end of file
diff --git a/ipojo/manipulator/online-manipulator/src/main/resources/metadata.xml b/ipojo/manipulator/online-manipulator/src/main/resources/metadata.xml
new file mode 100644
index 0000000..771b2d5
--- /dev/null
+++ b/ipojo/manipulator/online-manipulator/src/main/resources/metadata.xml
@@ -0,0 +1,32 @@
+<!--

+	Licensed to the Apache Software Foundation (ASF) under one

+	or more contributor license agreements.  See the NOTICE file

+	distributed with this work for additional information

+	regarding copyright ownership.  The ASF licenses this file

+	to you under the Apache License, Version 2.0 (the

+	"License"); you may not use this file except in compliance

+	with the License.  You may obtain a copy of the License at

+	

+	http://www.apache.org/licenses/LICENSE-2.0

+	

+	Unless required by applicable law or agreed to in writing,

+	software distributed under the License is distributed on an

+	"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+	KIND, either express or implied.  See the License for the

+	specific language governing permissions and limitations

+	under the License.

+-->

+<ipojo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+       xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/CURRENT/core.xsd"

+       xmlns="org.apache.felix.ipojo">

+

+    <component classname="org.apache.felix.ipojo.online.manipulator.IPOJOURLHandler"

+               public="false"

+               immediate="true">

+        <provides>

+            <property name="url.handler.protocol" type="java.lang.String" value="ipojo"/>

+        </provides>

+        <callback transition="invalidate" method="stop"/>

+    </component>

+    <instance component="org.apache.felix.ipojo.online.manipulator.IPOJOURLHandler"/>

+</ipojo>
\ No newline at end of file
diff --git a/ipojo/manipulator/pom.xml b/ipojo/manipulator/pom.xml
index 1c4339a..62be39c 100644
--- a/ipojo/manipulator/pom.xml
+++ b/ipojo/manipulator/pom.xml
@@ -40,6 +40,7 @@
         <module>ipojo-ant-task</module>
         <module>maven-ipojo-plugin</module>
         <module>bnd-ipojo-plugin</module>
+        <module>online-manipulator</module>
     </modules>
 
 </project>
diff --git a/ipojo/runtime/core/pom.xml b/ipojo/runtime/core/pom.xml
index acfd3ad..7501a8c 100644
--- a/ipojo/runtime/core/pom.xml
+++ b/ipojo/runtime/core/pom.xml
@@ -39,9 +39,6 @@
            * change in ComponentTypeDescription (FELIX-3560)
         -->
         <ipojo.package.version>1.8.4</ipojo.package.version>
-
-        <!-- Embedded manipulator version -->
-        <ipojo.manipulator.version>1.8.6</ipojo.manipulator.version>
     </properties>
 
     <description>
@@ -68,11 +65,6 @@
             <version>1.6.0</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.ipojo.manipulator</artifactId>
-            <version>${ipojo.manipulator.version}</version>
-        </dependency>
-        <dependency>
             <groupId>asm</groupId>
             <artifactId>asm-all</artifactId>
             <version>3.3.1</version>
@@ -128,28 +120,14 @@
                             org.osgi.service.log,
                             org.osgi.util.tracker;version=1.3,
                             !sun.io,
-                            !net.sourceforge.cobertura.*, <!--  To support code coverage -->
-
-                            <!--
-                              Packages used for the online-manipulator.
-                              They are optionals
-                            -->
-                            javax.xml.parsers;resolution:=optional,
-                            org.osgi.service.url;resolution:=optional,
-                            org.w3c.dom;resolution:=optional,
-                            org.xml.sax;resolution:=optional,
-                            org.xml.sax.helpers;resolution:=optional
+                            !net.sourceforge.cobertura.* <!--  To support code coverage -->
                         </Import-Package>
                         <Private-Package>
                             org.apache.felix.ipojo.handlers.architecture,
                             org.apache.felix.ipojo.handlers.lifecycle.callback,
                             org.apache.felix.ipojo.handlers.lifecycle.controller,
                             org.apache.felix.ipojo.extender.internal*,
-                            <!-- ASM (Manipulator dependencies) -->
-                            org.objectweb.asm.commons;-split-package:=merge-last,
-                            org.objectweb.asm.signature;-split-package:=merge-last,
-                            org.objectweb.asm;-split-package:=merge-last,
-                            org.objectweb.asm.tree;-split-package:=merge-last
+                            org.objectweb.asm;-split-package:=merge-last
                         </Private-Package>
                         <Export-Package>
                             org.apache.felix.ipojo; version="${ipojo.package.version}",
@@ -165,11 +143,6 @@
                             org.apache.felix.ipojo.handlers.providedservice.*; version="${ipojo.package.version}",
                             org.apache.felix.ipojo.handlers.configuration; version="${ipojo.package.version}",
                             org.apache.felix.ipojo.context; version="${ipojo.package.version}",
-                            <!-- Embedded manipulator -->
-                            org.apache.felix.ipojo.manipulation*; version="${ipojo.manipulator.version}",
-                            org.apache.felix.ipojo.xml.parser; version="${ipojo.manipulator.version}",
-                            org.apache.felix.ipojo.manipulator*; version="${ipojo.manipulator.version}",
-                            org.apache.felix.ipojo.annotations*; version="${ipojo.package.version}",
                             <!-- Compendium packages -->
                             org.osgi.service.cm,
                             org.osgi.service.log
diff --git a/ipojo/runtime/core/src/main/resources/metadata.xml b/ipojo/runtime/core/src/main/resources/metadata.xml
index 977b083..beeeeaf 100644
--- a/ipojo/runtime/core/src/main/resources/metadata.xml
+++ b/ipojo/runtime/core/src/main/resources/metadata.xml
@@ -44,14 +44,4 @@
             <property field="m_name" name="architecture.instance"/>

         </provides>

     </handler>

-    <!-- iPOJO Online Manipulator -->

-    <component classname="org.apache.felix.ipojo.IPOJOURLHandler"

-               public="false"

-               immediate="true">

-        <provides>

-            <property name="url.handler.protocol" type="java.lang.String" value="ipojo"/>

-        </provides>

-        <callback transition="invalidate" method="stop"/>

-    </component>

-    <instance component="org.apache.felix.ipojo.IPOJOURLHandler"/>

 </ipojo>
\ No newline at end of file
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
index 652cf8c..11ae242 100644
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/OnlineManipulatorTest.java
@@ -13,8 +13,8 @@
 import org.apache.felix.ipojo.ComponentInstance;
 import org.apache.felix.ipojo.architecture.Architecture;
 import org.apache.felix.ipojo.architecture.InstanceDescription;
-import org.apache.felix.ipojo.online.manipulator.test.impl.Consumer;
-import org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider;
+import org.apache.felix.ipojo.test.online.components.Consumer;
+import org.apache.felix.ipojo.test.online.components.MyProvider;
 import org.apache.felix.ipojo.online.manipulator.test.service.Hello;
 import org.junit.After;
 import org.junit.Assert;
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
index dc2698d..9c77b1c 100644
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/Consumer.java
@@ -1,4 +1,4 @@
-package org.apache.felix.ipojo.online.manipulator.test.impl;
+package org.apache.felix.ipojo.test.online.components;
 
 import org.apache.felix.ipojo.annotations.Component;
 import org.apache.felix.ipojo.annotations.Requires;
diff --git a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
index a53094f..595c199 100644
--- a/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
+++ b/ipojo/tests/online-manipulator/src/test/java/org/apache/felix/ipojo/online/manipulator/test/impl/MyProvider.java
@@ -1,4 +1,4 @@
-package org.apache.felix.ipojo.online.manipulator.test.impl;
+package org.apache.felix.ipojo.test.online.components;
 
 import org.apache.felix.ipojo.online.manipulator.test.service.Hello;
 
diff --git a/ipojo/tests/online-manipulator/src/test/resources/consumer.xml b/ipojo/tests/online-manipulator/src/test/resources/consumer.xml
index 5c8ae28..b075f7b 100644
--- a/ipojo/tests/online-manipulator/src/test/resources/consumer.xml
+++ b/ipojo/tests/online-manipulator/src/test/resources/consumer.xml
@@ -1,3 +1,3 @@
 <ipojo>
-<instance component="org.apache.felix.ipojo.online.manipulator.test.impl.Consumer"/>
+<instance component="org.apache.felix.ipojo.test.online.components.Consumer"/>
 </ipojo>
\ No newline at end of file
diff --git a/ipojo/tests/online-manipulator/src/test/resources/provider.xml b/ipojo/tests/online-manipulator/src/test/resources/provider.xml
index d6f7187..0192784 100644
--- a/ipojo/tests/online-manipulator/src/test/resources/provider.xml
+++ b/ipojo/tests/online-manipulator/src/test/resources/provider.xml
@@ -1,6 +1,6 @@
 <ipojo>
-<component classname="org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider">
+<component classname="org.apache.felix.ipojo.test.online.components.MyProvider">
 	<provides/>
 </component>
-<instance component="org.apache.felix.ipojo.online.manipulator.test.impl.MyProvider"/>
+<instance component="org.apache.felix.ipojo.test.online.components.MyProvider"/>
 </ipojo>
\ No newline at end of file