WSO2 AM 1.9 - 将 CDATA 保留在有效负载工厂中
WSO2 AM 1.9 - Keep CDATA in payload factory
我正在尝试在 WSO2 am 中使用有效负载工厂调解器将 Json 转换为 XML。
但是我的 XML 应该包含 CDATA。
当我在 wso2 中使用调解器时,CDATA 被转换:Cdata 标签消失,我的 CDATA 中的所有 < 和 > 都转换为 <
和 >
在 wso2 1 和 Whosebug 的文档中,我发现我应该将 javax.xml.stream.isCoalescing
设置为 false(来自 <APIM_HOME>/XMLInputFactory.properties
)。但它不起作用:只有 > 是守恒的,其他的都被转换了。
我想保留的东西:
<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>
有人可以帮助我吗?因为我不明白为什么文档的说明不起作用。
非常感谢
我知道这是 API-M 但如果有人在 WSO2 ESB 4.9.0 中寻找答案,答案是
创建一个文件名XMLInputFactory.properties并放入下面的内容并重新启动。
javax.xml.stream.isCoalescing=false
com.ctc.wstx.minTextSegment=2147483647
我知道这已经有几年了,但如果有人正在寻找这个答案(就像我一个月前一样:))你可以在 API-M 和 ESB 中执行以下操作
创建注册表资源并将要转义的 XML 负载发送到该资源。它会简单地 return 转义字符串到您的 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[]]></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。
我正在尝试在 WSO2 am 中使用有效负载工厂调解器将 Json 转换为 XML。 但是我的 XML 应该包含 CDATA。
当我在 wso2 中使用调解器时,CDATA 被转换:Cdata 标签消失,我的 CDATA 中的所有 < 和 > 都转换为 <
和 >
在 wso2 1 和 Whosebug 的文档中,我发现我应该将 javax.xml.stream.isCoalescing
设置为 false(来自 <APIM_HOME>/XMLInputFactory.properties
)。但它不起作用:只有 > 是守恒的,其他的都被转换了。
我想保留的东西:
<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>
有人可以帮助我吗?因为我不明白为什么文档的说明不起作用。
非常感谢
我知道这是 API-M 但如果有人在 WSO2 ESB 4.9.0 中寻找答案,答案是
创建一个文件名XMLInputFactory.properties并放入下面的内容并重新启动。
javax.xml.stream.isCoalescing=false
com.ctc.wstx.minTextSegment=2147483647
我知道这已经有几年了,但如果有人正在寻找这个答案(就像我一个月前一样:))你可以在 API-M 和 ESB 中执行以下操作
创建注册表资源并将要转义的 XML 负载发送到该资源。它会简单地 return 转义字符串到您的 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[]]></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。