You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Mike Rheinheimer (JIRA)" <ji...@apache.org> on 2007/09/25 17:31:50 UTC

[jira] Commented: (AXIS2-3228) TransportUtils aggressively changing content type from text/xml to application/xml

    [ https://issues.apache.org/jira/browse/AXIS2-3228?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12530134 ] 

Mike Rheinheimer commented on AXIS2-3228:
-----------------------------------------

For clarity, the current default is to change the content type from text/xml to application/xml on the client upon receiving the async response message.  This is a bug.  The proposed solution would fix the bug AND enhance the runtime to allow for configuration override of this behavior.

Also, the new method would go best in BuilderUtils, not TransportUtils as I originally stated.  I'll prepare a patch and query the mailing list for consensus.

> 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: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org