Although the property transport.msmq.ContentType is defined in [1], it is not getting set in the 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 SOAP envelop, but if we have just a raw XML message, server cannot read it. It will give following error.
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.