XML 在 Script Mediator 中消失

XML Disappears in Script Mediator

我想向 XML 请求添加一个新的子节点,我正在使用 API.

代理到 WSO2 DSS

我收到的请求格式如下:

<contacts>
  <firstName>Bob</firstName>
  <lastName>Brown</lastName>
</contacts>

我需要向此请求添加一个 "id" 节点,以便我可以从 URI 变量中检索。

<contacts>
  <id>1</id>
  <firstName>Bob</firstName>
  <lastName>Brown</firstName>
</contacts>

我试过使用 "enrich" 调解器,但这似乎只是将 ID 节点包裹在名字和姓氏节点周围。

所以我求助于使用脚本中介来修改请求。这就是我想要做的:

//Get XML Request from message context    
var request= mc.getPayloadXML();

//Create a child node using standard E4X notation
var child = <id>1</id>;

//Append this XML to the request
request.appendChild(child);

//Replace the payload
mc.setPayloadXML(request);

每次我尝试提交此代码时,WSO2 ESB API UI 都说一切都很酷。但是当我检查底层 XML 配置时,它并不酷。我定义的 "id" 节点现在只是空白,好像它在我不知情的情况下被过滤了!

如果我可以使用脚本中介添加此元素,那就太好了,但我愿意接受其他解决方案。

这实际上是一个非常简单的修复。只需使用 CDATA 部分让 XML 解析器忽略您的代码。

<![CDATA[ //YOUR CODE WITH XML INLINE// ]]>

请注意,出于某种原因,WSO2 ESB XML 编辑器和 UI 将在您下次打开序列进行编辑时删除 CDATA 部分。我通常只是将 XML 配置复制到一个文本文件,并在需要更新时将其粘贴回配置中。

这不是一个完美的解决方案,但它会让你越过这条线。