Hi,

May be you are missing the JAX_RS_SERVICE_ENDPOINT, there is a
description in the specification :

https://osgi.org/specification/osgi.cmpn/7.0.0/service.jaxrs.html#org.osgi.service.jaxrs.runtime.JaxrsServiceRuntimeConstants.JAX_RS_SERVICE_ENDPOINT

regards,

François Papon
fpa...@apache.org

Le 05/09/2018 à 22:47, atouat a écrit :
> Hi @all,
>
> Wow! Very active community here in the forum. I appreciate this, thanks.
>
> @jbonofre In a current project at work, we already have rest services
> running in karaf by using cxf and blueprint.
> I also tried out @cschneider's propositon wiht cxf-dosgi and I got that
> running too.
>
> I just wanted to try out publishing rest services via whiteboard, and since
> aries jax rs whiteboard is the reference implementation I took that.
>
> About your example. My code looks like this:
>
> /import org.osgi.service.component.annotations.Activate;
> 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(
>         immediate = true,
>         property = {
>                 JaxrsWhiteboardConstants.JAX_RS_APPLICATION_SELECT +
> "=(osgi.jaxrs.name=.default)",
>                 JaxrsWhiteboardConstants.JAX_RS_RESOURCE + "=true"
>         },
>         service = ExampleRest.class
> )
> public class ExampleRest {
>
>     @Activate
>     public void onActivate(){
>         System.out.println("ExampleRest activating!");
>     }
>
>     @GET
>     @Path("/{name}")
>     public String sayHello(@PathParam("name") String name) {
>         return "Hello " + name;
>     }
>
> }/
>
> The generated service.component.xml under OSGI-INF looks like this:
>
> /<?xml version="1.0" encoding="UTF-8"?>
> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0";
> name="de.rest.test.ExampleRest" immediate="true" activate="onActivate">
>   <implementation class="de.rest.test.ExampleRest"/>
>   <service>
>     <provide interface="de.rest.test.ExampleRest"/>
>   </service>
>   <property name="osgi.jaxrs.application.select" type="String"
> value="(osgi.jaxrs.name=.default)"/>
>   <property name="osgi.jaxrs.resource" type="String" value="true"/>
> </scr:component>/
>
>
> And the generated Manifest like this:
>
> /Manifest-Version: 1.0
> Bnd-LastModified: 1536171585428
> Build-Jdk: 1.8.0_171
> Built-By: adnan
> Bundle-Description: de.rest.test.whiteboard.ds OSGi bundle project.
> Bundle-ManifestVersion: 2
> Bundle-Name: de.rest.test.whiteboard.ds Bundle
> Bundle-SymbolicName: de.rest.test.whiteboard.ds
> Bundle-Version: 1.0.0.SNAPSHOT
> Created-By: Apache Maven Bundle Plugin
> Export-Package: de.rest.test;version="1.0.0.SNAPSHOT";uses:="javax.ws.
>  rs"
> Import-Package: javax.ws.rs;version="[2.1,3)"
> Provide-Capability: osgi.service;objectClass:List<String>="de.rest.tes
>  t.ExampleRest"
> Require-Capability: osgi.extender;filter:="(&(osgi.extender=osgi.compo
>  nent)(version>=1.3.0)(!(version>=2.0.0)))",osgi.ee;filter:="(&(osgi.e
>  e=JavaSE)(version=1.8))"
> Service-Component: OSGI-INF/de.rest.test.ExampleRest.xml
> Tool: Bnd-3.5.0.201709291849/
>
> I also already had a look at the osgienroute example @Tim-Ward-2 mentioned.
> I created the rest bundle based on the osgi enroute maven archetype. The
> code looks very similar (The following is the code generated by the enroute
> archetype):
>
> /import javax.ws.rs.GET;
> import javax.ws.rs.Path;
>
> import org.osgi.service.component.annotations.Component;
> import org.osgi.service.jaxrs.whiteboard.propertytypes.JaxrsResource;
>
> @Component(service=RestComponentImpl.class)
> @JaxrsResource
> public class RestComponentImpl {
>     
>     //TODO add an implementation
>     
>     @Path("rest")
>     @GET
>     public String toUpper() {
>         return "Hello World!";
>     }
> }
> /
>
> I couldnt get a well generetaed manifest by the bnd-tool, so I used the
> maven-bundle.-plugin and the generetd service.component.xml and the genrated
> Manifest look similar too.
>
>
> After installing the feature as mentioned in my previous post and deploying
> the bundle with you corde examples @jbonofre 
>  (bundle symbolic name is de.rest.test.whiteboard.ds Bundle)  and also the
> enroute exmaple bunlde (bundly symbolic name is rest-enroute), I have the
> following in karaf:
>
> /
> karaf@root()> list                                                            
>                                                                            
> START LEVEL 100 , List Threshold: 50
>  ID │ State  │ Lvl │ Version            │ Name
> ────┼────────┼─────┼────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────
>  23 │ Active │  80 │ 4.2.1              │ Apache Karaf :: OSGi Services ::
> Event
>  45 │ Active │  80 │ 0.0.0              │ aries-jaxrs-whiteboard.xml
>  49 │ Active │  80 │ 1.0.0              │ Apache Aries JAX-RS Specification
> API
>  50 │ Active │  80 │ 1.0.0              │ Apache Aries JAX-RS Whiteboard
>  52 │ Active │  80 │ 1.1.2              │ Apache Felix Servlet API
>  59 │ Active │  80 │ 1.3.0.1            │ Apache ServiceMix :: Specs ::
> Annotation API 1.3
>  60 │ Active │  80 │ 4.6.0              │ Apache XBean OSGI Bundle Utilities
>  61 │ Active │  80 │ 4.6.0              │ Apache XBean :: Classpath Resource
> Finder
>  89 │ Active │  80 │ 6.2.0              │ org.objectweb.asm
>  90 │ Active │  80 │ 6.2.0              │ org.objectweb.asm.commons
>  91 │ Active │  80 │ 6.2.0              │ org.objectweb.asm.tree
>  98 │ Active │  80 │ 1.1.0.201802012106 │
> org.osgi:org.osgi.service.http.whiteboard
>  99 │ Active │  80 │ 1.0.0.201802012106 │ org.osgi:org.osgi.service.jaxrs
> 100 │ Active │  80 │ 1.1.0.201802012106 │ org.osgi:org.osgi.util.function
> 101 │ Active │  80 │ 1.1.0.201802012106 │ org.osgi:org.osgi.util.promise
> 102 │ Active │  80 │ 1.0.0.SNAPSHOT     │ de.rest.test.whiteboard.ds Bundle
> 103 │ Active │  80 │ 1.0.0.SNAPSHOT     │ rest-enroute
> karaf@root()> /
>
>
> With the command karaf@root()> service:list , I get (excerpt) :
>
> /karaf@root()> service:list                                                   
>                                            
> [de.rest.test.ExampleRest]
> --------------------------
>  component.id = 2
>  component.name = de.rest.test.ExampleRest
>  osgi.jaxrs.application.select = (osgi.jaxrs.name=.default)
>  osgi.jaxrs.resource = true
>  service.bundleid = 102
>  service.id = 123
>  service.scope = bundle
> Provided by : 
>  de.rest.test.whiteboard.ds Bundle (102)
>
> [val.rest.enroute.RestComponentImpl]
> ------------------------------------
>  component.id = 3
>  component.name = val.rest.enroute.RestComponentImpl
>  service.bundleid = 103
>  service.id = 124
>  service.scope = bundle
> Provided by : 
>  rest-enroute (103)/
>
> With the command karaf@root()> http:list , I get :
>
> /karaf@root()> http:list
> ID │ Servlet │ Servlet-Name │ State │ Alias │ Url
> ───┼─────────┼──────────────┼───────┼───────┼────
> karaf@root()>  /
>
> Yes, nothing. So no servlet or something in that regard is registered. It
> can not work, right? 
>
> When I install the feature cxf-jaxrs I get this:
>
> /karaf@root(feature)> http:list
> ID  │ Servlet             │ Servlet-Name               │ State       │ Alias
> │ Url
> ────┼─────────────────────┼────────────────────────────┼─────────────┼───────┼─────────
> 114 │ CXFNonSpringServlet │ cxf-osgi-transport-servlet │ Deployed    │ /cxf 
> │ [/cxf/*]
> karaf@root(feature)/
>
>
> I assume I am missing something obvious and substantial. Can someone point
> me to what I am missing?
>
> Thanks in advance!
>
>
> Greetings,
>
> Adnan
>
>
>
>
>
>
> --
> Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html

Reply via email to