You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by xuhb <xu...@tongtech.com> on 2011/12/28 10:51:53 UTC
What's the usage of MultipleEndpointObserver
Hi:
Does anyone know when will org.apache.cxf.transport.MultipleEndpointObserver be used?
Does it means CXF support a feature: publish multiple endpoint on same address?
Thanks any suggestion.
Re: What's the usage of MultipleEndpointObserver
Posted by xuhb <xu...@tongtech.com>.
Thanks Freeman:
It's great, thank you very much;
----- Original Message -----
From: "Freeman Fang" <fr...@gmail.com>
To: <de...@cxf.apache.org>
Sent: Wednesday, December 28, 2011 6:14 PM
Subject: Re: What's the usage of MultipleEndpointObserver
Hi,
Yes.
IIRC, for server side you need write a routingInterceptor to dispatch
message to different endpoint.
When multiple endpoints publish to same address, those endpoints will
share same MultipleEndpointObserver, by default, the
MultipleEndpointObserver will use EndpointSelectionInterceptor to
select on the proper endpoint based on soap version, this is a typical
usecase which different endpoints(use soap11 or soap12) get published
to same uri.
You can replace this routingInterceptor for your purpose, we actually
have a testcase[1] which demonstrate how it works, the
routingInterceptor used in this tesecase is[2]
The key code to publish different endpoints on same address and
register a MultipleEndpointObserver which use the routingInterceptor
you want is
String address = "http://localhost:" + PORT + "/SoapContext/
SoapPort";
Object implementor1 = new GreeterImplMixedStyle(" version1");
EndpointImpl ep1 = (EndpointImpl) Endpoint.publish(address,
implementor1);
ep1.getServer().getEndpoint().put("version", "1");
ep1.getServer().getEndpoint().put("allow-multiplex-endpoint",
Boolean.TRUE);
//Register a MediatorInInterceptor on this dummy service
Object implementor2 = new GreeterImplMixedStyle(" version2");
EndpointImpl ep2 = (EndpointImpl) Endpoint.publish(address,
implementor2);
ep2.getServer().getEndpoint().put("version", "2");
MultipleEndpointObserver meo = (MultipleEndpointObserver)
ep1.getServer().getDestination().getMessageObserver();
meo.getRoutingInterceptors().clear();
meo.getRoutingInterceptors().add(new MediatorInInterceptor());
[1]https://svn.apache.org/repos/asf/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/versioning/ClientServerVersioningTest.java
[2]https://svn.apache.org/repos/asf/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java
Freeman
On 2011-12-28, at 下午5:51, xuhb wrote:
> Hi:
> Does anyone know when will
> org.apache.cxf.transport.MultipleEndpointObserver be used?
>
> Does it means CXF support a feature: publish multiple endpoint on
> same address?
>
> Thanks any suggestion.
---------------------------------------------
Freeman Fang
FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
Re: What's the usage of MultipleEndpointObserver
Posted by Freeman Fang <fr...@gmail.com>.
Hi,
Yes.
IIRC, for server side you need write a routingInterceptor to dispatch
message to different endpoint.
When multiple endpoints publish to same address, those endpoints will
share same MultipleEndpointObserver, by default, the
MultipleEndpointObserver will use EndpointSelectionInterceptor to
select on the proper endpoint based on soap version, this is a typical
usecase which different endpoints(use soap11 or soap12) get published
to same uri.
You can replace this routingInterceptor for your purpose, we actually
have a testcase[1] which demonstrate how it works, the
routingInterceptor used in this tesecase is[2]
The key code to publish different endpoints on same address and
register a MultipleEndpointObserver which use the routingInterceptor
you want is
String address = "http://localhost:" + PORT + "/SoapContext/
SoapPort";
Object implementor1 = new GreeterImplMixedStyle(" version1");
EndpointImpl ep1 = (EndpointImpl) Endpoint.publish(address,
implementor1);
ep1.getServer().getEndpoint().put("version", "1");
ep1.getServer().getEndpoint().put("allow-multiplex-endpoint",
Boolean.TRUE);
//Register a MediatorInInterceptor on this dummy service
Object implementor2 = new GreeterImplMixedStyle(" version2");
EndpointImpl ep2 = (EndpointImpl) Endpoint.publish(address,
implementor2);
ep2.getServer().getEndpoint().put("version", "2");
MultipleEndpointObserver meo = (MultipleEndpointObserver)
ep1.getServer().getDestination().getMessageObserver();
meo.getRoutingInterceptors().clear();
meo.getRoutingInterceptors().add(new MediatorInInterceptor());
[1]https://svn.apache.org/repos/asf/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/versioning/ClientServerVersioningTest.java
[2]https://svn.apache.org/repos/asf/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/versioning/MediatorInInterceptor.java
Freeman
On 2011-12-28, at 下午5:51, xuhb wrote:
> Hi:
> Does anyone know when will
> org.apache.cxf.transport.MultipleEndpointObserver be used?
>
> Does it means CXF support a feature: publish multiple endpoint on
> same address?
>
> Thanks any suggestion.
---------------------------------------------
Freeman Fang
FuseSource
Email:ffang@fusesource.com
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com