Hi Devs,
Although the property *transport.msmq.ContentType *is defined in [1], it is
not getting set in the MSMQ transport receiver when reading messages.
As a result, in a scenario where we need to read messages with *application/xml
*content type, it is not configurable and the XML message will be read as*
text/xml*. Then the server expects the message to be enclosed in a SOAP
envelop, but if we have just a raw XML message, server cannot read it. It
will show the error below.
[2017-05-25 19:35:53,697] [] ERROR - NativeWorkerPool Uncaught exception
org.apache.axiom.soap.SOAPProcessingException: *First Element must contain
the local name, Envelope , but found hello*
at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:305)
at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:252)
at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java:234)
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:204)
at
org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:154)
at
org.apache.axiom.om.impl.AbstractOMMetaFactory.createStAXSOAPModelBuilder(AbstractOMMetaFactory.java:73)
at
org.apache.axiom.om.impl.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:79)
at
org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:196)
at
org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:65)
at
org.apache.axis2.format.TextMessageBuilderAdapter.processDocument(TextMessageBuilderAdapter.java:54)
at
org.apache.axis2.format.TextMessageBuilderAdapter.processDocument(TextMessageBuilderAdapter.java:70)
at
org.apache.axis2.format.TextMessageBuilderAdapter.processDocument(TextMessageBuilderAdapter.java:76)
at
org.apache.axis2.transport.msmq.util.MSMQUtil.setSOAPEnvelope(MSMQUtil.java:73)
at
org.apache.axis2.transport.msmq.MSMQMessageReceiver.processThroughEngine(MSMQMessageReceiver.java:98)
at
org.apache.axis2.transport.msmq.MSMQMessageReceiver.onMessage(MSMQMessageReceiver.java:64)
at
org.apache.axis2.transport.msmq.ServiceTaskManager.handleMessage(ServiceTaskManager.java:252)
at
org.apache.axis2.transport.msmq.ServiceTaskManager.access$700(ServiceTaskManager.java:40)
at
org.apache.axis2.transport.msmq.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:235)
at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
The fix is to make use of the property [1] and if it is set in the proxy's
configuration, use it as the receiver's message content type when reading
messages.
I created the Issue [2] to track this. Also the fix is sent via the GIT PR
[3].
Please review and merge.
[1] https://github.com/wso2/wso2-axis2-transports/blob/master/
modules/msmq/src/main/java/org/apache/axis2/transport/
msmq/MSMQConstants.java#L27
[2] https://github.com/wso2/wso2-axis2-transports/issues/120
[3] https://github.com/wso2/wso2-axis2-transports/pull/121
Regards,
Tharindu
--
Tharindu Edirisinghe
Senior Software Engineer | WSO2 Inc
Platform Security Team
Blog : http://tharindue.blogspot.com
mobile : +94 775181586 <+94%2077%20518%201586>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev