Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.3.2
-
None
-
Novice
Description
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
org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl.java
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; }
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