Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-3363

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

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.3.2
    • 2.4, 2.3.4
    • 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

      Attachments

        Activity

          People

            dkulp Daniel Kulp
            gburboz Gladwin
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: