Alex Pintilie created CXF-7302:
----------------------------------

             Summary: Soap binding detection from wsdl hardcoded to soap 1.1
                 Key: CXF-7302
                 URL: https://issues.apache.org/jira/browse/CXF-7302
             Project: CXF
          Issue Type: Bug
    Affects Versions: 3.1.10
         Environment: Windows 7 Pro SP1, JDK 1.8.1_u111
            Reporter: Alex Pintilie
            Priority: Blocker


Hello,

I debugged how CXF detects the soap version from the wsdl file and found a 
*hardcoded* call (there no other calls) :(
{code:title=org.apache.cxf.wsdl11.PartialWSDLProcessor.java|borderStyle=solid}
public static SOAPAddress setAddrElement(Definition wsdlDefinition, Port port, 
ExtensionRegistry extReg) throws Exception {
    SOAPAddress address  = SOAPBindingUtil.createSoapAddress(extReg, false); // 
isSOAP12 = false !
    address.setLocationURI("dummy");
    return address;
}

// Please call this method in such a way that soap 1.2 detection from wsdl is 
possible
public static SOAPOperation createSoapOperation(ExtensionRegistry extReg, 
boolean isSOAP12) throws WSDLException {
        ExtensibilityElement extElement = null;
        if (isSOAP12) {
                extElement = extReg.createExtension(BindingOperation.class, 
                        new QName(WSDLConstants.NS_SOAP12, "operation"));
        } else {
                extElement = extReg.createExtension(BindingOperation.class, 
                        new QName(WSDLConstants.NS_SOAP11, "operation"));
        }
        return getSoapOperation(extElement);
}
{code}

The wsdl file has Soap 1.2 declared:

{{xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap12/"}}.

I call the server and get a response back followed by this exception:

{{org.apache.cxf.binding.soap.SoapFault: A SOAP 1.2 message is not valid when 
sent to a SOAP 1.1 only endpoint.}}

{code:title=MyProxyFactory.java|borderStyle=solid}        
// setting the soap12 binding has no effect
jaxWsProxyFactoryBean.setBindingId(SOAPBinding.SOAP12HTTP_BINDING);

jaxWsProxyFactoryBean.setServiceClass(serviceInterface);
jaxWsProxyFactoryBean.setAddress(serviceUrl);
jaxWsProxyFactoryBean.setWsdlLocation(wsdlUrl);
return jaxWsProxyFactoryBean.create();
{code}

Please correct me if I'm wrong.

Regards,
Alex



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to