繁体   English   中英

WSO2 ESB/EI:如何将原始 JSON 主体装入 XML 有效载荷

[英]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 解析器处于非合并模式。 要更正此问题,您需要执行以下操作

  1. <EI_HOME>中创建一个名为 XMLInputFactory.properties 的文件

  2. 将以下内容添加到文件中

javax.xml.stream.isCoalescing=false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM