You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Oliver Schweitzer <os...@me.com> on 2017/01/03 12:38:33 UTC

REST Service with Annotation Based Declarative Services - How?

Hi,

Backstory: We migrated our whole application/custom Karaf distribution from Blueprint to Declarative Services, which went fine except some serious problems with getting our REST API to run.

The snippet below shows how we had wired the REST components using blueprint. This worked fine.

Now I want to do essentially the same using annotation based Declarative Services.

- How would I translate the below config to annotations on myResource/myOtherResource?
- Do I need DOSGI for that? If yes, then I have a problem https://issues.apache.org/jira/browse/DOSGI-253

Best regards,

Oliver

—————————

<blueprint <<<<snip>>>>>
   <bean id="exceptionMapper" class="mypackage.ServiceExceptionMapper" />

   <bean id="jsonProvider"
class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
   <bean id="multipartProvider"
class="org.apache.cxf.jaxrs.provider.MultipartProvider" />
   <bean id="originFilter" class="mypackage.ApiOriginFilter" />

   <bean id="swagger2Feature"
class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
       <<<snip>>>
   </bean>

   <cxf:bus>
       <cxf:inInterceptors>
           <bean
class="org.apache.cxf.transport.http.HttpAuthenticationFaultHandler">
               <property name="realm" value="karaf"/>
           </bean>
       </cxf:inInterceptors>
       <cxf:features>
           <cxf:logging />
           <bean
class="org.apache.cxf.interceptor.security.JAASAuthenticationFeature">
               <property name="contextName" value="karaf" />
               <property name="reportFault" value="true" />
           </bean>
       </cxf:features>
   </cxf:bus>

   <jaxrs:server id="MyService" address="/rest">
       <jaxrs:serviceBeans>
           <ref component-id="myResource" />
	   <ref component-id="myOtherResource" />
       </jaxrs:serviceBeans>
       <jaxrs:providers>
           <ref component-id="jsonProvider" />
           <ref component-id="multipartProvider" />
           <ref component-id="originFilter" />
           <ref component-id="exceptionMapper" />
       </jaxrs:providers>
       <jaxrs:features>
           <ref component-id="swagger2Feature" />
       </jaxrs:features>
   </jaxrs:server>

</blueprint>

RE: REST Service with Annotation Based Declarative Services - How?

Posted by Andrei Shakirin <as...@talend.com>.
Hi,

You need to use @Component with service.exported.* properties and normal JAX-RS annotations: 

@Component(service=TaskServiceRest.class, property={"service.exported.interfaces=*",  "service.exported.configs=org.apache.cxf.rs", "org.apache.cxf.rs.address=/tasklistRest"})

@Path("")
public class TaskServiceRest {
    @Reference
   TaskService taskService;
...

Take a look example from Christian Schneider blog:
https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-ds/service/src/main/java/net/lr/tasklist/service/TaskServiceRest.java
http://www.liquid-reality.de/display/liquid/2015/06/30/Apache+Karaf+Tutorial+part+10+-+Declarative+services 

You don't required to use DOSGi.

Regards,
Andrei.

> -----Original Message-----
> From: Oliver Schweitzer [mailto:oschweitzer@me.com]
> Sent: Dienstag, 3. Januar 2017 13:39
> To: users@cxf.apache.org
> Subject: REST Service with Annotation Based Declarative Services - How?
> 
> Hi,
> 
> Backstory: We migrated our whole application/custom Karaf distribution from
> Blueprint to Declarative Services, which went fine except some serious
> problems with getting our REST API to run.
> 
> The snippet below shows how we had wired the REST components using
> blueprint. This worked fine.
> 
> Now I want to do essentially the same using annotation based Declarative
> Services.
> 
> - How would I translate the below config to annotations on
> myResource/myOtherResource?
> - Do I need DOSGI for that? If yes, then I have a problem
> https://issues.apache.org/jira/browse/DOSGI-253
> 
> Best regards,
> 
> Oliver
> 
> —————————
> 
> <blueprint <<<<snip>>>>>
>    <bean id="exceptionMapper" class="mypackage.ServiceExceptionMapper" />
> 
>    <bean id="jsonProvider"
> class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
>    <bean id="multipartProvider"
> class="org.apache.cxf.jaxrs.provider.MultipartProvider" />
>    <bean id="originFilter" class="mypackage.ApiOriginFilter" />
> 
>    <bean id="swagger2Feature"
> class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
>        <<<snip>>>
>    </bean>
> 
>    <cxf:bus>
>        <cxf:inInterceptors>
>            <bean
> class="org.apache.cxf.transport.http.HttpAuthenticationFaultHandler">
>                <property name="realm" value="karaf"/>
>            </bean>
>        </cxf:inInterceptors>
>        <cxf:features>
>            <cxf:logging />
>            <bean
> class="org.apache.cxf.interceptor.security.JAASAuthenticationFeature">
>                <property name="contextName" value="karaf" />
>                <property name="reportFault" value="true" />
>            </bean>
>        </cxf:features>
>    </cxf:bus>
> 
>    <jaxrs:server id="MyService" address="/rest">
>        <jaxrs:serviceBeans>
>            <ref component-id="myResource" />
> 	   <ref component-id="myOtherResource" />
>        </jaxrs:serviceBeans>
>        <jaxrs:providers>
>            <ref component-id="jsonProvider" />
>            <ref component-id="multipartProvider" />
>            <ref component-id="originFilter" />
>            <ref component-id="exceptionMapper" />
>        </jaxrs:providers>
>        <jaxrs:features>
>            <ref component-id="swagger2Feature" />
>        </jaxrs:features>
>    </jaxrs:server>
> 
> </blueprint>