You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Gladwin (JIRA)" <ji...@apache.org> on 2011/03/12 00:37:59 UTC
[jira] Commented: (CXF-3363) Use
MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL) instead of
MessageFactory.newInstance()
[ 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