如何让PayloadFactory生成首尾闭合XML标签而非自闭合标签?
解决PayloadFactory生成自闭合XML标签问题
问题分析
当JSON中缺失可选字段时,PayloadFactory会自动生成自闭合标签,但下游端点不兼容该格式,需要强制生成空的首尾闭合标签。同时你当前的配置存在语法错误(<args>标签未正确闭合),这也是Integration Studio无法保存的原因。
修复步骤及解决方案
1. 先修正配置语法错误
原配置中<args>标签未闭合,需改为:
<payloadFactory media-type="xml"> <format> <soap:Body> <hom:ActionItem>$1</hom:ActionItem> </soap:Body> </format> <args> <arg evaluator="json" expression="$.ActionItem"/> </args> <!-- 修正:这里应该是闭合标签 --> </payloadFactory>
(注:处理JSON载荷时,evaluator应设为json而非xml,原配置的evaluator类型错误)
2. 强制生成首尾闭合标签的方案
方案一:使用default属性设置空默认值
在arg标签中添加default="",当JSON中无ActionItem字段时,传入空字符串,PayloadFactory会生成首尾闭合标签:
<payloadFactory media-type="xml"> <format> <soap:Body> <hom:ActionItem>$1</hom:ActionItem> </soap:Body> </format> <args> <arg evaluator="json" expression="$.ActionItem" default=""/> </args> </payloadFactory>
方案二:使用XPath条件判断(适用于XML输入上下文)
如果载荷已转为XML格式(例如经过JSONtoXML中介处理),可通过XPath表达式确保返回空字符串而非空节点:
<payloadFactory media-type="xml"> <format> <soap:Body> <hom:ActionItem>$1</hom:ActionItem> </soap:Body> </format> <args> <arg evaluator="xml" expression="if (//ActionItem) then string(//ActionItem) else ''"/> </args> </payloadFactory>
方案三:用Script中介手动控制XML生成
若上述方案不生效,可使用JavaScript脚本直接构建XML,完全控制标签格式:
<script language="js"> var json = mc.getPayloadJSON(); var actionItem = json.ActionItem || ''; var xml = '<soap:Body><hom:ActionItem>' + actionItem + '</hom:ActionItem></soap:Body>'; mc.setPayloadXML(xml); </script>
内容的提问来源于stack exchange,提问作者SuchAbsurdity
相关产品推荐
相关产品推荐

