Thanks Willem

Now it is possible for me to choose the correct endpoint.



Willem Jiang-2 wrote:
> 
> Hi ,
> 
>   I just went through the code, and so did some experiments. JMS's 
> EndpointInfo is not just came from the Endpoint.publish(address, 
> implementor);'s address, the jms transportation related info are all 
> come from wsdl extensions.
>  So when you use the
>     EndpointImpl  endpoint1 = Endpoint.publish(address, implementor1);
>     EndpointImpl  endpoint2 = Endpoint.publish(address, implementor2);
> 
>    just like the
> 
>  
> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java
>  
> 
>    will take no effector , and you just get the ChainInitiationObserver 
> from the endpoint2 server's destination.
> 
>   My suggestion is you need to do some hack work here.
> 
>  1. create MultipleEndpointObserver yourself , you can find the sample 
> code from the SoapBindFactory's addListener(Destination d, Endpoint e).
>        MultipleEndpointObserver newMO;
>        MultipleEndpointObserver newMO = new 
> MultipleEndpointObserver(getBus()) {
>                 @Override
>                 protected Message createMessage(Message message) {
>                     return new SoapMessage(message);
>                 }
>             };
> 
>             newMO.getBindingInterceptors().add(new 
> AttachmentInInterceptor());
>             newMO.getBindingInterceptors().add(new StaxInInterceptor());
> 
>             // This will not work if we one of the endpoints disables 
> message
>             // processing. But, if you've disabled message processing, you
>             // probably aren't going to use this feature.
>             newMO.getBindingInterceptors().add(new 
> ReadHeadersInterceptor(getBus()));
> 
>             // Add in a default selection interceptor
>             newMO.getRoutingInterceptors().add(new 
> EndpointSelectionInterceptor());
> 
>  2. add the first two jms endpoint to the MultipleEndpointObserver's 
> endpoint set.
>        
>         newMO.getEndpoints().add(endpoint1.getServer().getEndpoint());
>         newMO.getEndpoints().add(endpoint2.getServer().getEndpoint());
> 
>  3. Choice one of the jms endpoint's destination ( which you want 
> request and response queue), replace the destination's observer with 
> your MultipleEndpointObserver.
>     
>         endpoint2.getServer().getDestination().setMessageObserver(newMO);
>  
>  4.  You also need to setup the MediatorInInterceptor for routing work    
>         newMO.getRoutingInterceptors().clear();
>         newMO.getRoutingInterceptors().add(new MediatorInInterceptor());
> 
> Hope this can help you :)
> 
> Willem.
>  
> 
> [EMAIL PROTECTED] wrote:
>> Hi
>>
>> I have tried to follow the example your are pointing at, but without any
>> luck.
>> I have downloaded the latest snapshot.
>>
>> When I am starting the server I got:
>> org.apache.cxf.transport.ChainInitiationObserver incompatible with
>> org.apache.cxf.transport.MultipleEndpointObserver
>>
>> I have tried to "force" a MultipleEnpointObserver on the destination, but
>> the result of that was the the server just took a random enpoint to
>> handle the request.
>> And the logging I have made in the MediatorInInterceptor never showed up
>> :o(
>>
>>
>> Willem Jiang-2 wrote:
>>   
>>> Hi Andersen,
>>>
>>> As you know the Endpoint.publish(address1, implementor1) 's address1 can 
>>> be any string, and it will take no effect if you just use the jms 
>>> transport.
>>> Because the JMS endpoint address information is got from the wsdl.
>>>
>>> So back to your question. I just checked the codes, and found the 
>>> server-routing.html is out of date :(
>>> You can find the latest codes here.
>>> (in Server.java , you can set the information to the endpoints for the 
>>> MediatorInInterceptor to look up)
>>>
>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/Server.java
>>> https://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java
>>>
>>>
>>> If you like you can try the trunk version or latest snapshot with these 
>>> code.
>>>
>>> Willem.
>>>
>>>
>>> mr.andersen wrote:
>>>     
>>>> Hi
>>>>
>>>> I'm trying to setup a simple server running in a main method.
>>>> My goal is to have atleast 2 services, having their own wsdl
>>>> definition,
>>>> but
>>>> both using the same request and reply JMS queue.
>>>>
>>>> I have tested that both services can be executed and response with
>>>> correct
>>>> information seperatly, but I have some problems when I publishing 2
>>>> services.
>>>> First I tried to follow the example in the Users Guide - 
>>>> http://cwiki.apache.org/CXF20DOC/service-routing.html Service Routing ,
>>>> but
>>>> each time the MediatorInInterceptor have found the correct
>>>> targetServer,
>>>> no
>>>> MessageObserver was available to handle the message (MessageObserver mo
>>>> =
>>>> targetServer.getMessageObserver(); returned a null mo).
>>>>
>>>> My second implementation is like the below, but the server is picking
>>>> out
>>>> a
>>>> random service to handle the incoming message.
>>>>
>>>> Is there something I have missed? Or does CXF not support multi
>>>> services
>>>> over JMS yet?
>>>>
>>>> Object implementor1 = new OneImpl();
>>>> String address1 =
>>>> "{http://cxf.apache.org/jms_endpt}OnePort.jms-destination";;
>>>> Endpoint.publish(address1, implementor1);
>>>>
>>>> Object implementor2 = new AnotherImpl();
>>>> String address2 =
>>>> "{http://cxf.apache.org/jms_endpt}AnotherPort.jms-destination";;
>>>> Endpoint.publish(address2, implementor2);
>>>>   
>>>>       
>>>     
>> Quoted from: 
>> http://www.nabble.com/Multiple-JMS-services-tf4228402.html#a12031068
>>
>>   
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Multiple-JMS-services-tf4228402.html#a12066792
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to