As I mentioned a few times, if I register two services with the same
"org.apache.cxf.rs.httpservice.context" property with value like "/myApp" I
get an error:
Exception in thread "pool-12-thread-4" org.osgi.framework.ServiceException:
CXF DOSGi: problem registering CXF HTTP Servlet
at
org.apache.cxf.dosgi.dsw.handlers.HttpServiceConfigurationTypeHandler.registerServletAndGetBus(HttpServiceConfigurationTypeHandler.java:200)
at
org.apache.cxf.dosgi.dsw.handlers.JaxRSHttpServiceConfigurationTypeHandler.createServer(JaxRSHttpServiceConfigurationTypeHandler.java:55)
at
org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminCore.exportService(RemoteServiceAdminCore.java:247)
at
org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance$1.run(RemoteServiceAdminInstance.java:72)
at
org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance$1.run(RemoteServiceAdminInstance.java:67)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance.exportService(RemoteServiceAdminInstance.java:66)
at
org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance.exportService(RemoteServiceAdminInstance.java:38)
at
org.apache.cxf.dosgi.topologymanager.TopologyManager$2.run(TopologyManager.java:267)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.osgi.service.http.NamespaceException: alias is already in
use in this or another context
at
org.ops4j.pax.web.service.spi.model.ServerModel.addServletModel(ServerModel.java:120)
at
org.ops4j.pax.web.service.internal.HttpServiceStarted.registerServlet(HttpServiceStarted.java:139)
at
org.ops4j.pax.web.service.internal.HttpServiceProxy.registerServlet(HttpServiceProxy.java:56)
at
org.apache.cxf.dosgi.dsw.handlers.HttpServiceConfigurationTypeHandler.registerServletAndGetBus(HttpServiceConfigurationTypeHandler.java:194)
... 11 more
Moreover, the endpoint registered loses his portion of path corresponding
to "org.apache.cxf.rs.address" property. It means that my desired URL
"/myApp/serviceA/methodY" is transformed to "/myApp/methodY".
And the mixing of services is produced anyway, if I look for serviceA WADL (
"myApp/serviceA?_wadl") I get exactly the same as if I look for serviceB
WADL ("myApp/serviceB?_wadl"). Same addresses referring to serviceB in both
cases.
On 2 May 2013 11:57, Sergey Beryozkin <[email protected]> wrote:
> On 02/05/13 10:52, Julio Carlos Barrera Juez wrote:
>
>> What fix? Is there any bug in version 1.3? I am going to try changing the
>> version, but what now? Do need I to use both properties? How to achieve
>> having an URL like "/myApp/serviceX/methodY"
>>
>
> yes, ex, "/myApp" for the the context property and "/serviceX/methodY" for
> the rs.address property will give you that combined relative path
>
> Sergey
>
>
>
>>
>> On 2 May 2013 11:39, Sergey Beryozkin<[email protected]**> wrote:
>>
>> On 02/05/13 10:34, Julio Carlos Barrera Juez wrote:
>>>
>>> I am using DOSGI 1.3 with bundles cxf-dosgi-ri-discovery-local and
>>>> cxf-dosgi-ri-dsw-cxf. And CXF 2.4.3. It is difficult to choose a
>>>> different
>>>> version, because we use a concrete Servicemix version (4.4.1), quite
>>>> old,
>>>> we know :-( .
>>>>
>>>>
>>> The fix I was referring to (and which I hope but can not guarantee at the
>>> moment will help in your case) is in DOSGi 1.4. Can you experiment with
>>> DOSGi 1.4 multibundle distro ?
>>>
>>> Sergey
>>>
>>>
>>>
>>>> On 2 May 2013 11:28, Sergey Beryozkin<[email protected]****>
>>>> wrote:
>>>>
>>>> What DOSGi version do you use ?
>>>>
>>>>> Sergey
>>>>>
>>>>> On 02/05/13 10:22, Julio Carlos Barrera Juez wrote:
>>>>>
>>>>> As I wrote in my first e-mail, If we use the same value for "
>>>>>
>>>>>> org.apache.cxf.rs.********httpservice.context" in each bundle, we get
>>>>>>
>>>>>> errors
>>>>>>
>>>>>> noticing it. And if we use different values in "org.apache.cxf.rs.**
>>>>>>
>>>>>> httpservice.context" property and "org.apache.cxf.rs.address" there
>>>>>> is a
>>>>>> mix in the WADLs and in the WS registrations. Each WADL point to the
>>>>>> last
>>>>>> registered service. We have tried all the combinations of values of
>>>>>> both
>>>>>> properties and none of them give us a good result ;-((
>>>>>>
>>>>>>
>>>>>> On 2 May 2013 11:01, Sergey Beryozkin<[email protected]******>
>>>>>> wrote:
>>>>>>
>>>>>> Hi
>>>>>>
>>>>>>
>>>>>>> On 02/05/13 09:10, Julio Carlos Barrera Juez wrote:
>>>>>>>
>>>>>>> Additionally, we cannot provide good javax.ws.rs.Path annotations
>>>>>>>
>>>>>>> because
>>>>>>>> our OSGi service interfaces are used to generate different
>>>>>>>> services dynamically. for instance, given this interface:
>>>>>>>>
>>>>>>>> @Path("/")
>>>>>>>> public interface DynamicService {
>>>>>>>>
>>>>>>>> @Path("/methodA")
>>>>>>>> public Object methodA();
>>>>>>>>
>>>>>>>> }
>>>>>>>>
>>>>>>>> Different services are registered using the same interface, then
>>>>>>>> different "org.apache.cxf.rs.address"
>>>>>>>> properties are generated to differentiate each service like
>>>>>>>> "/serviceA"
>>>>>>>> and
>>>>>>>> "/serviceB". Both services have same interface, but different
>>>>>>>> instances.
>>>>>>>>
>>>>>>>>
>>>>>>>> What I know is possible with DOSGi CXF 1.4 is to use both
>>>>>>>>
>>>>>>>> "org.apache.cxf.rs.********httpservice.context" and
>>>>>>>
>>>>>>>
>>>>>>> "org.apache.cxf.rs.address"
>>>>>>>
>>>>>>> properties, both being relative, example, see
>>>>>>>
>>>>>>> http://svn.apache.org/repos/********asf/cxf/dosgi/tags/cxf-****
>>>>>>> dosgi-****<http://svn.apache.org/repos/******asf/cxf/dosgi/tags/cxf-**dosgi-****>
>>>>>>> <http://svn.apache.**org/repos/****asf/cxf/dosgi/**
>>>>>>> tags/cxf-dosgi-****<http://svn.apache.org/repos/****asf/cxf/dosgi/tags/cxf-dosgi-****>
>>>>>>> >
>>>>>>> <http://svn.apache.**org/**repos/**asf/cxf/dosgi/**tags/**
>>>>>>> cxf-dosgi-**<http://svn.**apache.org/repos/**asf/cxf/**
>>>>>>> dosgi/tags/cxf-dosgi-**<http://svn.apache.org/repos/**asf/cxf/dosgi/tags/cxf-dosgi-**>
>>>>>>> >
>>>>>>>
>>>>>>>>
>>>>>>>> ri-1.4.0/samples/greeter_rest/********impl2/src/main/java/org/****
>>>>>>> apache/cxf/dosgi/samples/********greeter/impl2/rest/Activator.*****
>>>>>>> ***java<
>>>>>>> http://svn.apache.org/**repos/****asf/cxf/dosgi/tags/cxf-**<http://svn.apache.org/**repos/**asf/cxf/dosgi/tags/cxf-**>
>>>>>>> <ht**tp://svn.apache.org/**repos/**asf/cxf/dosgi/tags/cxf-**<http://svn.apache.org/**repos/asf/cxf/dosgi/tags/cxf-**>
>>>>>>> >
>>>>>>> dosgi-ri-1.4.0/samples/******greeter_rest/impl2/src/main/**
>>>>>>> java/org/apache/cxf/dosgi/******samples/greeter/impl2/rest/******
>>>>>>> Activator.java<http://svn.**ap**ache.org/repos/asf/cxf/**<http://apache.org/repos/asf/cxf/**>
>>>>>>> dosgi/tags/cxf-dosgi-ri-1.4.0/****samples/greeter_rest/impl2/****
>>>>>>> src/main/java/org/apache/cxf/****dosgi/samples/greeter/impl2/****
>>>>>>> rest/Activator.java<http://**svn.apache.org/repos/asf/cxf/**
>>>>>>> dosgi/tags/cxf-dosgi-ri-1.4.0/**samples/greeter_rest/impl2/**
>>>>>>> src/main/java/org/apache/cxf/**dosgi/samples/greeter/impl2/**
>>>>>>> rest/Activator.java<http://svn.apache.org/repos/asf/cxf/dosgi/tags/cxf-dosgi-ri-1.4.0/samples/greeter_rest/impl2/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl2/rest/Activator.java>
>>>>>>> >
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> So you should be able to set "org.apache.cxf.rs.******
>>>>>>>
>>>>>>> httpservice.context"
>>>>>>>
>>>>>>> to
>>>>>>>
>>>>>>> say "/rest" for all the bundles and "/a", "/b", etc for
>>>>>>> "org.apache.cxf.rs.address" for the individual bundles.
>>>>>>> Give that a try please.
>>>>>>>
>>>>>>> One other thing is that you can avoid annotating interfaces with
>>>>>>> JAX-RS
>>>>>>> annotations and use the external user models, the greeter_rest demo
>>>>>>> shows
>>>>>>> that too. The only limitation there is that a user model is static,
>>>>>>> one
>>>>>>> can
>>>>>>> not 'attach' them dynamically, may be we should support that...
>>>>>>>
>>>>>>> Sergey
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 2 May 2013 09:24, Julio Carlos Barrera Juez<
>>>>>>>
>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>> Hi!
>>>>>>>>
>>>>>>>>
>>>>>>>> We have a ServiceMix app with multiple bundles. We want to export
>>>>>>>>> our
>>>>>>>>> OSGi
>>>>>>>>> service interfaces using DOSGi. We annotate our service interfaces
>>>>>>>>> with javax.ws.rs.Path, javax.ws.rs.GET,
>>>>>>>>> javax.ws.rs.POST, javax.ws.rs.Consumes and javax.ws.rs.Produces.
>>>>>>>>> Then
>>>>>>>>> we
>>>>>>>>> register our OSGi services using Apache Aries Blueprint or Java
>>>>>>>>> code
>>>>>>>>> adding different CXF properties.
>>>>>>>>>
>>>>>>>>> At the beginning we used "org.apache.cxf.rs.address" property with
>>>>>>>>> absolute URLs, using Jetty standalone instance. But now we want to
>>>>>>>>> use
>>>>>>>>> relative address to use HTTP service. If we don't
>>>>>>>>> specify "org.apache.cxf.rs.********httpservice.context" property,
>>>>>>>>> our
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> service
>>>>>>>>>
>>>>>>>>> seems
>>>>>>>>> to be not registered at all. I we specify this property with same
>>>>>>>>> value
>>>>>>>>> for
>>>>>>>>> all services there are some errors when registering services
>>>>>>>>> ("alias
>>>>>>>>> in
>>>>>>>>> use
>>>>>>>>> or another context..."). If we specify different values for each
>>>>>>>>> registration there are no errors, but there are a mix of methods in
>>>>>>>>> each
>>>>>>>>> service (looking at WADL).
>>>>>>>>>
>>>>>>>>> How we must set both properties to achieve having different
>>>>>>>>> services
>>>>>>>>> registered with relative paths?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>
>>>>>>> Sergey Beryozkin
>>>>>>>
>>>>>>> Talend Community Coders
>>>>>>> http://coders.talend.com/
>>>>>>>
>>>>>>> Blog: http://sberyozkin.blogspot.com
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>> Sergey Beryozkin
>>>>>
>>>>> Talend Community Coders
>>>>> http://coders.talend.com/
>>>>>
>>>>> Blog: http://sberyozkin.blogspot.com
>>>>>
>>>>>
>>>>>
>>>>
>>> --
>>> Sergey Beryozkin
>>>
>>> Talend Community Coders
>>> http://coders.talend.com/
>>>
>>> Blog: http://sberyozkin.blogspot.com
>>>
>>>
>>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com
>