【发布时间】:2019-05-16 04:03:35
【问题描述】:
我正在努力寻找使用 MarshallingWebServiceInboundGateway 的 Spring Integration 的好例子
我整理了一个使用MarshallingWebServiceInboundGateway 公开订单服务的工作示例,并在调用它时使用MarshallingWebServiceOutboundGateway 使用订单详细信息服务
@ServiceActivator(inputChannel= ChannelNames.ORDER_INVOCATION, outputChannel = ChannelNames.ORDER_DETAIL_REQUEST_BUILDER)
OrderRequest getOrder(OrderRequest orderRequest) {
return orderRequest;
}
这在某种程度上可行,但是我对以下方法的期望是这应该是 Web 服务方法的签名,即返回 OrderResponse 类型。当我通过调用其他 POJO 手动构建 OrderResponse 时,我最初是这样工作的,但是我不知道如何保留原始 Web 服务方法签名并在内部使用 Spring Integration 来实现,即通过调用通道进行转换,然后调用订单明细服务(使用MarshallingWebServiceOutboundGateway)。
如果您知道任何执行此操作的代码示例,请分享。我遇到了这个,但这是直接构建响应(不使用 Spring Integration 通道):https://bitbucket.org/tomask79/spring-boot-webservice-integration/src/master/
【问题讨论】:
-
你的问题不清楚。您需要的一切都是
MarshallingWebServiceInboundGateway@Bean定义和@EnableIntegration。但是,根据您的描述,您似乎拥有一切。请详细说明什么不起作用以及您希望它如何起作用? -
我想保留 Web 服务 API 的签名,即 getOrder 方法应该返回一个 OrderResponse 而不是 OrderRequest... ``` OrderResponse getOrder(OrderRequest orderRequest) { \\return OrderResponse 通过调用 Spring Integration 通道 } ``` 但是,如果我更改方法签名,我无法弄清楚如何返回将返回 OrderResponse 实例的 Spring Integration 通道的输出
-
这还不清楚。您只需拥有这样一个
@ServiceActivator方法并自己创建OrderResponse以供返回。如果这是集成流程的结束,则该对象将成为回复消息的payload。然后MarshallingWebServiceInboundGateway将负责此OrderResponse对象的正确编组。 -
正确,我可以直接构建
OrderResponse,但是我也有一个@Transformer(github.com/yortch/spring-integration-demo/blob/…),它构建了一个OrderDetailRequest,而OrderDetailRequest又用于使用@987654343调用另一个Web服务@。我希望能够通过调用我的 @Transformer\MarshallingWebServiceOutbountGateway 路由来构建OrderResponse对象。有没有办法以编程方式调用@Transformer?
标签: spring-integration spring-integration-dsl