我在wso2代理服务中有一个自定义中介,它将传入的xml转换为另一种格式,然后由代理转发到jms队列。但是xml格式不正确。它在控制台和队列中显示如下:
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Envelope xmlns:ws="http://isova.wipro.com/">
<arg0><Prescription xmlns="http://hl7.org/fhir">
<identifier>
<id value="A0001"/>
</identifier>
<status value="active"/>
<patient>
<type value="Patient"/>
<url value="Bhavani"/>
</patient>
<prescriber>
<type value="Provider"/>
<url value="Dr.Mathews"/>
</prescriber>
<medicine>
<identification>
<text value="Zintac"/>
</identification>
</medicine>
</Prescription></arg0>
</soapenv:Envelope>
</soapenv:Body>
</soapenv:Envelope>
我的代理服务:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="risresult"
transports="https,http,jms" statistics="disable" trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="ContentType" value="text/plain" scope="default"
type="STRING" />
<class name="com.test.guru.HL7RISPrescription" />
<property name="RESPONSE" value="true" />
<header name="To" action="remove" />
<send>
<endpoint>
<address
uri="jms:/prescription?
transport.jms.ConnectionFactoryJNDIName
=QueueConnectionFactory&java.naming.
factory.initial=org.apache.activemq.jndi.
ActiveMQInitialContextFactory&java.
naming.provider.url=tcp://localhost:61616" />
</endpoint>
</send>
</inSequence>
<outSequence>
<drop />
</outSequence>
<faultSequence />
</target>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>application/xml</default>
</rules>
</parameter>
<description></description>
</proxy>
这可能是什么原因?问题是因为axis2元素吗?
我的中介班有最后的陈述:
OMFactory factoryOM = OMAbstractFactory.getOMFactory();
OMElement code = factoryOM.createOMElement("arg0","","");
code.setText(pdoc.toString());
axis2Element.addChild(code);
答案 0 :(得分:0)
查看配置,您似乎正在按顺序使用代理。
<property name="ContentType" value="text/plain" scope="default"
type="STRING" />
使用它的原因是什么?删除它并尝试。这应该导致转义的XML使其文本/普通。在类调解器之前和之后使用日志调解器并将其记录完整,以观察消息内容,如果还有其他问题,将对您有所帮助。
答案 1 :(得分:0)
这应该可以完美地运作..
公共类GetLocationMockMediator扩展了AbstractMediator {
public boolean mediate(MessageContext context) {
StringBuilder xml = new StringBuilder("<result><field1>field1Value</field1></result>");
InputStream xmlInputStream = new ByteArrayInputStream(xml.toString().getBytes());
try {
context.getEnvelope().getBody().addChild(new StAXOMBuilder(xmlInputStream).getDocumentElement());
} catch (final Exception e) {
// ignore
}
return true;
}
}