如何存储有效负载并在以后将其附加到另一个有效负载?

时间:2016-07-19 12:35:37

标签: spring-integration

我在项目中使用Spring Integration。我有以下有效载荷。

<?xml version="1.0" encoding="UTF-8"?>
<PQ>
   <PQContact>
      <hostAddress>10.193.244.136</hostAddress>
   </PQContact>
   <workflowStatusComment>
      <comment>I am here</comment>
   </workflowStatusComment>
</PQ>

我想提取标记<workflowStatusComment>,即workflowStatusComment <comment>I am here</comment></workflowStatusComment>并保存以供将来使用。我不希望将来使用任何java代码来使用保存的标记信息。我想在执行结束时将保存的信息添加到另一个有效负载。我知道标题丰富,但我不知道如何使用保存的标头丰富的值而不使用java。我必须只使用Spring Integration组件来操作有效负载。

我将要添加保存的标记信息的第二个有效负载在此处:

  <?xml version="1.0" encoding="UTF-8"?>
<PQ>
   <PQContact>
      <hostAddress>10.193.244.136</hostAddress>
      <name>Ashok</name>
      <userId>007</userId>
   </PQContact>
 </PQ>

将保存的标签信息附加到上述有效负载后,我的最终有效负载应该看起来像初始有效负载,并附带一些额外信息。如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<PQ>
   <PQContact>
      <hostAddress>10.193.244.136</hostAddress>
      <name>Ashok</name>
      <userId>007</userId>
   </PQContact>
   <workflowStatusComment>
      <comment>I am here</comment>
  </workflowStatusComment>
</PQ>

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用<int-xml:xpath-transformer>#xpath() SpEL功能从XML中提取该信息。

但你必须与我们分享你的另一个有效载荷&#34;以及如何添加此提取的内容。

使用Java获得一些解决方案可能更好,我们在此考虑如何将其转换为Spring Integration XML DSL或类似解决方案。

请修改你的问题,使其更清晰。

<强>更新

要将一个XML插入另一个XML,您必须与javax.xml API进行对抗。

代码可能是这样的:

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

Document target = builder.parse(new StringBufferInputStream(targetXML));
Element source = builder.parse(new StringBufferInputStream(sourceXML)).getDocumentElement();


target.appendChild(source);

更新2

  

但我不想使用任何java代码。

好吧,如果您的目标XML可以表示为模板字符串,那么您可以在replaceFirst()中使用<transformer>标准expression

String targetXml =&#34;&#34 ;;

<transformer expression="'<?xml version="1.0" encoding="UTF-8"?>
<PQ>
   <PQContact>
      <hostAddress>10.193.244.136</hostAddress>
      <name>Ashok</name>
      <userId>007</userId>
   </PQContact>
   $workflowStatusCommentToken$
</PQ>'.replaceFirst('\\$workflowStatusCommentToken\\$', headers.originalXml)"/>