I think you'll need to set a bus you created as a default one on a bus
factory. I'm not really familiar with MultipleEndpointObservers so
please try to experiment, check the source code and hopefully you'll
find the right pattern...

Cheers, Sergey


-----Original Message-----
From: Alexey Zavizionov [mailto:[email protected]] 
Sent: 12 December 2008 19:51
To: Sergey Beryozkin
Cc: [email protected]; Daniel Kulp
Subject: Re: How to publish multiport service?

Have you any comments on it?

Regards,
Alexey.

On Wed, Dec 10, 2008 at 7:20 PM, Alexey Zavizionov
<[email protected]> wrote:
> Hello,
>
>
> I have returned to my Enpoint.publish, with latest modifications...
>
>    org.apache.cxf.jaxws.EndpointImpl endpoint =
> (org.apache.cxf.jaxws.EndpointImpl)Endpoint.publish(address, object);
>    ServerImpl server = endpoint.getServer();
>
>
>    Bus bus = BusFactory.newInstance().createBus();
>    QName serviceQName =
> server.getEndpoint().getEndpointInfo().getService().getName();
>    QName portQName = server.getEndpoint().getEndpointInfo().getName();
>
>    // replace the observer
>
>    MessageObserver mo = server.getDestination().getMessageObserver();
>    System.out.println(">>> EXOMAN
> MyServerLifeCycleListener.startServer() observer = " + mo);
>    if (mo == null) {
>      mo = new ChainInitiationObserver(server.getEndpoint(), bus);
>    }
>
>    if (mo instanceof ChainInitiationObserver) {
>      ChainInitiationObserver cio = (ChainInitiationObserver) mo;
>
>      MultipleEndpointObserver newMO = new
MultipleEndpointObserver(bus);
>      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(bus));
>      newMO.getBindingInterceptors().add(new CheckFaultInterceptor());
>
>      // Add in a default selection interceptor
>      newMO.getRoutingInterceptors().add(new
EndpointSelectionInterceptor());
>
>      newMO.getEndpoints().add(cio.getEndpoint());
>      mo = newMO;
>
>    }
>
>    server.getDestination().setMessageObserver(mo);
>
>
> Does it correct?
>
> Regards,
> Alexey.
>
>
>
> On Wed, Dec 10, 2008 at 7:00 PM, Sergey Beryozkin
> <[email protected]> wrote:
>> Hi
>>
>>> Hello, Sergey
>>>
>>> I have modified to
>>>
>>> public class MyServerLifeCycleListener implements
ServerLifeCycleListener
>>> {
>>>
>>>  public MyServerLifeCycleListener() {
>>>   Bus bus = BusFactory.newInstance().createBus();
>>>   ServerLifeCycleManager slcm =
>>> bus.getExtension(ServerLifeCycleManager.class);
>>>   // 'this' implements ServerLifeCycleListener
>>>   slcm.registerListener(this);
>>>  }
>>>
>> ok
>>
>>>
>>> next for
>>>
>>>  public void startServer(Server server) {
>>>   Bus bus = BusFactory.newInstance().createBus();
>>>   QName serviceQName =
>>> server.getEndpoint().getEndpointInfo().getService().getName();
>>>   QName portQName =
server.getEndpoint().getEndpointInfo().getName();
>>>
>>>   // replace the observer
>>>
>>>   MessageObserver observer =
server.getDestination().getMessageObserver();
>>>   if (observer == null) {
>>>            observer = new
ChainInitiationObserver(server.getEndpoint(),
>>> bus);
>>>    }
>>>
>>>    ServletFilterMessageObserver delegate =
>>>           new ServletFilterMessageObserver(observer, filter,
>>> serviceQName, portQName);
>>>
>>>    server.getDestination().setMessageObserver(delegate);
>>>  }
>>>
>>> I have a question
>>> what is the filter variable for ServletFilterMessageObserver?
>>
>> That was just a sample code. I believe in startServer() you need to
check if
>> it's the service and port QNames you expect and if yes then replace
an
>> observer with a MutipleEndpointObserver on a given endpoint (was it
the
>> first one which Dan suggested ?) - but as I said last time I did not
quite
>> follow what exactly needs to be done for a multiport
>> service with the same address to work
>>
>> Cheers, Sergey
>>
>>
>

Reply via email to