[ 
https://issues.apache.org/jira/browse/CXF-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13005898#comment-13005898
 ] 

Gladwin commented on CXF-3363:
------------------------------


*Refactor SAAJFactoryResolver*
* To handle Throwable similar to how it is handled for 
SOAPConstants.SOAP_1_1_PROTOCOL
* Rename method newInstanceCxfMessageFactory(...) to 
newInstanceCxfSAAJFactory(...)

{code:title=SAAJFactoryResolver.java|borderStyle=solid}

public final class SAAJFactoryResolver {

    ...

    public static MessageFactory createMessageFactory(SoapVersion version) 
throws SOAPException {
        ...
        if (messageFactoryClassName != null) {
            messageFactory = newInstanceCxfSAAJFactory(messageFactoryClassName, 
MessageFactory.class);
        } else if (version instanceof Soap11) {
        ...
        } else if (version instanceof Soap12) {
            try {
                messageFactory = 
MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
            } catch (Throwable t) {
                messageFactory = MessageFactory.newInstance();
            }
        } else {
        ...
    }

    public static SOAPFactory createSOAPFactory(SoapVersion version) throws 
SOAPException {
        ...
        if (soapFactoryClassName != null) {
            soapFactory = newInstanceCxfSAAJFactory(soapFactoryClassName, 
SOAPFactory.class);
        } else if (version instanceof Soap11) {
        ...
        } else if (version instanceof Soap12) {
            try {
                soapFactory = 
SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
            } catch (Throwable t) {
                soapFactory = SOAPFactory.newInstance();
            }
            soapFactory = 
SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
        } else {
        ...
    }

    private static <T> T newInstanceCxfSAAJFactory(String factoryName, Class<T> 
cls)
        throws SOAPException {
        ...
    }
}
{code}


> 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
>            Assignee: Daniel Kulp
>             Fix For: 2.4, 2.3.4
>
>
> 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 MessageFactory.newInstance();
>                 } 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 null;
> }
> {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