[英]WSO2 ESB/EI : How to get Original JSON body into XML Payload
我正在为该项目实施 WSO2 EI-6.4.0,我想将 JSON 转换为 XML。 当 HTML 标签包含在 JSON 响应中时,出现以下问题。
例子:
输入:
{
"departurePoint": "1: Galle, Sri Lanka<br />2: Hikkaduwa, Sri Lanka<br />3: Unawatuna, Sri Lanka<br />4: Ahangama, Sri Lanka<br />5: Midigama Beach, Sri Lanka<br />6: Weligama, Sri Lanka<br />7: Mirissa, Sri Lanka<br /><br>Traveler pickup is offered<br/>Free Pick up locations : Hikkaduwa , Galle ,Unawatuna , Ahangama , Midigama , Weligama , Mirissa<br><br>"
}
原装Output:
<departurePoint>
1: Galle, Sri Lanka
<br />2: Hikkaduwa, Sri Lanka
<br />3: Unawatuna, Sri Lanka
<br />4: Ahangama, Sri Lanka
<br />5: Midigama Beach, Sri Lanka
<br />6: Weligama, Sri Lanka
<br />7: Mirissa, Sri Lanka
<br />
<br>Traveler pickup is offered
<br/>Free Pick up locations : Hikkaduwa , Galle ,Unawatuna , Ahangama , Midigama , Weligama , Mirissa
<br>
<br>
</departurePoint>
预期 Output:
<departurePoint>
<![CDATA[1: Galle, Sri Lanka<br />2: Hikkaduwa, Sri Lanka<br />3: Unawatuna, Sri Lanka<br />4: Ahangama, Sri Lanka<br />5: Midigama Beach, Sri Lanka<br />6: Weligama, Sri Lanka<br />7: Mirissa, Sri Lanka<br /><br>Traveler pickup is offered<br/>Free Pick up locations : Hikkaduwa , Galle ,Unawatuna , Ahangama , Midigama , Weligama , Mirissa<br><br>]]>
</departurePoint>
我找不到为序列插入 CDATA 的方法。
为了满足您的要求,您也可以使用 Payload factory mediator。 以下是实现您的要求的示例调解。 这里注册资源与 CDATA 元素一起使用,以避免负载工厂中介的限制
代理配置
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="sampleProxy"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="http,https">
<target>
<inSequence>
<call>
<endpoint>
<http uri-template="http://www.mocky.io/v2/5dbdc767330000678f16a289"/>
</endpoint>
</call>
<log level="custom">
<property expression="$body/jsonObject/departurePoint" name="test"/>
</log>
<payloadFactory media-type="xml">
<format key="conf:/test/format.xml"/>
<args>
<arg evaluator="xml" expression="$body/jsonObject/departurePoint"/>
</args>
</payloadFactory>
<respond/>
</inSequence>
</target>
<description/>
</proxy>
注册表资源 (format.xml)
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<departurePoint ><![CDATA[$1]]></departurePoint>
</soap:Body>
即使使用此配置,您也不会得到预期的 output。 原因是 WSO2 EI 使用 STAX 解析器,默认情况下,STAX 解析器处于非合并模式。 要更正此问题,您需要执行以下操作
在<EI_HOME>
中创建一个名为 XMLInputFactory.properties 的文件
将以下内容添加到文件中
javax.xml.stream.isCoalescing=false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.