TransportUtils aggressively changing content type from text/xml to 
application/xml
----------------------------------------------------------------------------------

                 Key: AXIS2-3228
                 URL: https://issues.apache.org/jira/browse/AXIS2-3228
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: kernel
            Reporter: Mike Rheinheimer


org.apache.axis2.transport.TransportUtils.createDocumentElement aggressively 
pushes REST processing by performing the following checks.  This is breaking 
regular text/xml SOAP processing in some environments.  See code:

            // Some services send REST responces as text/xml. We should convert 
it to
            // application/xml if its a REST response, if not it will try to 
use the SOAPMessageBuilder.
            if (HTTPConstants.MEDIA_TYPE_TEXT_XML.equals(type)) {
                if (msgContext.isServerSide()) {
                    if (msgContext.getSoapAction() == null) {
                        type = HTTPConstants.MEDIA_TYPE_APPLICATION_XML;
                    }
                } else if (msgContext.isDoingREST() &&
                        
!msgContext.isPropertyTrue(Constants.Configuration.SOAP_RESPONSE_MEP)) {
                    type = HTTPConstants.MEDIA_TYPE_APPLICATION_XML;
                }
            }
            Builder builder = BuilderUtil.getBuilderFromSelector(type, 
msgContext);

The failure case is the case where the client makes an async request.  In this 
case the reply message has content type "text/xml", isServerSide() passes due 
to the async client listening on a reply port (that's just the way it 
works...), and there is no soapAction.  All of the checks pass in the async 
case, changing the content type to application/xml, therefore picking the wrong 
builder (ApplicationXMLBuilder rather than SOAP11Builder).

Proposed fix:

I propose we add a configuration option such as BuilderForTextXML or similarly 
named, and move the above code to another TransportUtils method, such as:

Builder getBuilderForTextXML(String contentType) {
    if (msgContext.isPropertyTrue(Constants.Configuration.TEXTXML_IS_SOAP11)) {
        return 
BuilderUtil.getBuilderFromSelector(HTTPConstants.MEDIA_TYPE_TEXT_XML, 
msgContext);
    } else {
            // Some services send REST responces as text/xml. We should convert 
it to
            // application/xml if its a REST response, if not it will try to 
use the SOAPMessageBuilder.
            if (HTTPConstants.MEDIA_TYPE_TEXT_XML.equals(type)) {
                if (msgContext.isServerSide()) {
                    if (msgContext.getSoapAction() == null) {
                        type = HTTPConstants.MEDIA_TYPE_APPLICATION_XML;
                    }
                } else if (msgContext.isDoingREST() &&
                        
!msgContext.isPropertyTrue(Constants.Configuration.SOAP_RESPONSE_MEP)) {
                    type = HTTPConstants.MEDIA_TYPE_APPLICATION_XML;
                }
            }
            return BuilderUtil.getBuilderFromSelector(type, msgContext);
    }
}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to