fix examples, setup the default application page

Signed-off-by: Raymond Augé <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/commit/7a47410a
Tree: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/7a47410a
Diff: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/7a47410a

Branch: refs/heads/master
Commit: 7a47410aa1a795a05f7dcc178fb72391b1356e80
Parents: ca89490
Author: Raymond Augé <[email protected]>
Authored: Fri Jun 30 18:04:31 2017 -0400
Committer: Raymond Augé <[email protected]>
Committed: Fri Jun 30 19:02:58 2017 -0400

----------------------------------------------------------------------
 jax-rs.example/logback.xml                      |   2 +
 .../aries/jax/rs/example/ExampleAddon.java      |  18 ++--
 .../jax/rs/example/ExampleApplication.java      |  49 ---------
 .../aries/jax/rs/example/ExampleFilter.java     |   3 +-
 .../activator/CXFJaxRsBundleActivator.java      |  40 ++++---
 .../internal/CXFJaxRsServiceRegistrator.java    |  22 ++--
 .../whiteboard/internal/DefaultApplication.java |  23 ++++
 .../jax/rs/whiteboard/internal/DefaultWeb.java  | 105 +++++++++++++++++++
 .../aries/jax/rs/whiteboard/internal/Utils.java |   2 +-
 .../resources/static/Arieslogo_Horizontal.gif   | Bin 0 -> 6029 bytes
 .../src/main/resources/static/highlight/LICENSE |  24 +++++
 .../static/highlight/highlight.pack.js          |   2 +
 .../static/highlight/styles/github.css          |  99 +++++++++++++++++
 .../src/main/resources/static/index.html        | 102 ++++++++++++++++++
 .../src/main/resources/static/style.css         |  25 +++++
 15 files changed, 435 insertions(+), 81 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.example/logback.xml
----------------------------------------------------------------------
diff --git a/jax-rs.example/logback.xml b/jax-rs.example/logback.xml
index 1952216..5efda45 100644
--- a/jax-rs.example/logback.xml
+++ b/jax-rs.example/logback.xml
@@ -9,6 +9,8 @@
     </encoder>
   </appender>
 
+  <logger name="org.apache.aries.jax.rs.example" level="debug" />
+
   <root level="error">
     <appender-ref ref="STDOUT" />
   </root>

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleAddon.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleAddon.java
 
b/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleAddon.java
index d2646dd..10f769a 100644
--- 
a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleAddon.java
+++ 
b/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleAddon.java
@@ -19,8 +19,9 @@ package org.apache.aries.jax.rs.example;
 
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import javax.annotation.PostConstruct;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
@@ -29,7 +30,7 @@ import javax.ws.rs.core.UriInfo;
 
 @Component(
     property = {
-        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT + 
"=(osgi.jaxrs.name=example-application)",
+        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT + 
"=(osgi.jaxrs.name=.default)",
         JaxRSWhiteboardConstants.JAX_RS_RESOURCE + "=true"
     },
     service = ExampleAddon.class
@@ -39,15 +40,16 @@ public class ExampleAddon {
     @GET
     @Path("/{name}")
     public String sayHello(@PathParam("name") String name) {
-        return "Hello " + name;
-    }
+        if (_log.isDebugEnabled()) {
+            _log.debug("URI: " + _uriInfo.getAbsolutePath());
+        }
 
-    @PostConstruct
-    public void init() {
-        System.out.println("URIINFO: " + _uriInfo);
+        return "Hello " + name;
     }
 
     @Context
     UriInfo _uriInfo;
 
-}
+    private static final Logger _log = LoggerFactory.getLogger(
+        ExampleAddon.class);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleApplication.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleApplication.java
 
b/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleApplication.java
deleted file mode 100644
index a38c430..0000000
--- 
a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleApplication.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.example;
-
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Application;
-import java.util.Collections;
-import java.util.Set;
-
-@Component(
-    property = {
-        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_BASE + 
"=/example-application",
-        JaxRSWhiteboardConstants.JAX_RS_NAME + "=example-application"
-    },
-    service = Application.class
-)
-public class ExampleApplication extends Application {
-
-    @Override
-    public Set<Object> getSingletons() {
-        return Collections.<Object>singleton(this);
-    }
-
-    @GET
-    @Produces("text/plain")
-    public String sayHello() {
-        return "Hello world";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleFilter.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleFilter.java
 
b/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleFilter.java
index fb051f0..151429d 100644
--- 
a/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleFilter.java
+++ 
b/jax-rs.example/src/main/java/org/apache/aries/jax/rs/example/ExampleFilter.java
@@ -27,8 +27,7 @@ import java.io.IOException;
 
 @Component(
     property = {
-        "osgi.jaxrs.filter.base=/examples",
-        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT + 
"=(osgi.jaxrs.name=example-application)",
+        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT + 
"=(osgi.jaxrs.name=.default)",
         JaxRSWhiteboardConstants.JAX_RS_EXTENSION + "=true"
     }
 )

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/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
index 0ede97d..d2a9204 100644
--- 
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
@@ -24,6 +24,8 @@ import javax.ws.rs.ext.RuntimeDelegate;
 
 import org.apache.aries.jax.rs.whiteboard.internal.CXFJaxRsServiceRegistrator;
 import org.apache.aries.jax.rs.whiteboard.internal.ClientBuilderFactory;
+import org.apache.aries.jax.rs.whiteboard.internal.DefaultApplication;
+import org.apache.aries.jax.rs.whiteboard.internal.DefaultWeb;
 import org.apache.aries.osgi.functional.OSGi;
 import org.apache.aries.osgi.functional.OSGiResult;
 import org.apache.cxf.Bus;
@@ -36,10 +38,14 @@ import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Map;
 
 import static java.lang.String.format;
 import static org.apache.aries.jax.rs.whiteboard.internal.Utils.*;
@@ -55,17 +61,25 @@ import static 
org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants.JAX_RS_
 
 public class CXFJaxRsBundleActivator implements BundleActivator {
 
+    private static final Logger _log = 
LoggerFactory.getLogger(CXFJaxRsBundleActivator.class);
+
     private OSGiResult<?> _applicationsResult;
     private OSGiResult<?> _applicationSingletonsResult;
     private BundleContext _bundleContext;
     private Bus _bus;
     private ServiceRegistration<ClientBuilder> _clientBuilder;
+    private ServiceRegistration<DefaultWeb> _defaultWeb;
     private OSGiResult<?> _extensionsResult;
     private OSGiResult<?> _singletonsResult;
 
     @Override
     public void start(BundleContext bundleContext) throws Exception {
         _bundleContext = bundleContext;
+
+        if (_log.isDebugEnabled()) {
+            _log.debug("Beginning initialization");
+        }
+
         initRuntimeDelegate(bundleContext);
 
         // TODO make the context path of the JAX-RS Whiteboard configurable.
@@ -99,11 +113,13 @@ public class CXFJaxRsBundleActivator implements 
BundleActivator {
 
         _applicationSingletonsResult = 
applicationSingletons.run(bundleContext);
 
-        Application defaultApplication = new Application() {};
+        Map<String, Object> properties = new HashMap<>();
+        properties.put(JAX_RS_APPLICATION_BASE, "/");
+        properties.put(JAX_RS_NAME, ".default");
 
         CXFJaxRsServiceRegistrator defaultServiceRegistrator =
             new CXFJaxRsServiceRegistrator(
-                _bus, defaultApplication, new HashMap<>());
+                _bus, new DefaultApplication(), properties);
 
         OSGi<?> extensions =
             serviceReferences(getExtensionFilter()).flatMap(ref ->
@@ -125,6 +141,13 @@ public class CXFJaxRsBundleActivator implements 
BundleActivator {
 
         _singletonsResult = singletons.run(bundleContext);
 
+        Dictionary<String, Object> dictionary = new Hashtable<>();
+        dictionary.put(JAX_RS_APPLICATION_SELECT, 
"(osgi.jaxrs.name=.default)");
+        dictionary.put(JAX_RS_RESOURCE, "true");
+        dictionary.put(Constants.SERVICE_RANKING, -1);
+
+        _defaultWeb =  _bundleContext.registerService(
+            DefaultWeb.class, new DefaultWeb(), dictionary);
         _clientBuilder = _bundleContext.registerService(
             ClientBuilder.class, new ClientBuilderFactory(), null);
     }
@@ -132,6 +155,7 @@ public class CXFJaxRsBundleActivator implements 
BundleActivator {
     @Override
     public void stop(BundleContext context) throws Exception {
         _clientBuilder.unregister();
+        _defaultWeb.unregister();
         _applicationsResult.close();
         _applicationSingletonsResult.close();
         _extensionsResult.close();
@@ -175,17 +199,7 @@ public class CXFJaxRsBundleActivator implements 
BundleActivator {
      * @param bundleContext
      */
     private void initRuntimeDelegate(BundleContext bundleContext) {
-        Thread thread = Thread.currentThread();
-        ClassLoader oldClassLoader = thread.getContextClassLoader();
-        BundleWiring bundleWiring = bundleContext.getBundle().adapt(
-            BundleWiring.class);
-        thread.setContextClassLoader(bundleWiring.getClassLoader());
-        try {
-            RuntimeDelegate.getInstance();
-        }
-        finally {
-            thread.setContextClassLoader(oldClassLoader);
-        }
+        RuntimeDelegate.setInstance(new 
org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl());
     }
 
     private ServiceRegistration<Servlet> registerCXFServletService(Bus bus) {

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/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
index 726ecf8..e89f6f6 100644
--- 
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
@@ -32,11 +32,10 @@ import javax.ws.rs.ext.RuntimeDelegate;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.endpoint.Server;
-import org.apache.cxf.endpoint.ServerImpl;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.jaxrs.provider.json.JSONProvider;
-import org.apache.cxf.service.factory.ServiceConstructionException;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.transport.Destination;
 import org.apache.cxf.transport.DestinationFactory;
@@ -149,11 +148,8 @@ public class CXFJaxRsServiceRegistrator {
             return;
         }
 
-        RuntimeDelegate runtimeDelegate = RuntimeDelegate.getInstance();
-
-        JAXRSServerFactoryBean jaxRsServerFactoryBean =
-            runtimeDelegate.createEndpoint(
-                _application, JAXRSServerFactoryBean.class);
+        JAXRSServerFactoryBean jaxRsServerFactoryBean = createEndpoint(
+            _application, JAXRSServerFactoryBean.class);
 
         jaxRsServerFactoryBean.setBus(_bus);
         jaxRsServerFactoryBean.setProperties(_properties);
@@ -181,7 +177,7 @@ public class CXFJaxRsServiceRegistrator {
             jaxRsServerFactoryBean.setProvider(provider);
         }
 
-        for (ResourceInformation resourceInformation : _services) {
+        for (ResourceInformation<?> resourceInformation : _services) {
             jaxRsServerFactoryBean.setResourceProvider(
                 resourceInformation.getResourceProvider());
         }
@@ -193,6 +189,16 @@ public class CXFJaxRsServiceRegistrator {
         _server.start();
     }
 
+    public <T> T createEndpoint(Application app, Class<T> endpointType) {
+        JAXRSServerFactoryBean bean = ResourceUtils.createApplication(app, 
false);
+        if (JAXRSServerFactoryBean.class.isAssignableFrom(endpointType)) {
+            return endpointType.cast(bean);
+        }
+        bean.setStart(false);
+        Server server = bean.create();
+        return endpointType.cast(server);
+    }
+
     public static class ResourceInformation<T extends Comparable<? super T>>
         implements Comparable<ResourceInformation<T>> {
 

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultApplication.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultApplication.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultApplication.java
new file mode 100644
index 0000000..9869480
--- /dev/null
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultApplication.java
@@ -0,0 +1,23 @@
+/*
+ * 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 javax.ws.rs.core.Application;
+
+public class DefaultApplication extends Application {
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultWeb.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultWeb.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultWeb.java
new file mode 100644
index 0000000..711ee90
--- /dev/null
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/DefaultWeb.java
@@ -0,0 +1,105 @@
+/*
+ * 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 javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.CacheControl;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+@Path("/")
+public class DefaultWeb {
+
+    @GET
+    @Produces(MediaType.TEXT_HTML)
+    public Response home(){
+        CacheControl cc = new CacheControl();
+        cc.setMaxAge(86400);
+        cc.setPrivate(true);
+
+        ResponseBuilder builder = Response.ok(
+            getClass().getResourceAsStream("/static/index.html"));
+        builder.cacheControl(cc);
+
+        return builder.build();
+    }
+
+    @GET
+    @Path("/css")
+    @Produces("text/css")
+    public Response css() {
+        CacheControl cc = new CacheControl();
+        cc.setMaxAge(86400);
+        cc.setPrivate(true);
+
+        ResponseBuilder builder = Response.ok(
+            getClass().getResourceAsStream("/static/style.css"));
+        builder.cacheControl(cc);
+
+        return builder.build();
+    }
+
+    @GET
+    @Path("/github")
+    @Produces("text/css")
+    public Response github() {
+        CacheControl cc = new CacheControl();
+        cc.setMaxAge(86400);
+        cc.setPrivate(true);
+
+        ResponseBuilder builder = Response.ok(
+            
getClass().getResourceAsStream("/static/highlight/styles/github.css"));
+        builder.cacheControl(cc);
+
+        return builder.build();
+    }
+
+    @GET
+    @Path("/highlight")
+    @Produces("text/javascript")
+    public Response highlight() {
+        CacheControl cc = new CacheControl();
+        cc.setMaxAge(86400);
+        cc.setPrivate(true);
+
+        ResponseBuilder builder = Response.ok(
+            
getClass().getResourceAsStream("/static/highlight/highlight.pack.js"));
+        builder.cacheControl(cc);
+
+        return builder.build();
+    }
+
+    @GET
+    @Path("/logo")
+    @Produces("image/gif")
+    public Response logo() {
+        CacheControl cc = new CacheControl();
+        cc.setMaxAge(86400);
+        cc.setPrivate(true);
+
+        ResponseBuilder builder = Response.ok(
+            
getClass().getResourceAsStream("/static/Arieslogo_Horizontal.gif"));
+        builder.cacheControl(cc);
+
+        return builder.build();
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
index 6e52d81..0a396f7 100644
--- 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Utils.java
@@ -24,7 +24,6 @@ import org.apache.cxf.Bus;
 import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.message.Message;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceObjects;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.wiring.BundleWiring;
@@ -173,6 +172,7 @@ public class Utils {
             }
 
             @Override
+            @SuppressWarnings("unchecked")
             public void releaseInstance(Message m, Object o) {
                 serviceObjects.ungetService((T)o);
             }

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/resources/static/Arieslogo_Horizontal.gif
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/resources/static/Arieslogo_Horizontal.gif 
b/jax-rs.whiteboard/src/main/resources/static/Arieslogo_Horizontal.gif
new file mode 100644
index 0000000..bd4fbea
Binary files /dev/null and 
b/jax-rs.whiteboard/src/main/resources/static/Arieslogo_Horizontal.gif differ

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/resources/static/highlight/LICENSE
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/resources/static/highlight/LICENSE 
b/jax-rs.whiteboard/src/main/resources/static/highlight/LICENSE
new file mode 100644
index 0000000..422deb7
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/resources/static/highlight/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2006, Ivan Sagalaev
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of highlight.js nor the names of its contributors 
+      may be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/resources/static/highlight/highlight.pack.js
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/resources/static/highlight/highlight.pack.js 
b/jax-rs.whiteboard/src/main/resources/static/highlight/highlight.pack.js
new file mode 100644
index 0000000..eab7747
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/resources/static/highlight/highlight.pack.js
@@ -0,0 +1,2 @@
+/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */
+!function(e){var n="object"==typeof window&&window||"object"==typeof 
self&&self;"undefined"!=typeof 
exports?e(exports):n&&(n.hljs=e({}),"function"==typeof 
define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function 
n(e){return 
e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function 
t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return 
t&&0===t.index}function a(e){return k.test(e)}function i(e){var 
n,t,r,i,o=e.className+" 
";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return 
w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return
 i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in 
e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function 
u(e){var n=[];return function r(e,a){for(var 
i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).mat
 ch(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return 
a}(e,0),n}function c(e,r,a){function i(){return 
e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function
 o(e){function r(e){return" 
"+e.nodeName+'="'+n(e.value).replace('"',"&quot;")+'"'}s+="<"+t(e)+E.map.call(e.attributes,r).join("")+">"}function
 u(e){s+="</"+t(e)+">"}function c(e){("start"===e.event?o:u)(e.node)}for(var 
l=0,s="",f=[];e.length||r.length;){var 
g=i();if(s+=n(a.substring(l,g[0].offset)),l=g[0].offset,g===e){f.reverse().forEach(u);do
 
c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===l);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return
 s+n(a.substr(l))}function l(e){return 
e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return 
o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function s(e){function 
n(e){return e&&e.source||e}function t(t,r){return new Reg
 Exp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function 
r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var 
o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" 
").forEach(function(e){var 
t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof 
a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split("
 
").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return
 
l("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var
 c=a.c.map(function(e){return 
e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return
 null}}}}r(e)}function f(e,t,a,i){function o(e,n){var 
t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))r
 eturn n.c[t]}function 
u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return 
e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function 
l(e,n){var t=N.cI?n[0].toLowerCase():n[0];return 
e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var 
a=r?"":I.classPrefix,i='<span class="'+a,o=t?"":C;return 
i+=e+'">',i+n+o}function h(){var e,t,r,a;if(!E.k)return 
n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=l(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return
 a+n(k.substr(t))}function d(){var e="string"==typeof 
E.sL;if(e&&!y[E.sL])return n(k);var 
t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return 
E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function 
b(){L+=null!=E.sL?d():h(),k=""}function 
v(e){L+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function 
m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return 
t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.e
 B||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var 
a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do 
E.cN&&(L+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return 
r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal 
lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return k+=n,n.length||1}var 
N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var 
R,E=i||N,x={},L="";for(R=E;R!==N;R=R.parent)R.cN&&(L=p(R.cN,"",!0)+L);var 
k="",B=0;try{for(var 
M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(L+=C);return{r:B,value:L,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw
 T}}function g(e,t){t=t||I.languages||x(y);var r={r:0,value:n(e)},a=r;return 
t.filter(w).forEach(function(n){var 
t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function
 p(e){ret
 urn I.tabReplace||I.useBR?e.replace(M,function(e,n){return 
I.useBR&&"\n"===e?"<br>":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function
 h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return 
e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" 
").trim()}function d(e){var 
n,t,r,o,l,s=i(e);a(s)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div";),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[
 
\/]*>/g,"\n")):n=e,l=n.textContent,r=s?f(s,l,!0):g(l),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div";),o.innerHTML=r.value,r.value=c(t,u(o),l)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,s,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function
 b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var 
e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function 
m(){addEventListener("DOMContentLoaded
 ",v,!1),addEventListener("load",v,!1)}function N(n,t){var 
r=y[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function 
R(){return x(y)}function w(e){return e=(e||"").toLowerCase(),y[e]||y[L[e]]}var 
E=[],x=Object.keys,y={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="</span>",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void
 0};return 
e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n"
 
,c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var
 a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return 
a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("http",function(e){var
 
t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}
 ]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" 
",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": 
",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("xml",function(s){var
 
e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b
 
:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("javascript",function(e){var
 r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new 
function do return void else break catch instanceof with throw case default try 
this switch continue typeof delete let yield const export super debugger as 
async await static import from as",literal:"true false null undefined NaN 
Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI 
decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function 
Boolean Error EvalError InternalError RangeError ReferenceError StopIteration 
SyntaxError TypeError URIError Number Math Date String RegExp Array 
Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array 
Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl 
arguments require module console window document Symbol Set Map WeakSet WeakMap 
Proxy Reflect Promise"},a={cN:"nu
 
mber",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var
 
s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use
 
(strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return
 throw 
case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\
 
]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("json",function(e){var
 i={literal:"true false 
null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return
 
n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("css",function(e){var
 
c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-f
 ace 
page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("java",function(e){var
 
a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",t=a+"(<"+a+"(\\s*,\\s*"+a+")*>)?",r="false
 synchronized int abstract float private char boolean static null if const for 
true while long strictfp finally protected import native final void enum else 
break transient catch instanceof byte super volatile case assert short package 
default double public try this switch continue throws protected public private 
module requires exports 
do",s="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",c={cN:"number",b:s,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"
 }]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class 
interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends 
implements"},e.UTM]},{bK:"new throw return 
else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},c,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("bash",function(e){var
 
t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if
 then else elif fi for while in do done case esac function",literal:"true 
false",built_in:"break cd continue eval exec exit export getopts hash pwd 
readonly return shift test times trap umask unset alias bind builtin caller 
command declare echo enable help let local logout mapfile printf read readarray 
 source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir 
clone comparguments compcall compctl compdescribe compfiles compgroups 
compquote comptags comptry compvalues dirs disable disown echotc echoti emulate 
fc fg float functions getcap getln history integer jobs kill limit log noglob 
popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl 
unfunction unhash unlimit unsetopt vared wait whence where which zcompile 
zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle 
ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l 
-a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/resources/static/highlight/styles/github.css
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/resources/static/highlight/styles/github.css 
b/jax-rs.whiteboard/src/main/resources/static/highlight/styles/github.css
new file mode 100644
index 0000000..791932b
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/resources/static/highlight/styles/github.css
@@ -0,0 +1,99 @@
+/*
+
+github.com style (c) Vasily Polovnyov <[email protected]>
+
+*/
+
+.hljs {
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  color: #333;
+  background: #f8f8f8;
+}
+
+.hljs-comment,
+.hljs-quote {
+  color: #998;
+  font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-subst {
+  color: #333;
+  font-weight: bold;
+}
+
+.hljs-number,
+.hljs-literal,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag .hljs-attr {
+  color: #008080;
+}
+
+.hljs-string,
+.hljs-doctag {
+  color: #d14;
+}
+
+.hljs-title,
+.hljs-section,
+.hljs-selector-id {
+  color: #900;
+  font-weight: bold;
+}
+
+.hljs-subst {
+  font-weight: normal;
+}
+
+.hljs-type,
+.hljs-class .hljs-title {
+  color: #458;
+  font-weight: bold;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-attribute {
+  color: #000080;
+  font-weight: normal;
+}
+
+.hljs-regexp,
+.hljs-link {
+  color: #009926;
+}
+
+.hljs-symbol,
+.hljs-bullet {
+  color: #990073;
+}
+
+.hljs-built_in,
+.hljs-builtin-name {
+  color: #0086b3;
+}
+
+.hljs-meta {
+  color: #999;
+  font-weight: bold;
+}
+
+.hljs-deletion {
+  background: #fdd;
+}
+
+.hljs-addition {
+  background: #dfd;
+}
+
+.hljs-emphasis {
+  font-style: italic;
+}
+
+.hljs-strong {
+  font-weight: bold;
+}

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/resources/static/index.html
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/resources/static/index.html 
b/jax-rs.whiteboard/src/main/resources/static/index.html
new file mode 100644
index 0000000..6c70dca
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/resources/static/index.html
@@ -0,0 +1,102 @@
+<!doctype html>
+
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+
+    <title>Apache Aries JAX-RS Whiteboard</title>
+    <meta name="description" content="Apache Aries JAX-RS Whiteboard">
+    <meta name="author" content="The ASF">
+
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <link rel="stylesheet" href="css" media="all">
+    <link rel="stylesheet" href="github" media="all">
+</head>
+
+<body>
+    <script src="/highlight"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+
+    <div class="header">
+        <img alt="Apache Aries" class="logo" src="logo">
+
+        <h1>JAX-RS Whiteboard</h1>
+    </div>
+
+    <main role="main">
+        <h2>Welcome to the <code>default</code> Application of the Aries 
JAX-RS Whiteboard</h2>
+
+        <p>If you want more information about JAX-RS you can find out more 
about it <a 
href="http://docs.oracle.com/javaee/7/tutorial/jaxrs.htm#GIEPU";>here</a>.
+
+        <p>As you can see there's nothing fancy going on here yet! What you 
should do now is deploy an <code>javax.ws.rs.core.Application</code> or any 
JAX-RS resource as an OSGi service. Let's take a look at a couple of examples 
using the OSGi Declarative Services specification.</p>
+
+        <p>The first example will simply add a resource (a.k.a. an 
endpoint).</p>
+
+        <pre>
+<code class="java">
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+@Component(
+    property = {
+        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT + 
"=(osgi.jaxrs.name=.default)",
+        JaxRSWhiteboardConstants.JAX_RS_RESOURCE + "=true"
+    },
+    service = ExampleAddon.class
+)
+public class ExampleAddon {
+
+    @GET
+    @Path("/{name}")
+    public String sayHello(@PathParam("name") String name) {
+        return "Hello " + name;
+    }
+
+}
+</code>
+        </pre>
+
+        <p>The next example is an <code>extension</code> which implements a 
<code>javax.ws.rs.container.ContainerRequestFilter</code>.
+
+        <pre>
+<code class="java">
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.jaxrs.whiteboard.JaxRSWhiteboardConstants;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import javax.ws.rs.ext.Provider;
+import java.io.IOException;
+
+@Component(
+    property = {
+        JaxRSWhiteboardConstants.JAX_RS_APPLICATION_SELECT + 
"=(osgi.jaxrs.name=.default)",
+        JaxRSWhiteboardConstants.JAX_RS_EXTENSION + "=true"
+    }
+)
+@Provider
+public class ExampleFilter implements ContainerRequestFilter {
+
+    @Override
+    public void filter(ContainerRequestContext requestContext)
+        throws IOException {
+
+        System.out.println("FILTERED!");
+    }
+
+}
+</code>
+        </pre>
+    </main>
+
+    <footer role="contentinfo">
+        <div>Apache Software Foundation!</div>
+
+        <small>Copyright &copy; <time datetime="2013">2017</time></small>
+    </footer>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/7a47410a/jax-rs.whiteboard/src/main/resources/static/style.css
----------------------------------------------------------------------
diff --git a/jax-rs.whiteboard/src/main/resources/static/style.css 
b/jax-rs.whiteboard/src/main/resources/static/style.css
new file mode 100644
index 0000000..320c465
--- /dev/null
+++ b/jax-rs.whiteboard/src/main/resources/static/style.css
@@ -0,0 +1,25 @@
+html,
+body {
+    font-family: Helvetica, Tahoma, sans-serif;
+    font-size: 14px;
+    line-height: 1;
+}
+
+.header {
+    background-color: #393f5a;
+    color: #DCD5E2;
+    height: 100px;
+    position: relative;
+}
+
+.header img {
+    float: left;
+}
+
+.header h1 {
+    bottom: 10px;
+    font-size: 3.3em;
+    left: 260px;
+    margin: 0;
+    position: absolute;
+}
\ No newline at end of file

Reply via email to