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:46 UTC
[42/50] [abbrv] aries-jax-rs-whiteboard git commit: Update License
and packages
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/LICENSE
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/LICENSE b/jax-rs.whiteboard/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/jax-rs.whiteboard/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/bnd.bnd
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/bnd.bnd b/jax-rs.whiteboard/bnd.bnd
index c18bdf6..078b196 100644
--- a/jax-rs.whiteboard/bnd.bnd
+++ b/jax-rs.whiteboard/bnd.bnd
@@ -1,4 +1,4 @@
-Bundle-Activator: com.liferay.portal.remote.rest.extender.activator.CXFJaxRsBundleActivator
+Bundle-Activator: org.apache.aries.jax.rs.whiteboard.activator.CXFJaxRsBundleActivator
Provide-Capability: \
osgi.implementation; \
osgi.implementation='aries.jax-rs'; \
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
deleted file mode 100644
index d81ff31..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/CXFJaxRsBundleActivator.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * 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 java.util.ArrayList;
-import java.util.Collections;
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import javax.ws.rs.ext.RuntimeDelegate;
-
-import org.apache.cxf.Bus;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Filter;
-import org.osgi.framework.wiring.BundleWiring;
-import org.osgi.util.tracker.ServiceTracker;
-
-import com.liferay.portal.remote.rest.extender.internal.BusServiceTrackerCustomizer;
-import com.liferay.portal.remote.rest.extender.internal.ServicesServiceTrackerCustomizer;
-
-/**
- * @author Carlos Sierra Andr�s
- */
-public class CXFJaxRsBundleActivator implements BundleActivator {
-
- private ServiceTracker<?, ?> _busServiceTracker;
- private ServiceTracker<?, ?> _singletonsTracker;
- private ServicesRegistrator _servicesRegistrator;
-
- @Override
- public void start(BundleContext bundleContext) throws Exception {
- Thread thread = Thread.currentThread();
-
- ClassLoader contextClassLoader = thread.getContextClassLoader();
-
- Bundle bundle = bundleContext.getBundle();
-
- BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
-
- thread.setContextClassLoader(bundleWiring.getClassLoader());
-
- try {
-
- // Initialize instance so it is never looked up again
-
- RuntimeDelegate.getInstance();
- }
- finally {
- thread.setContextClassLoader(contextClassLoader);
- }
-
- Dictionary<String, Object> runtimeProperties = new Hashtable<>();
-
- runtimeProperties.put("endpoints", new ArrayList<String>());
-
- // TODO make the context path of the JAX-RS Whiteboard configurable.
-
- _servicesRegistrator = new ServicesRegistrator(bundleContext);
-
- _servicesRegistrator.start();
-
- _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();
-
- _servicesRegistrator.stop();
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesRegistrator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesRegistrator.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesRegistrator.java
deleted file mode 100644
index e457674..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/activator/ServicesRegistrator.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * 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.activator;
-
-import org.apache.cxf.Bus;
-import org.apache.cxf.bus.CXFBusFactory;
-import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.http.context.ServletContextHelper;
-import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.servlet.Servlet;
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-/**
- * @author Carlos Sierra Andr�s
- */
-public class ServicesRegistrator
- implements ServiceTrackerCustomizer<ServletContextHelper, Object> {
-
- public ServicesRegistrator(BundleContext bundleContext) {
- _bundleContext = bundleContext;
- }
-
- @Override
- public Object addingService(
- ServiceReference<ServletContextHelper> reference) {
-
- String contextPath = (String)reference.getProperty(
- HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH);
-
- CXFNonSpringServlet cxfNonSpringServlet = new CXFNonSpringServlet();
-
- CXFBusFactory cxfBusFactory =
- (CXFBusFactory) CXFBusFactory.newInstance(
- CXFBusFactory.class.getName());
-
- Bus bus = cxfBusFactory.createBus();
-
- Dictionary<String, Object> properties = new Hashtable<>();
-
- properties.put(
- HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
- "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" +
- HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME + ")");
- properties.put(
- HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/*");
- properties.put(Constants.SERVICE_RANKING, -1);
-
- cxfNonSpringServlet.setBus(bus);
-
- _servletServiceRegistration = _bundleContext.registerService(
- Servlet.class, cxfNonSpringServlet, properties);
-
- properties = new Hashtable<>();
-
- properties.put(
- HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH,
- contextPath);
-
- _busServiceRegistration = _bundleContext.registerService(
- Bus.class, bus, properties);
-
- return new Object();
- }
-
- @Override
- public void modifiedService(
- ServiceReference<ServletContextHelper> reference, Object object) {
- }
-
- @Override
- public void removedService(
- ServiceReference<ServletContextHelper> reference, Object object) {
-
- try {
- _busServiceRegistration.unregister();
- }
- catch (Exception e) {
- if (_logger.isWarnEnabled()) {
- _logger.warn(
- "Unable to unregister CXF bus service registration " +
- _busServiceRegistration);
- }
- }
-
- try {
- _servletServiceRegistration.unregister();
- }
- catch (Exception e) {
- if (_logger.isWarnEnabled()) {
- _logger.warn(
- "Unable to unregister servlet service registration " +
- _servletServiceRegistration);
- }
- }
- }
-
- public void start() throws InvalidSyntaxException {
- Filter filter = _bundleContext.createFilter(
- "(&(objectClass=" + ServletContextHelper.class.getName() + ")(" +
- HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" +
- HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME +"))");
-
- _serviceTracker = new ServiceTracker<>(_bundleContext, filter, this);
-
- _serviceTracker.open();
- }
-
- public void stop() {
- _serviceTracker.close();
- }
-
- private static final Logger _logger = LoggerFactory.getLogger(
- ServicesRegistrator.class);
-
- private final BundleContext _bundleContext;
- private ServiceRegistration<Bus> _busServiceRegistration;
- private ServiceTracker<ServletContextHelper, Object> _serviceTracker;
- private ServiceRegistration<Servlet> _servletServiceRegistration;
-
-}
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
deleted file mode 100644
index 8900ded..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/AddonsServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * 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/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
deleted file mode 100644
index 8296683..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ApplicationServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * 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 java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
-import javax.ws.rs.core.Application;
-
-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;
-
-/**
- * @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 (Throwable 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/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
deleted file mode 100644
index ba15c1e..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/BusServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * 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 java.util.Arrays;
-import java.util.Collection;
-
-import javax.ws.rs.core.Application;
-
-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;
-
-/**
- * @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, filtersAndInterceptorsServiceTracker);
- }
- 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/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
deleted file mode 100644
index 7449ec8..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/CXFJaxRsServiceRegistrator.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * 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/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
deleted file mode 100644
index 07e8c7a..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * 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/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
deleted file mode 100644
index 433f70c..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/ServicesServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * 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/fe021547/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
deleted file mode 100644
index 8645504..0000000
--- a/jax-rs.whiteboard/src/main/java/com/liferay/portal/remote/rest/extender/internal/SingletonServiceTrackerCustomizer.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * 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/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
new file mode 100644
index 0000000..9bff510
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/CXFJaxRsBundleActivator.java
@@ -0,0 +1,103 @@
+/*
+ * 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.aries.jax.rs.whiteboard.activator;
+
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import javax.ws.rs.ext.RuntimeDelegate;
+
+import org.apache.cxf.Bus;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.util.tracker.ServiceTracker;
+
+import org.apache.aries.jax.rs.whiteboard.internal.BusServiceTrackerCustomizer;
+import org.apache.aries.jax.rs.whiteboard.internal.ServicesServiceTrackerCustomizer;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class CXFJaxRsBundleActivator implements BundleActivator {
+
+ private ServiceTracker<?, ?> _busServiceTracker;
+ private ServiceTracker<?, ?> _singletonsTracker;
+ private ServicesRegistrator _servicesRegistrator;
+
+ @Override
+ public void start(BundleContext bundleContext) throws Exception {
+ Thread thread = Thread.currentThread();
+
+ ClassLoader contextClassLoader = thread.getContextClassLoader();
+
+ Bundle bundle = bundleContext.getBundle();
+
+ BundleWiring bundleWiring = bundle.adapt(BundleWiring.class);
+
+ thread.setContextClassLoader(bundleWiring.getClassLoader());
+
+ try {
+
+ // Initialize instance so it is never looked up again
+
+ RuntimeDelegate.getInstance();
+ }
+ finally {
+ thread.setContextClassLoader(contextClassLoader);
+ }
+
+ Dictionary<String, Object> runtimeProperties = new Hashtable<>();
+
+ runtimeProperties.put("endpoints", new ArrayList<String>());
+
+ // TODO make the context path of the JAX-RS Whiteboard configurable.
+
+ _servicesRegistrator = new ServicesRegistrator(bundleContext);
+
+ _servicesRegistrator.start();
+
+ _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();
+
+ _servicesRegistrator.stop();
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/ServicesRegistrator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/ServicesRegistrator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/ServicesRegistrator.java
new file mode 100644
index 0000000..1aeee29
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/activator/ServicesRegistrator.java
@@ -0,0 +1,147 @@
+/*
+ * 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.aries.jax.rs.whiteboard.activator;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.CXFBusFactory;
+import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.http.context.ServletContextHelper;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.Servlet;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+/**
+ * @author Carlos Sierra Andr�s
+ */
+public class ServicesRegistrator
+ implements ServiceTrackerCustomizer<ServletContextHelper, Object> {
+
+ public ServicesRegistrator(BundleContext bundleContext) {
+ _bundleContext = bundleContext;
+ }
+
+ @Override
+ public Object addingService(
+ ServiceReference<ServletContextHelper> reference) {
+
+ String contextPath = (String)reference.getProperty(
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH);
+
+ CXFNonSpringServlet cxfNonSpringServlet = new CXFNonSpringServlet();
+
+ CXFBusFactory cxfBusFactory =
+ (CXFBusFactory) CXFBusFactory.newInstance(
+ CXFBusFactory.class.getName());
+
+ Bus bus = cxfBusFactory.createBus();
+
+ Dictionary<String, Object> properties = new Hashtable<>();
+
+ properties.put(
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
+ "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" +
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME + ")");
+ properties.put(
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/*");
+ properties.put(Constants.SERVICE_RANKING, -1);
+
+ cxfNonSpringServlet.setBus(bus);
+
+ _servletServiceRegistration = _bundleContext.registerService(
+ Servlet.class, cxfNonSpringServlet, properties);
+
+ properties = new Hashtable<>();
+
+ properties.put(
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_PATH,
+ contextPath);
+
+ _busServiceRegistration = _bundleContext.registerService(
+ Bus.class, bus, properties);
+
+ return new Object();
+ }
+
+ @Override
+ public void modifiedService(
+ ServiceReference<ServletContextHelper> reference, Object object) {
+ }
+
+ @Override
+ public void removedService(
+ ServiceReference<ServletContextHelper> reference, Object object) {
+
+ try {
+ _busServiceRegistration.unregister();
+ }
+ catch (Exception e) {
+ if (_logger.isWarnEnabled()) {
+ _logger.warn(
+ "Unable to unregister CXF bus service registration " +
+ _busServiceRegistration);
+ }
+ }
+
+ try {
+ _servletServiceRegistration.unregister();
+ }
+ catch (Exception e) {
+ if (_logger.isWarnEnabled()) {
+ _logger.warn(
+ "Unable to unregister servlet service registration " +
+ _servletServiceRegistration);
+ }
+ }
+ }
+
+ public void start() throws InvalidSyntaxException {
+ Filter filter = _bundleContext.createFilter(
+ "(&(objectClass=" + ServletContextHelper.class.getName() + ")(" +
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=" +
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_DEFAULT_CONTEXT_NAME +"))");
+
+ _serviceTracker = new ServiceTracker<>(_bundleContext, filter, this);
+
+ _serviceTracker.open();
+ }
+
+ public void stop() {
+ _serviceTracker.close();
+ }
+
+ private static final Logger _logger = LoggerFactory.getLogger(
+ ServicesRegistrator.class);
+
+ private final BundleContext _bundleContext;
+ private ServiceRegistration<Bus> _busServiceRegistration;
+ private ServiceTracker<ServletContextHelper, Object> _serviceTracker;
+ private ServiceRegistration<Servlet> _servletServiceRegistration;
+
+}
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AddonsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AddonsServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AddonsServiceTrackerCustomizer.java
new file mode 100644
index 0000000..4e7a60a
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/AddonsServiceTrackerCustomizer.java
@@ -0,0 +1,107 @@
+/*
+ * 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.aries.jax.rs.whiteboard.internal;
+
+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 cxfJaxRsServiceRegistrator) {
+
+ removedService(reference, cxfJaxRsServiceRegistrator);
+
+ addingService(reference);
+ }
+
+ @Override
+ public void removedService(
+ ServiceReference<CXFJaxRsServiceRegistrator> reference,
+ CXFJaxRsServiceRegistrator cxfJaxRsServiceRegistrator) {
+
+ if (_serviceClass.isAnnotationPresent(Provider.class)) {
+ cxfJaxRsServiceRegistrator.removeProvider(_service);
+ } else {
+ cxfJaxRsServiceRegistrator.removeService(_service);
+ }
+
+ _bundleContext.ungetService(reference);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java
new file mode 100644
index 0000000..8f7acc0
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ApplicationServiceTrackerCustomizer.java
@@ -0,0 +1,135 @@
+/*
+ * 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.aries.jax.rs.whiteboard.internal;
+
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.ws.rs.core.Application;
+
+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;
+
+/**
+ * @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);
+
+ ServiceRegistration<CXFJaxRsServiceRegistrator>
+ cxfJaxRsServiceRegistratorRegistration =
+ _bundleContext.registerService(
+ CXFJaxRsServiceRegistrator.class,
+ cxfJaxRsServiceRegistrator,
+ new Hashtable<>(properties));
+
+ return new Tracked(
+ cxfJaxRsServiceRegistrator, application,
+ cxfJaxRsServiceRegistratorRegistration);
+ }
+ catch (Throwable 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._cxfJaxRsServiceRegistrator.close();
+
+ tracked._cxfJaxRsServiceRegistratorServiceRegistration.unregister();
+ }
+
+ public static class Tracked {
+
+ private final CXFJaxRsServiceRegistrator _cxfJaxRsServiceRegistrator;
+ private final Application _application;
+ private final ServiceRegistration<CXFJaxRsServiceRegistrator>
+ _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/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/BusServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/BusServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/BusServiceTrackerCustomizer.java
new file mode 100644
index 0000000..59d5323
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/BusServiceTrackerCustomizer.java
@@ -0,0 +1,121 @@
+/*
+ * 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.aries.jax.rs.whiteboard.internal;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import javax.ws.rs.core.Application;
+
+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;
+
+/**
+ * @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,
+ filtersAndInterceptorsServiceTracker);
+ }
+ 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/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
new file mode 100644
index 0000000..6cfc4d1
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/CXFJaxRsServiceRegistrator.java
@@ -0,0 +1,151 @@
+/*
+ * 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.aries.jax.rs.whiteboard.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/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
new file mode 100644
index 0000000..671a413
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/FiltersAndInterceptorsServiceTrackerCustomizer.java
@@ -0,0 +1,126 @@
+/*
+ * 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.aries.jax.rs.whiteboard.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/fe021547/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServicesServiceTrackerCustomizer.java
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServicesServiceTrackerCustomizer.java b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServicesServiceTrackerCustomizer.java
new file mode 100644
index 0000000..b1e6484
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/ServicesServiceTrackerCustomizer.java
@@ -0,0 +1,102 @@
+/*
+ * 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.aries.jax.rs.whiteboard.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, ?>> {
+
+ private final BundleContext _bundleContext;
+
+ public ServicesServiceTrackerCustomizer(BundleContext bundleContext) {
+ _bundleContext = bundleContext;
+ }
+
+ @Override
+ public ServiceTracker
+ <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, ?>
+ 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, ?> serviceTracker) {
+
+ removedService(reference, serviceTracker);
+
+ addingService(reference);
+ }
+
+ @Override
+ public void removedService(
+ ServiceReference<Object> reference,
+ ServiceTracker<CXFJaxRsServiceRegistrator, ?> serviceTracker) {
+
+ serviceTracker.close();
+
+ _bundleContext.ungetService(reference);
+ }
+
+}