WSO2 PayloadFactory嵌入XML被转为JSON的问题解决咨询
解决WSO2 PayloadFactory保留XML字符串的问题
问题原因
当前配置中,detail参数使用evaluator="xml"时,WSO2会自动解析XML内容并将其转换为JSON格式,导致最终输出的details字段是JSON结构而非原始XML字符串。
解决方案
通过调整参数的解析器类型,或提前转义XML内容,让PayloadFactory将XML作为纯字符串嵌入JSON结构中。
方法1:使用text解析器+XML转义
- 先通过脚本中介对原始XML进行转义(将
<替换为<,>替换为>):
<script language="js"> var rawXml = mc.getProperty('detail'); var escapedXml = rawXml.replace(/</g, '<').replace(/>/g, '>'); mc.setProperty('escapedDetail', escapedXml); </script>
- 修改PayloadFactory配置,将
detail参数的解析器改为text,引用转义后的属性:
<payloadFactory media-type="json"> <format>{ "Customer": { "name": "$1", "details": "$2" } }</format> <args> <arg evaluator="xml" expression="get-property('name')"/> <arg evaluator="text" expression="get-property('escapedDetail')"/> </args> </payloadFactory>
方法2:提取CDATA中的XML字符串
如果原始XML是以CDATA格式存储在属性中(如<![CDATA[<id>123</id>]]>),可直接通过XPath提取CDATA内的文本内容:
<payloadFactory media-type="json"> <format>{ "Customer": { "name": "$1", "details": "$2" } }</format> <args> <arg evaluator="xml" expression="get-property('name')"/> <arg evaluator="xml" expression="get-property('detail')/text()"/> </args> </payloadFactory>
预期输出
修改后生成的JSON将符合需求:
{ "Customer": { "name": "Adam", "details": "<id>123</id>" } }
内容的提问来源于stack exchange,提问作者Arun Lal
相关产品推荐
相关产品推荐

