Thanks for the example Christian. Obviously I didn't search the web well
enough :)
I tried to replicate your example and everything works as expected.
I have a question though: Assume rest interface is different than model
interface (but somewhat overlapping), or simply assume I don't want my
model to be "polluted" with JAXRS annotations.
I thought I could remove all the annotation within the service interface
and add the same annotations within the rest class. Something like:
interface:
public interface TaskService {
public Task getTask(String id);
public void addTask(Task task);
public void updateTask(Task task);
public void deleteTask(String id);
public Task[] getAll();
public default Collection<Task> getTasks() {
return Arrays.asList(this.getAll());
}
}
rest:
@Api
@Path("")
@Produces(MediaType.APPLICATION_XML) //if you want to generate json instead
@Component(
immediate = true,
name = "TaskService",
property = {
"service.exported.interfaces=*",
"service.exported.configs=org.apache.cxf.rs",
"org.apache.cxf.rs.address=/tasks2",
}
)
public class TaskRest implements TaskService {
//reference of another implementation of TaskService, inside osgi framework
@Reference
private TaskService taskService;
@GET
@Path("/{id}")
public Task getTask(@PathParam("id") String id) {
return this.taskService.getTask(id);
}
@PUT
public void addTask(Task task) {
this.taskService.addTask(task);
}
@Override
public void updateTask(Task task) {
this.addTask(task);
}
@DELETE
@Path("/{id}")
public void deleteTask(String id) {
this.taskService.deleteTask(id);
}
@GET
public Task[] getAll() {
return this.taskService.getAll();
}
}
However, rsa:endpoints does not detect the rest service when the rest
bundle starts.
Is this an expected behaviour (since I removed an interface with JAXRS
annotation)? Can I make this work?
I know the example I have provided does not make any sense (it's just a
semantic-less wrapper of an osgi service).
Thanks you very much!
2017-05-10 20:51 GMT+02:00 Christian Schneider <[email protected]>:
> You can use CXF-DOSGi. The examples use declarative services.
>
> See
> https://github.com/apache/cxf-dosgi/tree/master/samples/rest
>
> Christian
>
> 2017-05-10 10:32 GMT+02:00 Massimo Bono <[email protected]>:
>
> > Hello,
> >
> > I'm playing with Apache Karaf and CXF and I'm trying to setup a REST
> hello
> > world application with Declarative Service. Several tutorial are
> available
> > on the internet (like
> > http://liquid-reality.de/display/liquid/2011/12/22/Karaf+
> > Tutorial+Part+4+-+CXF+Services+in+OSGi
> > or https://cwiki.apache.org/confluence/pages/viewpage.action?
> > pageId=55153391
> > ).
> >
> > However, there seems to be no example exploiting DS. I'm not accustomed
> to
> > blueprints, but I thought i could transfer the parameters inside it to
> DS.
> > Sadly, I can't translate jaxrs:server values from BP to DS.
> >
> > So my question are:
> > 1) Is it possible to start CXF on apache karaf (4.1.1) with DS?
> > 2) If yes, can you provide an example or some basic step to achieve it?
> >
> > Thanks for any kind reply
> >
> > --
> > *Ing. Massimo Bono*
> >
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e
> 46&URL=http%3a%2f%2fwww.liquid-reality.de>
>
> Open Source Architect
> http://www.talend.com
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e
> 46&URL=http%3a%2f%2fwww.talend.com>
>
--
*Ing. Massimo Bono*