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();
+        }
     }
 
 }

Reply via email to