use of org.apache.cxf.transport.ChainInitiationObserver in project cxf by apache.
the class SoapBindingFactory method addListener.
@Override
public synchronized void addListener(Destination d, Endpoint e) {
synchronized (d) {
MessageObserver mo = d.getMessageObserver();
if (d.getAddress() != null && d.getAddress().getAddress() != null && d.getAddress().getAddress().getValue() != null && d.getAddress().getAddress().getValue().startsWith("soap.udp")) {
// soap.udp REQUIRES usage of WS-Addressing... we need to turn this on
setupUDP(e, e.getEndpointInfo());
}
if (mo == null) {
super.addListener(d, e);
return;
}
if (mo instanceof ChainInitiationObserver) {
ChainInitiationObserver cio = (ChainInitiationObserver) mo;
Binding b = e.getBinding();
Binding b2 = cio.getEndpoint().getBinding();
if (b == b2) {
// re-registering the same endpoint?
return;
}
Object o = cio.getEndpoint().get("allow-multiplex-endpoint");
if (o instanceof String) {
o = Boolean.parseBoolean((String) o);
} else if (o == null) {
o = Boolean.FALSE;
}
if (b instanceof org.apache.cxf.binding.soap.SoapBinding && b2 instanceof org.apache.cxf.binding.soap.SoapBinding && ((org.apache.cxf.binding.soap.SoapBinding) b).getSoapVersion().equals(((org.apache.cxf.binding.soap.SoapBinding) b2).getSoapVersion()) && Boolean.FALSE.equals(o)) {
throw new RuntimeException("Soap " + ((org.apache.cxf.binding.soap.SoapBinding) b).getSoapVersion().getVersion() + " endpoint already registered on address " + e.getEndpointInfo().getAddress());
}
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 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(), (SoapVersion) null));
newMO.getBindingInterceptors().add(new StartBodyInterceptor());
newMO.getBindingInterceptors().add(new CheckFaultInterceptor());
// Add in a default selection interceptor
newMO.getRoutingInterceptors().add(new EndpointSelectionInterceptor());
newMO.getEndpoints().add(cio.getEndpoint());
mo = newMO;
}
if (mo instanceof MultipleEndpointObserver) {
MultipleEndpointObserver meo = (MultipleEndpointObserver) mo;
meo.getEndpoints().add(e);
}
d.setMessageObserver(mo);
}
}
use of org.apache.cxf.transport.ChainInitiationObserver in project cxf by apache.
the class AbstractBindingFactory method addListener.
public void addListener(Destination d, Endpoint e) {
ChainInitiationObserver observer = new ChainInitiationObserver(e, bus);
d.setMessageObserver(observer);
}
Aggregations