我正在尝试了解在与多个端点通信的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>
答案 0 :(得分:1)
对于您的情况,我只看到Content Enricher模式,它实现为
Spring Integration中的<enricher>
。
那么,您需要将您的XML请求解组到POJO,例如使用JAXB。配置多个<enricher>
并将下游回复映射到POJO的相应属性。
最后,在所有阶段之后,您应该将最终的POJO封送回XML并通过SOAP作为响应发送。
样本为here。