如何在与SI流中的多个端点交互期间管理有效负载

时间:2016-08-24 01:40:32

标签: spring-integration

我正在尝试了解在与多个端点通信的SI流中处理有效负载的可用选项。

我使用 int-ws:inbound-gateway 定义了一个Web服务入口点。它接收带有以下有效负载的SOAP消息:

SOAP请求

Connection: close

SI流然后提取EmpId并将其作为字符串有效负载传递给JMS队列。 JMS端点使用Employee Name作为字符串类型进行回复。然后,SI流将员工姓名映射到响应消息中的元素 EmpName

SOAP响应

<soapenv:Envelope>
  <soapenv:Header/>
  <soapenv:Body>
    <emp:Employee>
     <emp:EmpId>sf</emp:EmpId>
     <emp:EmpName></emp:EmpName>
    </emp:Employee>
   </soapenv:Body>
</soapenv:Envelope>

为了实现这个用例,我使用了 Claim Check 模式。还使用标头来存储来自JMS端点的回复。

如果您考虑到SI流可以与JMS端点之外的其他端点(每个端点都有自己的数据交换格式)进行通信,那么建议任何其他方法将会很有帮助。此外,我还想避免使用标头来存储JMS回复有效负载。

配置文件

<soapenv:Envelope>
  <soapenv:Header/>
  <soapenv:Body>
    <emp:Employee>
     <emp:EmpId>sf</emp:EmpId>
     <emp:EmpName>Spring Framework</emp:EmpName>
    </emp:Employee>
   </soapenv:Body>
</soapenv:Envelope>

1 个答案:

答案 0 :(得分:1)

对于您的情况,我只看到Content Enricher模式,它实现为 Spring Integration中的<enricher>

那么,您需要将您的XML请求解组到POJO,例如使用JAXB。配置多个<enricher>并将下游回复映射到POJO的相应属性。

最后,在所有阶段之后,您应该将最终的POJO封送回XML并通过SOAP作为响应发送。

样本为here