You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2016/11/24 10:53:24 UTC

[20/50] [abbrv] aries-jax-rs-whiteboard git commit: [maven] convert to maven build using bnd-maven-plugin

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.jax-rs.cxf-common/src/main/resources/content/Language_zh_TW.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.jax-rs.cxf-common/src/main/resources/content/Language_zh_TW.properties b/org.apache.aries.jax-rs.cxf-common/src/main/resources/content/Language_zh_TW.properties
new file mode 100644
index 0000000..c287f7f
--- /dev/null
+++ b/org.apache.aries.jax-rs.cxf-common/src/main/resources/content/Language_zh_TW.properties
@@ -0,0 +1 @@
+cxf.endpoint.configuration.name=CXF \u7d42\u7d50\u9ede (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.jax-rs.example/.gitignore
----------------------------------------------------------------------
diff --git a/org.apache.aries.jax-rs.example/.gitignore b/org.apache.aries.jax-rs.example/.gitignore
new file mode 100644
index 0000000..83ccc54
--- /dev/null
+++ b/org.apache.aries.jax-rs.example/.gitignore
@@ -0,0 +1,2 @@
+/build/
+/bin/

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.jax-rs.example/pom.xml
----------------------------------------------------------------------
diff --git a/org.apache.aries.jax-rs.example/pom.xml b/org.apache.aries.jax-rs.example/pom.xml
new file mode 100644
index 0000000..252a6ba
--- /dev/null
+++ b/org.apache.aries.jax-rs.example/pom.xml
@@ -0,0 +1,27 @@
+<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"
+>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.aries</groupId>
+        <artifactId>org.apache.aries.jax-rs</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>com.liferay.portal.rest.example</artifactId>
+    <packaging>jar</packaging>
+    <description>REST Example</description>
+    <dependencies>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+            <version>1.3.0</version>
+        </dependency>
+    </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleAddon.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleAddon.java b/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleAddon.java
new file mode 100644
index 0000000..5431e76
--- /dev/null
+++ b/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleAddon.java
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.rest.example;
+
+import org.osgi.service.component.annotations.Component;
+
+import javax.annotation.PostConstruct;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+@Component(
+	immediate = true,
+	property = "osgi.jaxrs.resource.base=/examples/example-addon",
+	service = ExampleAddon.class
+)
+public class ExampleAddon {
+
+	@GET
+	@Path("/{name}")
+	public String sayHello(@PathParam("name") String name) {
+		return "Hello " + name;
+	}
+
+	@PostConstruct
+	public void init() {
+		System.out.println("URIINFO: " + _uriInfo);
+	}
+
+	@Context
+	UriInfo _uriInfo;
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java b/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
new file mode 100644
index 0000000..25234b2
--- /dev/null
+++ b/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleApplication.java
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p/>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p/>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.rest.example;
+
+import org.osgi.service.component.annotations.Component;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Application;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+@Component(
+	immediate = true,
+	property = "osgi.jaxrs.application.base=/example-application",
+	service = Application.class
+)
+public class ExampleApplication extends Application {
+
+	@Override
+	public Set<Object> getSingletons() {
+		return Collections.<Object>singleton(this);
+	}
+
+	@GET
+	@Produces("text/plain")
+	public String sayHello() {
+		return "Hello world";
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleFilter.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleFilter.java b/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleFilter.java
new file mode 100644
index 0000000..c2e89ac
--- /dev/null
+++ b/org.apache.aries.jax-rs.example/src/main/java/com/liferay/portal/rest/example/ExampleFilter.java
@@ -0,0 +1,44 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.rest.example;
+
+import org.osgi.service.component.annotations.Component;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+@Component(
+	immediate = true,
+	property = {
+		"jaxrs.application.select=(component.name=com.liferay.portal.rest.example.ExampleApplication)",
+		"osgi.jaxrs.filter.base=/examples"
+	}
+)
+@Provider
+public class ExampleFilter implements ContainerRequestFilter {
+
+	@Override
+	public void filter(ContainerRequestContext requestContext)
+		throws IOException {
+
+		System.out.println("FILTERED!");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/.gitignore
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/.gitignore b/org.apache.aries.rest.extender/.gitignore
new file mode 100644
index 0000000..83ccc54
--- /dev/null
+++ b/org.apache.aries.rest.extender/.gitignore
@@ -0,0 +1,2 @@
+/build/
+/bin/

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/bnd.bnd
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/bnd.bnd b/org.apache.aries.rest.extender/bnd.bnd
new file mode 100644
index 0000000..d03d478
--- /dev/null
+++ b/org.apache.aries.rest.extender/bnd.bnd
@@ -0,0 +1,5 @@
+Bundle-Activator: com.liferay.portal.remote.rest.extender.activator.CXFJaxRsBundleActivator
+Provide-Capability: \
+    osgi.extender; \
+        osgi.extender='aries.jax-rs'; \
+		version:Version='1.0.0'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/pom.xml
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/pom.xml b/org.apache.aries.rest.extender/pom.xml
new file mode 100644
index 0000000..5952b5a
--- /dev/null
+++ b/org.apache.aries.rest.extender/pom.xml
@@ -0,0 +1,67 @@
+<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"
+>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.aries</groupId>
+        <artifactId>org.apache.aries.jax-rs</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>org.apache.aries.rest.extender</artifactId>
+    <packaging>jar</packaging>
+    <description>Aries JAX-RS Extender</description>
+    <dependencies>
+        <dependency>
+            <groupId>biz.aQute.bnd</groupId>
+            <artifactId>biz.aQute.bndlib</artifactId>
+            <version>3.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.liferay</groupId>
+            <artifactId>com.liferay.portal.remote.cxf.jaxrs.common</artifactId>
+            <version>2.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>javax.ws.rs-api</artifactId>
+            <version>2.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-core</artifactId>
+            <version>3.1.7</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+            <version>3.1.7</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-rs-extension-providers</artifactId>
+            <version>3.1.7</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <version>6.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.http.whiteboard</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.dependencymanager</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jettison</groupId>
+            <artifactId>jettison</artifactId>
+            <version>1.3.8</version>
+        </dependency>
+    </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
new file mode 100644
index 0000000..04017d6
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.activator;
+
+import javax.ws.rs.ext.RuntimeDelegate;
+
+import com.liferay.portal.remote.rest.extender.internal.BusServiceTrackerCustomizer;
+import com.liferay.portal.remote.rest.extender.internal.ServicesServiceTrackerCustomizer;
+import org.apache.cxf.Bus;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class CXFJaxRsBundleActivator implements BundleActivator {
+
+	private ServiceTracker<?, ?> _busServiceTracker;
+	private ServiceTracker<?, ?> _singletonsTracker;
+
+	@Override
+	public void start(BundleContext bundleContext) throws Exception {
+		Thread thread = Thread.currentThread();
+
+		ClassLoader contextClassLoader = thread.getContextClassLoader();
+
+		ClassLoader classLoader = RuntimeDelegate.class.getClassLoader();
+
+		thread.setContextClassLoader(classLoader);
+
+		try {
+
+			// Initialize instance so it is never looked up again
+
+			RuntimeDelegate.getInstance();
+		}
+		finally {
+			thread.setContextClassLoader(contextClassLoader);
+		}
+
+		_busServiceTracker = new ServiceTracker<>(
+			bundleContext, Bus.class,
+			new BusServiceTrackerCustomizer(bundleContext));
+
+		_busServiceTracker.open();
+
+		Filter filter = bundleContext.createFilter(
+			"(jaxrs.application.select=*)");
+
+		_singletonsTracker = new ServiceTracker<>(
+			bundleContext, filter,
+			new ServicesServiceTrackerCustomizer(bundleContext));
+
+		_singletonsTracker.open();
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		_busServiceTracker.close();
+
+		_singletonsTracker.close();
+	}
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8900ded
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import com.liferay.portal.remote.rest.extender.internal.CXFJaxRsServiceRegistrator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.ext.Provider;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class AddonsServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator> {
+
+	private final BundleContext _bundleContext;
+	private final ClassLoader _classLoader;
+	private final Class<?> _serviceClass;
+	private final Object _service;
+
+	public AddonsServiceTrackerCustomizer(
+		BundleContext bundleContext, ClassLoader classLoader,
+		Object service) {
+
+		_bundleContext = bundleContext;
+		_classLoader = classLoader;
+		_service = service;
+
+		_serviceClass = service.getClass();
+	}
+
+	@Override
+	public CXFJaxRsServiceRegistrator addingService(
+		ServiceReference<CXFJaxRsServiceRegistrator> reference) {
+
+		Thread thread = Thread.currentThread();
+
+		ClassLoader contextClassLoader =
+			thread.getContextClassLoader();
+
+		CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+			_bundleContext.getService(reference);
+
+		try {
+			thread.setContextClassLoader(_classLoader);
+
+			if (_serviceClass.isAnnotationPresent(Provider.class)) {
+				cxfJaxRsServiceRegistrator.addProvider(_service);
+			} else {
+				cxfJaxRsServiceRegistrator.addService(_service);
+			}
+
+			return cxfJaxRsServiceRegistrator;
+		}
+		catch (Exception e) {
+			_bundleContext.ungetService(reference);
+
+			throw e;
+		}
+		finally {
+			thread.setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<CXFJaxRsServiceRegistrator> reference,
+		CXFJaxRsServiceRegistrator registrator) {
+
+		removedService(reference, registrator);
+
+		addingService(reference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<CXFJaxRsServiceRegistrator> reference,
+		CXFJaxRsServiceRegistrator registrator) {
+
+		if (_serviceClass.isAnnotationPresent(Provider.class)) {
+			registrator.removeProvider(_service);
+		} else {
+			registrator.removeService(_service);
+		}
+
+		_bundleContext.ungetService(reference);
+	}
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
new file mode 100644
index 0000000..2594ac3
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.apache.cxf.Bus;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.core.Application;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+class ApplicationServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer
+		<Application, ApplicationServiceTrackerCustomizer.Tracked> {
+
+	private BundleContext _bundleContext;
+	private Bus _bus;
+
+	public ApplicationServiceTrackerCustomizer(
+		BundleContext bundleContext, Bus bus) {
+
+		_bundleContext = bundleContext;
+		_bus = bus;
+	}
+
+	@Override
+	public Tracked addingService(
+		ServiceReference<Application> serviceReference) {
+
+		Application application = _bundleContext.getService(
+			serviceReference);
+
+		try {
+			String[] propertyKeys = serviceReference.getPropertyKeys();
+
+			Map<String, Object> properties = new HashMap<>(
+				propertyKeys.length);
+
+			for (String propertyKey : propertyKeys) {
+				properties.put(
+					propertyKey, serviceReference.getProperty(propertyKey));
+			}
+
+			properties.put(
+				"CXF_ENDPOINT_ADDRESS",
+				serviceReference.getProperty("osgi.jaxrs.application.base").
+					toString());
+
+			CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+				new CXFJaxRsServiceRegistrator(_bus, application, properties);
+
+			return new Tracked(
+				cxfJaxRsServiceRegistrator, application,
+				_bundleContext.registerService(
+					CXFJaxRsServiceRegistrator.class,
+					cxfJaxRsServiceRegistrator, new Hashtable<>(properties)));
+		}
+		catch (Exception e) {
+			_bundleContext.ungetService(serviceReference);
+
+			throw e;
+		}
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Application> serviceReference, Tracked tracked) {
+
+		removedService(serviceReference, tracked);
+
+		addingService(serviceReference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Application> reference, Tracked tracked) {
+
+		_bundleContext.ungetService(reference);
+
+		tracked.getCxfJaxRsServiceRegistrator().close();
+
+		tracked.getCxfJaxRsServiceRegistratorServiceRegistration().unregister();
+	}
+
+	public static class Tracked {
+
+		private final CXFJaxRsServiceRegistrator _cxfJaxRsServiceRegistrator;
+		private final Application _application;
+		private final ServiceRegistration<CXFJaxRsServiceRegistrator>
+			_cxfJaxRsServiceRegistratorServiceRegistration;
+
+		public Application getApplication() {
+			return _application;
+		}
+
+		public CXFJaxRsServiceRegistrator getCxfJaxRsServiceRegistrator() {
+			return _cxfJaxRsServiceRegistrator;
+		}
+
+		public ServiceRegistration<CXFJaxRsServiceRegistrator>
+			getCxfJaxRsServiceRegistratorServiceRegistration() {
+
+			return _cxfJaxRsServiceRegistratorServiceRegistration;
+		}
+
+		public Tracked(
+			CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator,
+			Application application,
+			ServiceRegistration<CXFJaxRsServiceRegistrator>
+				cxfJaxRsServiceRegistratorServiceRegistration) {
+
+			_cxfJaxRsServiceRegistrator = cxfJaxRsServiceRegistrator;
+			_application = application;
+			_cxfJaxRsServiceRegistratorServiceRegistration =
+				cxfJaxRsServiceRegistratorServiceRegistration;
+		}
+
+	}
+}
+
+

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8440196
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.apache.cxf.Bus;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.core.Application;
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class BusServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer<Bus, Collection<ServiceTracker<?, ?>>> {
+
+	private BundleContext _bundleContext;
+
+	public BusServiceTrackerCustomizer(BundleContext bundleContext) {
+		_bundleContext = bundleContext;
+	}
+
+	@Override
+	public Collection<ServiceTracker<?, ?>>
+	addingService(ServiceReference<Bus> serviceReference) {
+
+		Bus bus = _bundleContext.getService(serviceReference);
+
+		try {
+			ServiceTracker<Application,?> applicationTracker =
+				new ServiceTracker<>(_bundleContext, getApplicationFilter(),
+					new ApplicationServiceTrackerCustomizer(
+						_bundleContext, bus));
+
+			applicationTracker.open();
+
+			ServiceTracker<Object, ?> singletonsServiceTracker =
+				new ServiceTracker<>(_bundleContext, getSingletonsFilter(),
+					new SingletonServiceTrackerCustomizer(_bundleContext, bus));
+
+			singletonsServiceTracker.open();
+
+			ServiceTracker<Object, ?> filtersAndInterceptorsServiceTracker =
+				new ServiceTracker<>(_bundleContext, getFiltersFilter(),
+					new FiltersAndInterceptorsServiceTrackerCustomizer(
+						_bundleContext));
+
+			filtersAndInterceptorsServiceTracker.open();
+
+			return Arrays.asList(applicationTracker, singletonsServiceTracker);
+		}
+		catch (InvalidSyntaxException ise) {
+			throw new RuntimeException(ise);
+		}
+		catch (Exception e) {
+			_bundleContext.ungetService(serviceReference);
+
+			throw e;
+		}
+	}
+
+	private Filter getFiltersFilter() throws InvalidSyntaxException {
+		return _bundleContext.createFilter("(osgi.jaxrs.filter.base=*)");
+	}
+
+	private Filter getApplicationFilter() throws InvalidSyntaxException {
+		return _bundleContext.createFilter(
+			"(&(objectClass=" + Application.class.getName() + ")" +
+				"(osgi.jaxrs.application.base=*))");
+	}
+
+	private Filter getSingletonsFilter() throws InvalidSyntaxException {
+		return _bundleContext.createFilter("(osgi.jaxrs.resource.base=*)");
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Bus> reference,
+		Collection<ServiceTracker<?, ?>> serviceTrackers) {
+
+		removedService(reference, serviceTrackers);
+
+		addingService(reference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Bus> serviceReference,
+		Collection<ServiceTracker<?, ?>> serviceTrackers) {
+
+		_bundleContext.ungetService(serviceReference);
+
+		for (ServiceTracker<?, ?> serviceTracker : serviceTrackers) {
+			serviceTracker.close();
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
new file mode 100644
index 0000000..7449ec8
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
@@ -0,0 +1,148 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+
+import javax.ws.rs.core.Application;
+import javax.ws.rs.ext.RuntimeDelegate;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.jaxrs.provider.json.JSONProvider;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class CXFJaxRsServiceRegistrator {
+
+	public CXFJaxRsServiceRegistrator(
+		Bus bus, Application application, Map<String, Object> properties) {
+
+		_bus = bus;
+		_application = application;
+		_properties = properties;
+
+		rewire();
+	}
+
+	public void close() {
+		if (_closed) {
+			return;
+		}
+
+		if (_server != null) {
+			_server.destroy();
+		}
+
+		_closed = true;
+	}
+
+	public void addProvider(Object provider) {
+		if (_closed) {
+			return;
+		}
+
+		_providers.add(provider);
+
+		rewire();
+	}
+
+	public void addService(Object service) {
+		if (_closed) {
+			return;
+		}
+
+		_services.add(service);
+
+		rewire();
+	}
+
+	public void removeProvider(Object provider) {
+		if (_closed) {
+			return;
+		}
+
+		_providers.remove(provider);
+
+		rewire();
+	}
+
+	public void removeService(Object service) {
+		if (_closed) {
+			return;
+		}
+
+		_services.remove(service);
+
+		rewire();
+	}
+
+	protected synchronized void rewire() {
+		if (_server != null) {
+			_server.destroy();
+		}
+
+		RuntimeDelegate runtimeDelegate = RuntimeDelegate.getInstance();
+
+		JAXRSServerFactoryBean jaxRsServerFactoryBean =
+			runtimeDelegate.createEndpoint(
+				_application, JAXRSServerFactoryBean.class);
+
+		jaxRsServerFactoryBean.setBus(_bus);
+		jaxRsServerFactoryBean.setProperties(_properties);
+
+		JSONProvider<Object> jsonProvider = new JSONProvider<>();
+
+		jsonProvider.setDropCollectionWrapperElement(true);
+		jsonProvider.setDropRootElement(true);
+		jsonProvider.setSerializeAsArray(true);
+		jsonProvider.setSupportUnwrapped(true);
+
+		jaxRsServerFactoryBean.setProvider(jsonProvider);
+
+		for (Object provider : _providers) {
+			jaxRsServerFactoryBean.setProvider(provider);
+		}
+
+		for (Object service : _services) {
+			jaxRsServerFactoryBean.setResourceProvider(
+				new SingletonResourceProvider(service, true));
+		}
+
+		String address = _properties.get("CXF_ENDPOINT_ADDRESS").toString();
+
+		if (address != null) {
+			jaxRsServerFactoryBean.setAddress(address);
+		}
+
+		_server = jaxRsServerFactoryBean.create();
+
+		_server.start();
+	}
+
+	private volatile boolean _closed = false;
+	private final Application _application;
+	private final Bus _bus;
+	private final Map<String, Object> _properties;
+	private final Collection<Object> _providers = new ArrayList<>();
+	private Server _server;
+	private final Collection<Object> _services = new ArrayList<>();
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
new file mode 100644
index 0000000..07e8c7a
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
@@ -0,0 +1,123 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class FiltersAndInterceptorsServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer<Object, ServiceTracker<?, ?>> {
+
+	private BundleContext _bundleContext;
+
+	public FiltersAndInterceptorsServiceTrackerCustomizer(
+		BundleContext bundleContext) {
+
+		_bundleContext = bundleContext;
+	}
+
+	@Override
+	public ServiceTracker<?, ?> addingService(final ServiceReference<Object> reference) {
+		final String filterBase =
+			reference.getProperty("osgi.jaxrs.filter.base").toString();
+
+		final Object service = _bundleContext.getService(reference);
+
+		ServiceTracker<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator> serviceTracker = new ServiceTracker<>(
+			_bundleContext, CXFJaxRsServiceRegistrator.class,
+			new ServiceTrackerCustomizer
+				<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>() {
+
+				@Override
+				public CXFJaxRsServiceRegistrator addingService(
+					ServiceReference<CXFJaxRsServiceRegistrator> cxfReference) {
+
+					Object resourceBaseObject =
+						cxfReference.getProperty("CXF_ENDPOINT_ADDRESS");
+
+					if (resourceBaseObject == null) {
+						return null;
+					}
+
+					String resourceBase = resourceBaseObject.toString();
+
+					if (resourceBase.startsWith(filterBase)) {
+						CXFJaxRsServiceRegistrator serviceRegistrator =
+							_bundleContext.getService(cxfReference);
+						try {
+							serviceRegistrator.addProvider(service);
+
+							return serviceRegistrator;
+						}
+						finally {
+							_bundleContext.ungetService(reference);
+						}
+					}
+
+					return null;
+				}
+
+				@Override
+				public void modifiedService(
+					ServiceReference<CXFJaxRsServiceRegistrator> reference,
+					CXFJaxRsServiceRegistrator service) {
+
+					removedService(reference, service);
+					addingService(reference);
+				}
+
+				@Override
+				public void removedService(
+					ServiceReference<CXFJaxRsServiceRegistrator> reference,
+					CXFJaxRsServiceRegistrator service) {
+
+					CXFJaxRsServiceRegistrator serviceRegistrator =
+						_bundleContext.getService(reference);
+					try {
+						serviceRegistrator.removeProvider(service);
+					}
+					finally {
+						_bundleContext.ungetService(reference);
+					}
+				}
+			});
+
+		serviceTracker.open();
+
+		return serviceTracker;
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Object> reference, ServiceTracker<?, ?> serviceTracker) {
+
+		removedService(reference, serviceTracker);
+		addingService(reference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Object> reference, ServiceTracker<?, ?> serviceTracker) {
+
+		_bundleContext.ungetService(reference);
+
+		serviceTracker.close();
+	}
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
new file mode 100644
index 0000000..433f70c
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class ServicesServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer
+		<Object, ServiceTracker
+			<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>> {
+
+	private final BundleContext _bundleContext;
+
+	public ServicesServiceTrackerCustomizer(BundleContext bundleContext) {
+		_bundleContext = bundleContext;
+	}
+
+	@Override
+	public ServiceTracker
+		<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+	addingService(ServiceReference<Object> reference) {
+
+		String applicationSelector =
+			reference.getProperty("jaxrs.application.select").toString();
+
+		Bundle bundle = reference.getBundle();
+
+		BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
+
+		ClassLoader classLoader = bundleWiring.getClassLoader();
+
+		Object service = _bundleContext.getService(reference);
+
+		try {
+			Filter filter = _bundleContext.createFilter(
+				"(&(objectClass=" + CXFJaxRsServiceRegistrator.class.getName() + ")" +
+					applicationSelector + ")");
+
+			ServiceTracker
+				<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+				serviceTracker = new ServiceTracker<>(
+					_bundleContext, filter,
+					new AddonsServiceTrackerCustomizer(
+						_bundleContext, classLoader,
+						service));
+
+			serviceTracker.open();
+
+			return serviceTracker;
+		}
+		catch (InvalidSyntaxException ise) {
+			_bundleContext.ungetService(reference);
+
+			throw new RuntimeException(ise);
+		}
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Object> reference,
+		ServiceTracker
+			<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+			serviceTracker) {
+
+		removedService(reference, serviceTracker);
+
+		addingService(reference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Object> reference,
+		ServiceTracker
+			<CXFJaxRsServiceRegistrator, CXFJaxRsServiceRegistrator>
+			serviceTracker) {
+
+		serviceTracker.close();
+
+		_bundleContext.ungetService(reference);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8645504
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
+ * <p>
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ * <p>
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+package com.liferay.portal.remote.rest.extender.internal;
+
+import org.apache.cxf.Bus;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+
+import javax.ws.rs.core.Application;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+class SingletonServiceTrackerCustomizer
+	implements ServiceTrackerCustomizer
+		<Object, SingletonServiceTrackerCustomizer.Tracked> {
+
+	private BundleContext _bundleContext;
+	private Bus _bus;
+
+	public SingletonServiceTrackerCustomizer(
+		BundleContext bundleContext, Bus bus) {
+
+		_bundleContext = bundleContext;
+		_bus = bus;
+	}
+
+	@Override
+	public Tracked addingService(
+		ServiceReference<Object> serviceReference) {
+
+		final Object service = _bundleContext.getService(
+			serviceReference);
+
+		try {
+			String[] propertyKeys = serviceReference.getPropertyKeys();
+
+			Map<String, Object> properties = new HashMap<>(
+				propertyKeys.length);
+
+			for (String propertyKey : propertyKeys) {
+				if (propertyKey.equals("osgi.jaxrs.resource.base")) {
+					continue;
+				}
+				properties.put(
+					propertyKey, serviceReference.getProperty(propertyKey));
+			}
+
+			properties.put(
+				"CXF_ENDPOINT_ADDRESS",
+				serviceReference.getProperty("osgi.jaxrs.resource.base").
+					toString());
+
+			CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+				new CXFJaxRsServiceRegistrator(
+					_bus,
+					new Application() {
+						@Override
+						public Set<Object> getSingletons() {
+							return Collections.singleton(service);
+						}
+					},
+					properties);
+
+			return new Tracked(
+				cxfJaxRsServiceRegistrator, service,
+				_bundleContext.registerService(
+					CXFJaxRsServiceRegistrator.class,
+					cxfJaxRsServiceRegistrator, new Hashtable<>(properties)));
+		}
+		catch (Exception e) {
+			_bundleContext.ungetService(serviceReference);
+
+			throw e;
+		}
+	}
+
+	@Override
+	public void modifiedService(
+		ServiceReference<Object> serviceReference, Tracked tracked) {
+
+		removedService(serviceReference, tracked);
+
+		addingService(serviceReference);
+	}
+
+	@Override
+	public void removedService(
+		ServiceReference<Object> reference, Tracked tracked) {
+
+		_bundleContext.ungetService(reference);
+
+		Object service = tracked.getService();
+
+		CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator =
+			tracked.getCxfJaxRsServiceRegistrator();
+
+		cxfJaxRsServiceRegistrator.close();
+
+		tracked.getCxfJaxRsServiceRegistratorServiceRegistration().unregister();
+	}
+
+	public static class Tracked {
+
+		private final CXFJaxRsServiceRegistrator _cxfJaxRsServiceRegistrator;
+		private final Object _service;
+		private final ServiceRegistration<CXFJaxRsServiceRegistrator>
+			_cxfJaxRsServiceRegistratorServiceRegistration;
+
+		public Object getService() {
+			return _service;
+		}
+
+		public CXFJaxRsServiceRegistrator getCxfJaxRsServiceRegistrator() {
+			return _cxfJaxRsServiceRegistrator;
+		}
+
+		public ServiceRegistration<CXFJaxRsServiceRegistrator>
+			getCxfJaxRsServiceRegistratorServiceRegistration() {
+
+			return _cxfJaxRsServiceRegistratorServiceRegistration;
+		}
+
+		public Tracked(
+			CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator,
+			Object service,
+			ServiceRegistration<CXFJaxRsServiceRegistrator>
+				cxfJaxRsServiceRegistratorServiceRegistration) {
+
+			_cxfJaxRsServiceRegistrator = cxfJaxRsServiceRegistrator;
+			_service = service;
+			_cxfJaxRsServiceRegistratorServiceRegistration =
+				cxfJaxRsServiceRegistratorServiceRegistration;
+		}
+
+	}
+
+}
+
+

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language.properties
new file mode 100644
index 0000000..ff2b883
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_ar.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_ar.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_ar.properties
new file mode 100644
index 0000000..f7ddde5
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_ar.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u0628\u0642\u064a\u0629 \u0645\u0648\u0633\u0639 (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_bg.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_bg.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_bg.properties
new file mode 100644
index 0000000..93f99d3
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_bg.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u041f\u041e\u0427\u0418\u0412\u041a\u0410 Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_ca.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_ca.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_ca.properties
new file mode 100644
index 0000000..9476a3e
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_ca.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=Amplificador REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_cs.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_cs.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_cs.properties
new file mode 100644
index 0000000..76bc497
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_cs.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=OSTATN� za\u0159�zen� Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_da.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_da.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_da.properties
new file mode 100644
index 0000000..9b885db
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_da.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=RESTEN Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_de.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_de.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_de.properties
new file mode 100644
index 0000000..ff2b883
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_de.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_el.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_el.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_el.properties
new file mode 100644
index 0000000..1fd60a7
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_el.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u03a5\u03a0\u038c\u039b\u039f\u0399\u03a0\u039f \u03b1\u03c1\u03b1\u03af\u03c9\u03c3\u03b7\u03c2 (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_en.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_en.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_en.properties
new file mode 100644
index 0000000..ff2b883
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_en.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_es.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_es.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_es.properties
new file mode 100644
index 0000000..cc489da
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_es.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=Extensor REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_et.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_et.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_et.properties
new file mode 100644
index 0000000..824e6e1
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_et.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=�LEJ��NUD Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_eu.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_eu.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_eu.properties
new file mode 100644
index 0000000..e82a9e0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_eu.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Copy)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_fa.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_fa.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_fa.properties
new file mode 100644
index 0000000..64e00d0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_fa.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u0646\u062f\u0647 REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_fi.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_fi.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_fi.properties
new file mode 100644
index 0000000..d0e0a1d
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_fi.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST laajennin
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_fr.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_fr.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_fr.properties
new file mode 100644
index 0000000..52e43d9
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_fr.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=Extendeur REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_gl.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_gl.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_gl.properties
new file mode 100644
index 0000000..e82a9e0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_gl.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Copy)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_hi_IN.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_hi_IN.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_hi_IN.properties
new file mode 100644
index 0000000..340d552
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_hi_IN.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u092c\u093e\u0915\u0940 \u092d\u0930\u0928\u0947\u0935\u093e\u0932\u093e (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_hr.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_hr.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_hr.properties
new file mode 100644
index 0000000..e82a9e0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_hr.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Copy)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_hu.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_hu.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_hu.properties
new file mode 100644
index 0000000..cdc65c6
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_hu.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST kiterjeszt\u0151
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_in.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_in.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_in.properties
new file mode 100644
index 0000000..b60839d
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_in.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=SISANYA Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_it.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_it.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_it.properties
new file mode 100644
index 0000000..ff2b883
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_it.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_iw.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_iw.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_iw.properties
new file mode 100644
index 0000000..667e11d
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_iw.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u05de\u05d0\u05e8\u05d9\u05da REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_ja.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_ja.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_ja.properties
new file mode 100644
index 0000000..ff2b883
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_ja.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_ko.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_ko.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_ko.properties
new file mode 100644
index 0000000..3b3ecce
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_ko.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\ub098\uba38\uc9c0 \uc775\uc2a4\ud150\ub354 (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_lo.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_lo.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_lo.properties
new file mode 100644
index 0000000..e82a9e0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_lo.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Copy)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_lt.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_lt.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_lt.properties
new file mode 100644
index 0000000..4f37958
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_lt.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=POILSIO pl\u0117stuvo (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_nb.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_nb.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_nb.properties
new file mode 100644
index 0000000..9b885db
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_nb.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=RESTEN Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_nl.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_nl.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_nl.properties
new file mode 100644
index 0000000..b62adc9
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_nl.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST-extenders
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_nl_BE.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_nl_BE.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_nl_BE.properties
new file mode 100644
index 0000000..d137e77
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_nl_BE.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_pl.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_pl.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_pl.properties
new file mode 100644
index 0000000..0055a27
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_pl.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=RESZTA Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_BR.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_BR.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_BR.properties
new file mode 100644
index 0000000..cc489da
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_BR.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=Extensor REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_PT.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_PT.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_PT.properties
new file mode 100644
index 0000000..cc489da
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_pt_PT.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=Extensor REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_ro.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_ro.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_ro.properties
new file mode 100644
index 0000000..2c26380
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_ro.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=RESTUL Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_ru.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_ru.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_ru.properties
new file mode 100644
index 0000000..068b2cd
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_ru.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u041e\u0421\u0422\u0410\u041b\u042c\u041d\u042b\u0415 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u0435\u043b\u044c (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_sk.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_sk.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_sk.properties
new file mode 100644
index 0000000..05a4cbe
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_sk.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=Roz\u0161irova\u010d REST
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_sl.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_sl.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_sl.properties
new file mode 100644
index 0000000..393ff7f
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_sl.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=OSTALI Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS.properties
new file mode 100644
index 0000000..e82a9e0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Copy)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS_latin.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS_latin.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS_latin.properties
new file mode 100644
index 0000000..e82a9e0
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_sr_RS_latin.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST Extender (Automatic Copy)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_sv.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_sv.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_sv.properties
new file mode 100644
index 0000000..9b885db
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_sv.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=RESTEN Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_tr.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_tr.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_tr.properties
new file mode 100644
index 0000000..87ddb28
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_tr.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=D\u0130\u011eER Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_uk.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_uk.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_uk.properties
new file mode 100644
index 0000000..2e65121
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_uk.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u0420\u0415\u0428\u0422\u0410 Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_vi.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_vi.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_vi.properties
new file mode 100644
index 0000000..e01047a
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_vi.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=C�n l\u1ea1i Extender (Automatic Translation)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_CN.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_CN.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_CN.properties
new file mode 100644
index 0000000..1d4ebb9
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_CN.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=\u5176\u4ed6\u6269\u5c55\u7a0b\u5e8f
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_TW.properties
----------------------------------------------------------------------
diff --git a/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_TW.properties b/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_TW.properties
new file mode 100644
index 0000000..36dac4d
--- /dev/null
+++ b/org.apache.aries.rest.extender/src/main/resources/content/Language_zh_TW.properties
@@ -0,0 +1 @@
+rest.extender.configuration.name=REST\u64f4\u5145\u5668
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/osgi-rest.iml
----------------------------------------------------------------------
diff --git a/osgi-rest.iml b/osgi-rest.iml
deleted file mode 100644
index caad45e..0000000
--- a/osgi-rest.iml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module external.linked.project.id="osgi-rest" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/build" />
-    <output-test url="file://$MODULE_DIR$/build" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
-      <excludeFolder url="file://$MODULE_DIR$/build" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2ef5d2b..3da7abe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@
             <plugin>
                 <groupId>biz.aQute.bnd</groupId>
                 <artifactId>bnd-maven-plugin</artifactId>
-                <version>3.3.0</version>
+                <version>3.4.0-SNAPSHOT</version>
                 <executions>
                     <execution>
                         <goals>
@@ -47,6 +47,11 @@
             </plugin>
         </plugins>
     </build>
+    <modules>
+        <module>org.apache.aries.jax-rs.example</module>
+        <module>org.apache.aries.jax-rs.cxf-common</module>
+        <module>org.apache.aries.rest.extender</module>
+    </modules>
     <dependencies>
         <dependency>
             <groupId>org.osgi</groupId>
@@ -71,4 +76,11 @@
             <layout>default</layout>
         </repository>
     </repositories>
-</project>
\ No newline at end of file
+    <pluginRepositories>
+        <pluginRepository>
+            <id>bnd-snapshots</id>
+            <url>https://bndtools.ci.cloudbees.com/job/bnd.master/lastSuccessfulBuild/artifact/dist/bundles/</url>
+            <layout>default</layout>
+        </pluginRepository>
+    </pluginRepositories>
+</project>

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/.gitignore
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/.gitignore b/portal-remote-cxf-common/.gitignore
deleted file mode 100644
index 83ccc54..0000000
--- a/portal-remote-cxf-common/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/build/
-/bin/

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/.lfrbuild-portal
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/.lfrbuild-portal b/portal-remote-cxf-common/.lfrbuild-portal
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/bnd.bnd
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/bnd.bnd b/portal-remote-cxf-common/bnd.bnd
deleted file mode 100644
index 3daca64..0000000
--- a/portal-remote-cxf-common/bnd.bnd
+++ /dev/null
@@ -1,63 +0,0 @@
-Bundle-Activator: com.liferay.portal.remote.cxf.common.activator.CXFEndpointPublisherActivator
-Bundle-ClassPath:\
-	.,\
-	lib/cxf-core.jar,\
-	lib/cxf-rt-bindings-soap.jar,\
-	lib/cxf-rt-databinding-jaxb.jar,\
-	lib/cxf-rt-transports-http.jar,\
-	lib/cxf-rt-wsdl.jar,\
-	lib/cxf-tools-common.jar,\
-	lib/cxf-tools-validator.jar,\
-	lib/javax.annotation-api.jar,\
-	lib/wsdl4j.jar,\
-	lib/xmlschema-core.jar
-Bundle-Name: Liferay Portal Remote CXF Common
-Bundle-SymbolicName: com.liferay.portal.remote.cxf.common
-Bundle-Version: 2.0.6
-Export-Package:\
-	javax.wsdl.*;version="1.2",\
-	\
-	org.apache.cxf.*;version="3.1.7",\
-	org.apache.ws.commons.schema.*;version="2.1.0"
-Import-Package:\
-	!com.sun.*,\
-	\
-	!javax.validation.*,\
-	\
-	!net.sf.cglib.proxy.*,\
-	\
-	!org.apache.abdera.*,\
-	!org.apache.aries.*,\
-	!org.apache.cxf.aegis.*,\
-	!org.apache.cxf.ws.policy.*,\
-	!org.apache.neethi.*,\
-	!org.apache.velocity.*,\
-	!org.apache.xml.resolver.*,\
-	!org.apache.xmlbeans.*,\
-	\
-	!org.junit.*,\
-	\
-	!org.jvnet.fastinfoset.*,\
-	!org.jvnet.staxex.*,\
-	\
-	!org.osgi.service.blueprint.*,\
-	\
-	!org.relaxng.datatype.*,\
-	\
-	!org.slf4j.spi.*,\
-	\
-	!org.springframework.*,\
-	*
-Liferay-Releng-Module-Group-Description:
-Liferay-Releng-Module-Group-Title: Remote Service Engines
--includeresource:\
-	lib/cxf-core.jar=cxf-core-3.1.7.jar,\
-	lib/cxf-rt-bindings-soap.jar=cxf-rt-bindings-soap-3.1.7.jar,\
-	lib/cxf-rt-databinding-jaxb.jar=cxf-rt-databinding-jaxb-3.1.7.jar,\
-	lib/cxf-rt-transports-http.jar=cxf-rt-transports-http-3.1.7.jar,\
-	lib/cxf-rt-wsdl.jar=cxf-rt-wsdl-3.1.7.jar,\
-	lib/cxf-tools-common.jar=cxf-tools-common-3.1.7.jar,\
-	lib/cxf-tools-validator.jar=cxf-tools-validator-3.1.7.jar,\
-	lib/javax.annotation-api.jar=javax.annotation-api-1.2.jar,\
-	lib/wsdl4j.jar=wsdl4j-1.6.3.jar,\
-	lib/xmlschema-core.jar=xmlschema-core-2.2.1.jar

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/build.gradle
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/build.gradle b/portal-remote-cxf-common/build.gradle
deleted file mode 100644
index f431c26..0000000
--- a/portal-remote-cxf-common/build.gradle
+++ /dev/null
@@ -1,48 +0,0 @@
-task deployDependencies(type: Copy)
-
-dependencies {
-	compile group: "biz.aQute.bnd", name: "biz.aQute.bndlib", version: "3.1.0"
-	compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.2'
-	compile group: "javax.servlet", name: "javax.servlet-api", version: "3.0.1"
-	compile group: "org.apache.cxf", name: "cxf-core", version: "3.1.7"
-	compile group: "org.apache.cxf", name: "cxf-rt-bindings-soap", version: "3.1.7"
-	compile group: "org.apache.cxf", name: "cxf-rt-databinding-jaxb", version: "3.1.7"
-	compile group: "org.apache.cxf", name: "cxf-rt-transports-http", version: "3.1.7"
-	compile group: "org.apache.cxf", name: "cxf-rt-wsdl", version: "3.1.7"
-	compile group: "org.apache.cxf", name: "cxf-tools-common", version: "3.1.7"
-	compile group: "org.apache.cxf", name: "cxf-tools-validator", version: "3.1.7"
-	compile group: "org.apache.felix", name: "org.apache.felix.dependencymanager", version: "3.2.0"
-//	compile group: "org.apache.ws.xmlschema", name: "xmlschema-core", version: "2.1.0"
-	compile group: "org.codehaus.woodstox", name: "stax2-api", version: "3.1.4"
-	compile group: "org.codehaus.woodstox", name: "woodstox-core-asl", version: "4.4.1"
-	compile group: "org.osgi", name: "org.osgi.core", version: "5.0.0"
-	compile group: "org.osgi", name: "org.osgi.service.http.whiteboard", version: "1.0.0"
-	compile group: "org.slf4j", name: "slf4j-api", version: "1.7.2"
-	compile group: "wsdl4j", name: "wsdl4j", version: "1.6.3"
-}
-
-deployDependencies {
-	boolean keepDependencyVersions = Boolean.getBoolean("deploy.dependencies.keep.versions")
-
-	ext {
-		autoClean = false
-	}
-
-	from configurations.runtime
-
-	include "stax2-api-*.jar"
-	include "woodstox-core-asl-*.jar"
-
-	into {
-		liferay.deployDir
-	}
-
-	String renameSuffix = ".jar"
-
-	if (keepDependencyVersions) {
-		renameSuffix = '-$1.jar'
-	}
-
-	rename(/stax2-api-(.+)\.jar/, "org.codehaus.stax2" + renameSuffix)
-	rename(/woodstox-core-asl-(.+)\.jar/, "com.ctc.wstx" + renameSuffix)
-}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$1.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$1.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$1.class
deleted file mode 100644
index 8bcb75e..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$1.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$1.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$1.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$1.class
deleted file mode 100644
index 524bf3a..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$1.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$RemoteAccessFilter.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$RemoteAccessFilter.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$RemoteAccessFilter.class
deleted file mode 100644
index 359d9e3..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator$RemoteAccessFilter.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator.class
deleted file mode 100644
index fe4d730..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher$ServicesRegistrator.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.class
deleted file mode 100644
index 01b4059..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/CXFEndpointPublisher.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/ExtensionManager.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/ExtensionManager.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/ExtensionManager.class
deleted file mode 100644
index c54e11c..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/ExtensionManager.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.class
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.class b/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.class
deleted file mode 100644
index aabdb47..0000000
Binary files a/portal-remote-cxf-common/classes/com/liferay/portal/remote/cxf/common/configuration/CXFEndpointPublisherConfiguration.class and /dev/null differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/content/Language.properties
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/content/Language.properties b/portal-remote-cxf-common/classes/content/Language.properties
deleted file mode 100644
index 12dd09d..0000000
--- a/portal-remote-cxf-common/classes/content/Language.properties
+++ /dev/null
@@ -1 +0,0 @@
-cxf.endpoint.configuration.name=CXF Endpoints
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/c7de7755/portal-remote-cxf-common/classes/content/Language_ar.properties
----------------------------------------------------------------------
diff --git a/portal-remote-cxf-common/classes/content/Language_ar.properties b/portal-remote-cxf-common/classes/content/Language_ar.properties
deleted file mode 100644
index 1e2a617..0000000
--- a/portal-remote-cxf-common/classes/content/Language_ar.properties
+++ /dev/null
@@ -1 +0,0 @@
-cxf.endpoint.configuration.name=\u0646\u0642\u0627\u0637 \u0627\u0644\u0646\u0647\u0627\u064a\u0629 CXF (Automatic Translation)
\ No newline at end of file