如何使用 MarshallingWebServiceInboundGateway 公开 SOAP Web 服务(使用 Spring Integration DSL)

How to expose SOAP Web Service using MarshallingWebServiceInboundGateway (with Spring Integration DSL)

我正在努力寻找 Spring Integration 使用 MarshallingWebServiceInboundGateway

的好例子

我整理了一个使用 MarshallingWebServiceInboundGateway 公开订单服务的工作示例,调用时使用 MarshallingWebServiceOutboundGateway

使用订单详细信息服务

https://github.com/yortch/spring-integration-demo/blob/outboundgateway/services/order-flow/src/main/java/com/demo/integration/order/OrderEndpoint.java

    @ServiceActivator(inputChannel= ChannelNames.ORDER_INVOCATION, outputChannel = ChannelNames.ORDER_DETAIL_REQUEST_BUILDER)
    OrderRequest getOrder(OrderRequest orderRequest) {
        return orderRequest;
    }

这在某种程度上是有效的,但是我对下面的方法的期望是这应该是 Web 服务方法的签名,即 return 一个 OrderResponse 类型。当我通过调用其他 POJO 手动构建 OrderResponse 时,我最初是这样工作的,但是我不知道如何保留原始 Web 服务方法签名并在内部使用 Spring 集成实现,即通过调用通道进行转换,然后调用订单详细信息服务(使用 MarshallingWebServiceOutboundGateway)。

如果您知道执行此操作的任何代码示例,请分享。我遇到了这个,但这是直接构建响应(不使用 Spring 集成渠道):https://bitbucket.org/tomask79/spring-boot-webservice-integration/src/master/

听起来有些误解什么是 Spring 集成流程及其端点的工作方式。

  1. Spring 整合中的前三个 class 公民:MessageChannelEndpoint
  2. 端点通过通道连接
  3. 端点使用来自其输入通道的消息
  4. 端点可能会生成消息作为它们计算到输出通道的结果。

因此,在您的情况下,您想要公开一个 SOAP 服务,该服务将在内部调用另一个 SOAP 服务。

您已正确开始 MarshallingWebServiceInboundGateway。我猜,这一个会在它的频道中产生一个 OrderRequest object。它期望在其 replyChannel 中有一个 OrderResponse(在 headers 中是明确的或临时的)。我不确定你的 getOrder() 是做什么的,但如果还有转换器和 MarshallingWebServiceOutboundGateway,你需要考虑将它们全部连接到流程中。因此,我认为您服务的结果应该进入作为变压器输入的通道。这个变压器的输出应该去 MarshallingWebServiceOutboundGateway。这个网关的结果可能会转到其他一些转换器来构建一个 OrderResponse,它可能只是进入 MarshallingWebServiceInboundGateway.

的回复通道

如果这不是您所期望的解释,我会要求您重新表述您的问题...