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]