use of org.apache.cxf.binding.soap.model.SoapBindingInfo in project cxf by apache.
the class SoapBindingFactoryTest method testFactory.
@Test
public void testFactory() throws Exception {
Definition d = createDefinition("/wsdl_soap/hello_world.wsdl");
Bus bus = getMockBus();
BindingFactoryManager bfm = getBindingFactoryManager(WSDLConstants.NS_SOAP11, bus);
bus.getExtension(BindingFactoryManager.class);
expectLastCall().andReturn(bfm).anyTimes();
DestinationFactoryManager dfm = control.createMock(DestinationFactoryManager.class);
expect(bus.getExtension(DestinationFactoryManager.class)).andStubReturn(dfm);
control.replay();
WSDLServiceBuilder builder = new WSDLServiceBuilder(bus);
ServiceInfo serviceInfo = builder.buildServices(d, new QName("http://apache.org/hello_world_soap_http", "SOAPService")).get(0);
BindingInfo bi = serviceInfo.getBindings().iterator().next();
assertTrue(bi instanceof SoapBindingInfo);
SoapBindingInfo sbi = (SoapBindingInfo) bi;
assertEquals("document", sbi.getStyle());
assertTrue(WSDLConstants.NS_SOAP11_HTTP_TRANSPORT.equalsIgnoreCase(sbi.getTransportURI()));
assertTrue(sbi.getSoapVersion() instanceof Soap11);
BindingOperationInfo boi = sbi.getOperation(new QName("http://apache.org/hello_world_soap_http", "sayHi"));
SoapOperationInfo sboi = boi.getExtensor(SoapOperationInfo.class);
assertNotNull(sboi);
assertEquals("document", sboi.getStyle());
assertEquals("", sboi.getAction());
BindingMessageInfo input = boi.getInput();
SoapBodyInfo bodyInfo = input.getExtensor(SoapBodyInfo.class);
assertEquals("literal", bodyInfo.getUse());
List<MessagePartInfo> parts = bodyInfo.getParts();
assertNotNull(parts);
assertEquals(1, parts.size());
}
use of org.apache.cxf.binding.soap.model.SoapBindingInfo in project cxf by apache.
the class SoapBindingFactory method createBindingInfo.
public BindingInfo createBindingInfo(ServiceInfo service, javax.wsdl.Binding binding, String ns) {
SoapBindingInfo bi = new SoapBindingInfo(service, ns);
// Copy all the extensors
initializeBindingInfo(service, binding, bi);
SoapBinding wSoapBinding = SOAPBindingUtil.getSoapBinding(bi.getExtensors(ExtensibilityElement.class));
bi.setTransportURI(wSoapBinding.getTransportURI());
bi.setStyle(wSoapBinding.getStyle());
for (BindingOperationInfo boi : bi.getOperations()) {
initializeBindingOperation(bi, boi);
}
return bi;
}
use of org.apache.cxf.binding.soap.model.SoapBindingInfo in project cxf by apache.
the class SoapBindingFactory method createBinding.
public Binding createBinding(BindingInfo binding) {
// The default style should be doc-lit wrapped.
String parameterStyle = SoapBindingConstants.PARAMETER_STYLE_WRAPPED;
String bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC;
boolean hasWrapped = false;
org.apache.cxf.binding.soap.SoapBinding sb = null;
SoapVersion version = null;
if (binding instanceof SoapBindingInfo) {
SoapBindingInfo sbi = (SoapBindingInfo) binding;
version = sbi.getSoapVersion();
sb = new org.apache.cxf.binding.soap.SoapBinding(binding, version);
// Service wide style
if (!StringUtils.isEmpty(sbi.getStyle())) {
bindingStyle = sbi.getStyle();
}
boolean hasRPC = false;
boolean hasDoc = false;
// Operation wide style, what to do with the mixed style/use?
for (BindingOperationInfo boi : sbi.getOperations()) {
String st = sbi.getStyle(boi.getOperationInfo());
if (st != null) {
bindingStyle = st;
if (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(st)) {
hasRPC = true;
} else {
hasDoc = true;
}
}
if (boi.getUnwrappedOperation() == null) {
parameterStyle = SoapBindingConstants.PARAMETER_STYLE_BARE;
} else {
hasWrapped = true;
}
}
if (Boolean.TRUE.equals(binding.getService().getProperty("soap.force.doclit.bare"))) {
hasDoc = true;
hasRPC = false;
parameterStyle = SoapBindingConstants.PARAMETER_STYLE_BARE;
bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC;
}
if (hasRPC && hasDoc) {
throw new RuntimeException("WSI-BP prohibits RPC and Document style " + "operations in same service.");
}
// jms
if (sbi.getTransportURI().equals(SoapJMSConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID)) {
sb.getInInterceptors().add(new SoapJMSInInterceptor());
}
} else {
throw new RuntimeException("Can not initialize SoapBinding, BindingInfo is not SoapBindingInfo");
}
sb.getOutFaultInterceptors().add(new StaxOutInterceptor());
sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus()));
sb.getOutFaultInterceptors().add(new AttachmentOutInterceptor());
sb.getInInterceptors().add(new AttachmentInInterceptor());
sb.getInInterceptors().add(new StaxInInterceptor());
sb.getInInterceptors().add(new SoapActionInInterceptor());
sb.getOutInterceptors().add(new AttachmentOutInterceptor());
sb.getOutInterceptors().add(new StaxOutInterceptor());
sb.getOutInterceptors().add(SoapHeaderOutFilterInterceptor.INSTANCE);
if (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(bindingStyle)) {
sb.getInInterceptors().add(new RPCInInterceptor());
sb.getOutInterceptors().add(new RPCOutInterceptor());
} else if (SoapBindingConstants.BINDING_STYLE_DOC.equalsIgnoreCase(bindingStyle) && SoapBindingConstants.PARAMETER_STYLE_BARE.equalsIgnoreCase(parameterStyle)) {
// sb.getInInterceptors().add(new BareInInterceptor());
sb.getInInterceptors().add(new DocLiteralInInterceptor());
if (hasWrapped) {
sb.getOutInterceptors().add(new WrappedOutInterceptor());
}
sb.getOutInterceptors().add(new BareOutInterceptor());
} else {
// sb.getInInterceptors().add(new WrappedInInterceptor());
sb.getInInterceptors().add(new DocLiteralInInterceptor());
sb.getOutInterceptors().add(new WrappedOutInterceptor());
sb.getOutInterceptors().add(new BareOutInterceptor());
}
sb.getInInterceptors().add(new SoapHeaderInterceptor());
sb.getInInterceptors().add(new ReadHeadersInterceptor(getBus(), version));
sb.getInInterceptors().add(new StartBodyInterceptor());
sb.getInInterceptors().add(new CheckFaultInterceptor());
sb.getInInterceptors().add(new MustUnderstandInterceptor());
sb.getOutInterceptors().add(new SoapPreProtocolOutInterceptor());
sb.getOutInterceptors().add(new SoapOutInterceptor(getBus()));
sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus()));
sb.getOutFaultInterceptors().add(SoapHeaderOutFilterInterceptor.INSTANCE);
if (version.getVersion() == 1.1) {
sb.getInFaultInterceptors().add(new Soap11FaultInInterceptor());
sb.getOutFaultInterceptors().add(new Soap11FaultOutInterceptor());
} else if (version.getVersion() == 1.2) {
sb.getInFaultInterceptors().add(new Soap12FaultInInterceptor());
sb.getOutFaultInterceptors().add(new Soap12FaultOutInterceptor());
}
if (binding.getService() != null) {
for (EndpointInfo ei : binding.getService().getEndpoints()) {
if (ei.getAddress() != null && ei.getAddress().startsWith("soap.udp")) {
setupUDP(sb, ei);
}
}
}
return sb;
}
use of org.apache.cxf.binding.soap.model.SoapBindingInfo in project cxf by apache.
the class SoapTransportFactory method getDestination.
public Destination getDestination(EndpointInfo ei, Bus bus) throws IOException {
String address = ei.getAddress();
BindingInfo bi = ei.getBinding();
String transId = ei.getTransportId();
if (bi instanceof SoapBindingInfo) {
transId = ((SoapBindingInfo) bi).getTransportURI();
if (transId == null) {
transId = ei.getTransportId();
}
}
DestinationFactory destinationFactory;
try {
DestinationFactoryManager mgr = bus.getExtension(DestinationFactoryManager.class);
if (StringUtils.isEmpty(address) || address.startsWith("http") || address.startsWith("jms") || address.startsWith("soap.udp") || address.startsWith("/")) {
destinationFactory = mgr.getDestinationFactory(mapTransportURI(transId, address));
} else {
destinationFactory = mgr.getDestinationFactoryForUri(address);
}
if (destinationFactory == null) {
throw new IOException("Could not find destination factory for transport " + transId);
}
return destinationFactory.getDestination(ei, bus);
} catch (BusException e) {
IOException ex = new IOException("Could not find destination factory for transport " + transId);
ex.initCause(e);
throw ex;
}
}
use of org.apache.cxf.binding.soap.model.SoapBindingInfo in project cxf by apache.
the class EndpointSelectionInterceptor method selectEndpoint.
protected Endpoint selectEndpoint(Message message, Set<Endpoint> eps) {
SoapVersion sv = ((SoapMessage) message).getVersion();
for (Endpoint e : eps) {
EndpointInfo ei = e.getEndpointInfo();
BindingInfo binding = ei.getBinding();
if (binding instanceof SoapBindingInfo && ((SoapBindingInfo) binding).getSoapVersion().equals(sv)) {
return e;
}
}
return null;
}
Aggregations