我试图在WSO2 am中使用有效负载工厂中介来将Json转换为XML。 但是我的XML应该包含CDATA。
当我在wso2中使用中介时,CDATA正在变换:Cdata标签消失并且所有&lt;和&gt;在我的CDATA中转换为<
和>
在wso2 1和stackoverflow的文档中,我发现我应该将javax.xml.stream.isCoalescing
设置为false(来自<APIM_HOME>/XMLInputFactory.properties
)。但它不起作用:只是&gt;保守,其他人都被改造了。
我想保留的内容:
<soapenv:Body>
<![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<body>
<MSISDN>111111111</MSISDN>
</body>
</Data>
]]></soapenv:Body>
我实际拥有的东西:
<soapenv:Body>
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<body>
<MSISDN>111111111</MSISDN>
</body>
</Data></soapenv:Body>
有人可以帮帮我吗?因为我不明白为什么文件说明不起作用。
非常感谢
答案 0 :(得分:0)
我知道这是API-M,但是如果有人在WSO2 ESB 4.9.0中寻找答案,
创建文件名XMLInputFactory.properties并将其放在内容下方,然后重新启动。
javax.xml.stream.isCoalescing=false
com.ctc.wstx.minTextSegment=2147483647
答案 1 :(得分:0)
我知道这已经有几年了,但是如果有人正在寻找这个答案(就像我一个月前一样:)),您可以在API-M和ESB中执行以下操作
创建注册表资源,然后将要转义的XML有效负载发送到该资源。它将只是将转义的字符串返回到您的PayloadFactory
示例: 注册资源: SampleFormat.txt
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<text xmlns="http://ws.apache.org/commons/ns/payload"><![CDATA[$1]]></text>
</soapenv:Body>
</soapenv:Envelope>
PayloadFactory
<payloadFactory description="Send Escaped XML" media-type="xml">
<format key="conf:/SampleFormat.txt" />
<!--Custom format will be loaded form Registry containing an XML with escaped characters -->
<args>
<arg evaluator="text" expression="get-property('XMLToBeEscaped')" literal="true" />
</args>
</payloadFactory>
<property name="messageType" scope="axis2" type="STRING" value="text/xml"/>
<property name="ContentType" scope="axis2" type="STRING" value="text/xml"/>
如果在此之后立即打印$ body,应该会看到正确转义的SOAPEnvelope。