public EndpointInfo createEndpointInfo( Bus bus, ServiceInfo serviceInfo, BindingInfo b, List<?> ees) { String transportURI = "http://schemas.xmlsoap.org/wsdl/soap/"; if (b instanceof SoapBindingInfo) { SoapBindingInfo sbi = (SoapBindingInfo) b; transportURI = sbi.getTransportURI(); } EndpointInfo info = new SoapEndpointInfo(serviceInfo, transportURI); if (ees != null) { for (Iterator<?> itr = ees.iterator(); itr.hasNext(); ) { Object extensor = itr.next(); if (SOAPBindingUtil.isSOAPAddress(extensor)) { final SoapAddress sa = SOAPBindingUtil.getSoapAddress(extensor); info.addExtensor(sa); info.setAddress(sa.getLocationURI()); if (isJMSSpecAddress(sa.getLocationURI())) { info.setTransportId(SoapJMSConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID); } } else { info.addExtensor(extensor); } } } return info; }
private void changeTransportUriToZmq(Endpoint ep) { if (ep.getBinding() == null) { return; } if (ep.getBinding().getBindingInfo() == null) { return; } BindingInfo bindingInfo = ep.getBinding().getBindingInfo(); if (bindingInfo instanceof SoapBindingInfo) { SoapBindingInfo soapBindingInfo = (SoapBindingInfo) bindingInfo; soapBindingInfo.setTransportURI("http://schemas.xmlsoap.org/soap/zmq"); } }
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; }
@Test public void testDestination() throws Exception { String wsdlSoapNs = "http://schemas.xmlsoap.org/wsdl/soap/"; String transportURI = "http://foo/transport"; // String location = "http://localhost/service"; ServiceInfo si = new ServiceInfo(); EndpointInfo ei = new EndpointInfo(si, wsdlSoapNs); // this code used to call "new SOAPAddressImpl()", but the test // is currently not testing anything, and needlessly ties the // code to a specific implementation of wsdl4j. When the SOAPAddress // is really needed, it should be mocked. SOAPAddress add = null; // add.setLocationURI(location); ei.addExtensor(add); SoapBindingInfo bi = new SoapBindingInfo(si, "", Soap11.getInstance()); bi.setTransportURI(transportURI); ei.setBinding(bi); IMocksControl control = EasyMock.createNiceControl(); DestinationFactoryManager dfm = control.createMock(DestinationFactoryManager.class); DestinationFactory fooDF = control.createMock(DestinationFactory.class); Destination dest = control.createMock(Destination.class); EasyMock.expect(dfm.getDestinationFactory(transportURI)).andReturn(fooDF); EasyMock.expect(fooDF.getDestination(ei, null)).andStubReturn(dest); control.replay(); // SoapDestinationFactory sdf = new SoapDestinationFactory(dfm); // Destination dest2 = sdf.getDestination(ei); // assertNotNull(dest2); // TODO: doesn't pass because I don't know how to use easymock :-( // assertEquals(dest, dest2); }
public void createPortExtensors(Bus b, EndpointInfo ei, Service service) { if (ei.getBinding() instanceof SoapBindingInfo) { SoapBindingInfo bi = (SoapBindingInfo) ei.getBinding(); createSoapExtensors(b, ei, bi, bi.getSoapVersion() instanceof Soap12); } }
public Binding createBinding(BindingInfo binding) { // TODO what about the mix style/use? // 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.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); // REVISIT: The phase interceptor chain seems to freak out if this added // first. Not sure what the deal is at the moment, I suspect the // ordering algorithm needs to be improved sb.getInInterceptors().add(new URIMappingInterceptor()); 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; }
private void createSoapBinding(final SoapBindingInfo bi) throws WSDLException { boolean isSoap12 = bi.getSoapVersion() instanceof Soap12; Bus bs = getBus(); WSDLManager m = bs.getExtension(WSDLManager.class); ExtensionRegistry extensionRegistry = m.getExtensionRegistry(); SoapBinding soapBinding = SOAPBindingUtil.createSoapBinding(extensionRegistry, isSoap12); soapBinding.setStyle(bi.getStyle()); soapBinding.setTransportURI(bi.getTransportURI()); bi.addExtensor(soapBinding); for (BindingOperationInfo b : bi.getOperations()) { for (BindingFaultInfo faultInfo : b.getFaults()) { SoapFault soapFault = SOAPBindingUtil.createSoapFault(extensionRegistry, isSoap12); soapFault.setUse("literal"); soapFault.setName(faultInfo.getFaultInfo().getFaultName().getLocalPart()); faultInfo.addExtensor(soapFault); } SoapOperationInfo soi = b.getExtensor(SoapOperationInfo.class); SoapOperation soapOperation = SOAPBindingUtil.createSoapOperation(extensionRegistry, isSoap12); soapOperation.setSoapActionURI(soi.getAction()); soapOperation.setStyle(soi.getStyle()); boolean isRpc = "rpc".equals(soapOperation.getStyle()); b.addExtensor(soapOperation); if (b.getInput() != null) { List<String> bodyParts = null; List<SoapHeaderInfo> headerInfos = b.getInput().getExtensors(SoapHeaderInfo.class); if (headerInfos != null && headerInfos.size() > 0) { bodyParts = new ArrayList<String>(); for (MessagePartInfo part : b.getInput().getMessageParts()) { bodyParts.add(part.getName().getLocalPart()); } for (SoapHeaderInfo headerInfo : headerInfos) { SoapHeader soapHeader = SOAPBindingUtil.createSoapHeader(extensionRegistry, BindingInput.class, isSoap12); soapHeader.setMessage(b.getInput().getMessageInfo().getName()); soapHeader.setPart(headerInfo.getPart().getName().getLocalPart()); soapHeader.setUse("literal"); bodyParts.remove(headerInfo.getPart().getName().getLocalPart()); headerInfo.getPart().setProperty(HEADER, true); b.getInput().addExtensor(soapHeader); } } SoapBody body = SOAPBindingUtil.createSoapBody(extensionRegistry, BindingInput.class, isSoap12); body.setUse("literal"); if (isRpc) { body.setNamespaceURI(b.getName().getNamespaceURI()); } if (bodyParts != null) { body.setParts(bodyParts); } b.getInput().addExtensor(body); } if (b.getOutput() != null) { List<String> bodyParts = null; List<SoapHeaderInfo> headerInfos = b.getOutput().getExtensors(SoapHeaderInfo.class); if (headerInfos != null && headerInfos.size() > 0) { bodyParts = new ArrayList<String>(); for (MessagePartInfo part : b.getOutput().getMessageParts()) { bodyParts.add(part.getName().getLocalPart()); } for (SoapHeaderInfo headerInfo : headerInfos) { SoapHeader soapHeader = SOAPBindingUtil.createSoapHeader(extensionRegistry, BindingOutput.class, isSoap12); soapHeader.setMessage(b.getOutput().getMessageInfo().getName()); soapHeader.setPart(headerInfo.getPart().getName().getLocalPart()); soapHeader.setUse("literal"); bodyParts.remove(headerInfo.getPart().getName().getLocalPart()); b.getOutput().addExtensor(soapHeader); } } SoapBody body = SOAPBindingUtil.createSoapBody(extensionRegistry, BindingOutput.class, isSoap12); body.setUse("literal"); if (isRpc) { body.setNamespaceURI(b.getName().getNamespaceURI()); } if (bodyParts != null) { body.setParts(bodyParts); } b.getOutput().addExtensor(body); } } }
public BindingInfo createBindingInfo(ServiceInfo si, String bindingid, Object conf) { SoapBindingConfiguration config; if (conf instanceof SoapBindingConfiguration) { config = (SoapBindingConfiguration) conf; } else { config = new SoapBindingConfiguration(); } if (WSDLConstants.NS_SOAP12.equals(bindingid) || WSDLConstants.NS_SOAP12_HTTP_BINDING.equals(bindingid)) { config.setVersion(Soap12.getInstance()); config.setTransportURI(WSDLConstants.NS_SOAP_HTTP_TRANSPORT); } SoapBindingInfo info = new SoapBindingInfo(si, bindingid, config.getVersion()); info.setName(config.getBindingName(si)); info.setStyle(config.getStyle()); info.setTransportURI(config.getTransportURI()); if (config.isMtomEnabled()) { info.setProperty(Message.MTOM_ENABLED, Boolean.TRUE); } for (OperationInfo op : si.getInterface().getOperations()) { SoapOperationInfo sop = new SoapOperationInfo(); sop.setAction(config.getSoapAction(op)); sop.setStyle(config.getStyle(op)); BindingOperationInfo bop = info.buildOperation(op.getName(), op.getInputName(), op.getOutputName()); bop.addExtensor(sop); info.addOperation(bop); BindingMessageInfo bInput = bop.getInput(); if (bInput != null) { MessageInfo input = null; BindingMessageInfo unwrappedMsg = bInput; if (bop.isUnwrappedCapable()) { input = bop.getOperationInfo().getUnwrappedOperation().getInput(); unwrappedMsg = bop.getUnwrappedOperation().getInput(); } else { input = bop.getOperationInfo().getInput(); } setupHeaders(bop, bInput, unwrappedMsg, input, config); } BindingMessageInfo bOutput = bop.getOutput(); if (bOutput != null) { MessageInfo output = null; BindingMessageInfo unwrappedMsg = bOutput; if (bop.isUnwrappedCapable()) { output = bop.getOperationInfo().getUnwrappedOperation().getOutput(); unwrappedMsg = bop.getUnwrappedOperation().getOutput(); } else { output = bop.getOperationInfo().getOutput(); } setupHeaders(bop, bOutput, unwrappedMsg, output, config); } } try { createSoapBinding(info); } catch (WSDLException e) { e.printStackTrace(); } return info; }