Hi Alexey

I did, but you can register an extension with a bus from a code too.

here's some code :

ServerLifeCycleManager slcm = bus.getExtension(ServerLifeCycleManager.class);
// 'this' implements ServerLifeCycleListener
sclm.register(this);

and here's a callback :

public void startServer(Server server) {

    QName serviceQName = 
server.getEndpoint().getEndpointInfo().getService().getName();
    QName portQName = server.getEndpoint().getEndpointInfo().getName();

    // check if these  are the expected service and port qnames
    // ....

    // 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);

}

So in your case you probably need do something similar by registering MultipleEndpointObserver with the first endpoint though I didn't quite get the idea of what needs to be done next - may be Dan can help more here

Cheers, Sergey


----- Original Message ----- From: "Alexey Zavizionov" <[EMAIL PROTECTED]>
To: "Sergey Beryozkin" <[EMAIL PROTECTED]>
Cc: <[email protected]>
Sent: Wednesday, November 26, 2008 9:56 AM
Subject: Re: How to publish multiport service?


Hello, Sergey

We don't use Spring container.
Did you register service and message observer without Spring?

Regards,
Alexey

--
Alexey Zavizionov
eXo Platform SAS

On Tue, Nov 25, 2008 at 11:46 PM, Sergey Beryozkin
<[EMAIL PROTECTED]> wrote:
We did some custom MessageObservers at a time of doing jaxws tck 2.0 for
a container shipped with fuse cxf.
One basically needs to register a bean from spring and pass it a cxf bus
reference. Next, this bean, when instantiated, needs to register itself
as a service listener with a bus, and it can be configured on what
endpoints it needs to listen. Then it can provide a custom message
observer - I can try and find that code if needed

Cheers, Sergey

-----Original Message-----
From: Daniel Kulp [mailto:[EMAIL PROTECTED]
Sent: 25 November 2008 19:55
To: [email protected]
Cc: Alexey Zavizionov
Subject: Re: How to publish multiport service?

On Tuesday 25 November 2008 10:19:54 am Alexey Zavizionov wrote:
Are there any thoughts?

How can I publish several ports with one service name?

       String address = "http://my.service:8082/WSRPService";;
       Endpoint.publish(address, implementor);

There isn't a way to do it.   Each endpoint needs to have a unique URL.
The
ONLY exception we have right now is aSOAP 1.1 and a 1.2 endpoint can
share
the URL as the endpoint can be determined just from the namespace of the

soap:envelope.

You MAY be able to get it to work if you change the MessageObserver on
the
first registered endpoint to the MultipleEndpointObserver.   Then add
some
interceptors to figure out which endpoint to hit (probably saaj
interceptor +
something to look a the element names or similar), then register the
second.
Not something I've tried though.

Dan



Regards,
Alexey

--
Alexey Zavizionov
eXo Platform SAS

On Mon, Nov 24, 2008 at 3:08 PM, Alexey Zavizionov

<[EMAIL PROTECTED]> wrote:
> How can I publish more than one port for a service?
>
> With generated sources I cannot do it due to the same address for
both of
> them.
>
>  <wsdl:service name="WSRPService">
>    <wsdl:port binding="v2bind:WSRP_v2_Markup_Binding_SOAP"
> name="WSRP_v2_Markup_Service">
>      <soap:address location="http://my.service:8082/WSRPService"/>
>    </wsdl:port>
>    <wsdl:port
binding="v2bind:WSRP_v2_ServiceDescription_Binding_SOAP"
> name="WSRP_v2_ServiceDescription_Service">
>      <soap:address location="http://my.service:8082/WSRPService"/>
>    </wsdl:port>
>
>
>    protected WSRPV2MarkupPortType_WSRPV2MarkupService_Server()
throws
> Exception {
>        System.out.println("Starting Server");
>        Object implementor = new WSRPV2MarkupPortTypeImpl();
>        String address = "http://my.service:8082/WSRPService";;
>        Endpoint.publish(address, implementor);
>    }
>
>    protected
>
WSRPV2ServiceDescriptionPortType_WSRPV2ServiceDescriptionService_Server(
)
> throws Exception {
>        System.out.println("Starting Server");
>        Object implementor = new
WSRPV2ServiceDescriptionPortTypeImpl();
>        String address = "http://my.service:8082/WSRPService";;
>        Endpoint.publish(address, implementor);
>    }
>
> ============================
> java.lang.RuntimeException: Soap 1.1 endpoint already registered on
> address /WSRPService
>
>
org.apache.cxf.binding.soap.SoapBindingFactory.addListener(SoapBindingFa
c
>tory.java:747)
> org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:122)
> org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:263)
> org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:201)
>
org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderI
m
>pl.java:84) javax.xml.ws.Endpoint.publish(Endpoint.java:47)
> ============================
>
>
> Regards,
> Alexey.



--
Daniel Kulp
[EMAIL PROTECTED]
http://dankulp.com/blog




Reply via email to