WSO2自定义介体未以适当的xml格式返回

时间:2013-04-29 16:43:43

标签: axis2 wso2 wso2esb

我在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>&lt;Prescription xmlns="http://hl7.org/fhir">&#xd;
                    &lt;identifier>&#xd;
                    &lt;id value="A0001"/>&#xd;
                    &lt;/identifier>&#xd;
                    &lt;status value="active"/>&#xd;
                    &lt;patient>&#xd;
                    &lt;type value="Patient"/>&#xd;
                    &lt;url value="Bhavani"/>&#xd;
                    &lt;/patient>&#xd;
                    &lt;prescriber>&#xd;
                    &lt;type value="Provider"/>&#xd;
                    &lt;url value="Dr.Mathews"/>&#xd;
                    &lt;/prescriber>&#xd;
                    &lt;medicine>&#xd;
                    &lt;identification>&#xd;
                    &lt;text value="Zintac"/>&#xd;
                    &lt;/identification>&#xd;
                    &lt;/medicine>&#xd;
                    &lt;/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&amp;java.naming.
    factory.initial=org.apache.activemq.jndi.
    ActiveMQInitialContextFactory&amp;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);

2 个答案:

答案 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;
}

}