【问题标题】:WSO2 AM 1.9 - Keep CDATA in payload factoryWSO2 AM 1.9 - 将 CDATA 保存在有效负载工厂中
【发布时间】:2015-09-15 15:44:37
【问题描述】:

我正在尝试使用 WSO2 am 中的有效负载工厂调解器将 Json 转换为 XML。 但我的 XML 应该包含 CDATA。

当我在 wso2 中使用中介时,CDATA 被转换:Cdata 标签消失,我的 CDATA 中的所有 都转换为 < 和 >

在 wso2 1 和 stackoverflow 的文档中,我发现我应该将 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>
&lt;?xml version="1.0" encoding="UTF-8"?>
    &lt;Data>
        &lt;body>
            &lt;MSISDN>111111111&lt;/MSISDN>
        &lt;/body>
    &lt;/Data></soapenv:Body>

有人可以帮助我吗?因为我不明白为什么文档的说明不起作用。

非常感谢

【问题讨论】:

  • 也许这个问题可以帮到你:stackoverflow.com/questions/223652/…
  • 我对 WSO2 AM 一无所知,但在 WSO2 ESB 中,如果要保留 CDATA 部分,则不能使用 payloadfactory,请参阅 stackoverflow.com/questions/32089603/…
  • 谢谢。最后一个链接帮助我建立一个替代方案。它不是很干净,所以如果有人找到答案或者它是要修复的错误,我会保持请求开放。一个干净的解决方案会更好,但目前对我来说还可以

标签: wso2 wso2esb cdata wso2-am


【解决方案1】:

我知道这已经有好几年了,但是如果有人正在寻找这个答案(就像我一个月前一样:))你可以在 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。

【讨论】:

  • 如果遇见你,我会给你一个拥抱。谢谢。
【解决方案2】:

我知道这是 API-M,但如果有人在 WSO2 ESB 4.9.0 中寻找答案,则答案是,

创建一个文件名 XMLInputFactory.properties 并放入下面的内容并重新启动。

javax.xml.stream.isCoalescing=false
com.ctc.wstx.minTextSegment=2147483647

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多