Repository: karaf-cave Updated Branches: refs/heads/master 1fc37159f -> 63785326d
Use a servlet to register the rest endpoint so that everything can be under /cave/* Project: http://git-wip-us.apache.org/repos/asf/karaf-cave/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf-cave/commit/63785326 Tree: http://git-wip-us.apache.org/repos/asf/karaf-cave/tree/63785326 Diff: http://git-wip-us.apache.org/repos/asf/karaf-cave/diff/63785326 Branch: refs/heads/master Commit: 63785326ddc2b63518e832081aadce789bf528fa Parents: 1fc3715 Author: Guillaume Nodet <[email protected]> Authored: Tue May 5 17:45:32 2015 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Tue May 5 17:45:32 2015 +0200 ---------------------------------------------------------------------- server/rest/pom.xml | 5 ++ .../karaf/cave/server/rest/Activator.java | 50 ++++++++++++++------ 2 files changed, 41 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/63785326/server/rest/pom.xml ---------------------------------------------------------------------- diff --git a/server/rest/pom.xml b/server/rest/pom.xml index 0b6afb1..f49cb1f 100644 --- a/server/rest/pom.xml +++ b/server/rest/pom.xml @@ -35,6 +35,11 @@ <dependencies> <dependency> + <groupId>${servlet.spec.groupId}</groupId> + <artifactId>${servlet.spec.artifactId}</artifactId> + <scope>provided</scope> + </dependency> + <dependency> <groupId>org.apache.karaf.cave.server</groupId> <artifactId>org.apache.karaf.cave.server.storage</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/karaf-cave/blob/63785326/server/rest/src/main/java/org/apache/karaf/cave/server/rest/Activator.java ---------------------------------------------------------------------- diff --git a/server/rest/src/main/java/org/apache/karaf/cave/server/rest/Activator.java b/server/rest/src/main/java/org/apache/karaf/cave/server/rest/Activator.java index c44fb34..20a967d 100644 --- a/server/rest/src/main/java/org/apache/karaf/cave/server/rest/Activator.java +++ b/server/rest/src/main/java/org/apache/karaf/cave/server/rest/Activator.java @@ -16,39 +16,61 @@ */ package org.apache.karaf.cave.server.rest; -import org.apache.cxf.endpoint.Server; -import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; -import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import java.util.Enumeration; +import java.util.Hashtable; + +import org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet; import org.apache.karaf.cave.server.api.CaveRepositoryService; import org.apache.karaf.util.tracker.BaseActivator; +import org.apache.karaf.util.tracker.annotation.Managed; import org.apache.karaf.util.tracker.annotation.RequireService; import org.apache.karaf.util.tracker.annotation.Services; +import org.osgi.service.http.HttpService; @Services( - requires = { @RequireService(CaveRepositoryService.class) } + requires = { @RequireService(CaveRepositoryService.class), + @RequireService(HttpService.class) } ) +@Managed("org.apache.karaf.cave.rest") public class Activator extends BaseActivator { - private Server server; + private HttpService httpService; + private String alias; + private CXFNonSpringJaxrsServlet servlet; @Override protected void doStart() throws Exception { + httpService = getTrackedService(HttpService.class); + if (httpService == null) { + return; + } + Service service = new Service(getTrackedService(CaveRepositoryService.class)); - JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); - sf.setResourceClasses(Service.class, Repository.class); - sf.setResourceProvider(Service.class, new SingletonResourceProvider(service)); - sf.setAddress("/cave/rest"); - server = sf.create(); + + String alias = getString("cave.rest.alias", "/cave/rest"); + Hashtable<String, String> config = new Hashtable<>(); + if (getConfiguration() != null) { + for (Enumeration<String> e = getConfiguration().keys(); e.hasMoreElements();) { + String key = e.nextElement(); + String val = getConfiguration().get(key).toString(); + config.put(key, val); + } + } + this.alias = alias; + this.servlet = new CXFNonSpringJaxrsServlet(service); + this.httpService.registerServlet(this.alias, this.servlet, config, null); } @Override protected void doStop() { - if (server != null) { - server.destroy(); - server = null; - } super.doStop(); + if (httpService != null) { + httpService.unregister(alias); + } + if (this.servlet != null) { + this.servlet.destroy(); + } } }
