Use MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL) instead of 
MessageFactory.newInstance()
-------------------------------------------------------------------------------------------------------

                 Key: CXF-3363
                 URL: https://issues.apache.org/jira/browse/CXF-3363
             Project: CXF
          Issue Type: Improvement
          Components: JAX-WS Runtime, Soap Binding
    Affects Versions: 2.3.2
            Reporter: Gladwin


When it is known that SOAP version used is 1.1 [ {{instanceof Soap11}} ], CXF 
should use {{MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL)}} 
instead of {{MessageFactory.newInstance()}}

Further more by default when version is neither of 1.1 or 1.2, then instead of 
returning {{null}}, CXF should return 
{{MessageFactory.newInstance(SOAPConstants.DEFAULT_SOAP_PROTOCOL)}} or 
{{MessageFactory.newInstance(SOAPConstants.DYNAMIC_SOAP_PROTOCOL)}}


*Given below is an example of cxf code where this refactoring can be done*
{code:title=org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl.java|borderStyle=solid}
public MessageFactory getMessageFactory() 

{
        if (this.soapBinding instanceof SoapBindingInfo) {
            SoapBindingInfo bindingInfo = (SoapBindingInfo) this.soapBinding;
            try {
                if (bindingInfo.getSoapVersion() instanceof Soap11) {
                    return {color:red}MessageFactory.newInstance(){color:red};
                } else if (bindingInfo.getSoapVersion() instanceof Soap12) {
                    return 
MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
                }
            } catch (SOAPException e) {
                throw new 
WebServiceException(BUNDLE.getString("SAAJ_FACTORY_ERR"), e);
            }
        }
        return {color:red}null{color:red};
}
{code} 


*Advantages*
* In future, {{MessageFactory.newInstance()}} may not return object instance of 
the default implementation that does not supports "SOAP 1.1 Protocol"
* Some JEE Appserver implementations of {{MessageFactory.newInstance()}}, 
currently do not return factory that supports "SOAP 1.1 Protocol"
** Weblogic 10.3.x [ {{weblogic.webservice.core.soap.MessageFactoryImpl}} ] 
does not support SAAJ "SOAP 1.1 Protocol" -> 
"{{java.lang.UnsupportedOperationException: This class does not support SAAJ 
1.1}}"
* This could help ease use of CXF libraries in JEE applications even if 
Application Server has it's own SOAP/SAAJ implementation. By above method, CXF 
will always get {{MessageFactory}} that supports required protocol.

*Related Isues*
* https://issues.apache.org/jira/browse/CXF-976
* https://issues.apache.org/jira/browse/CXF-1750
* https://issues.apache.org/jira/browse/CXF-3307


-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to