[
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]