我编写一个查询SOAP和REST WS的Spring Integration路由,并以某种方式聚合结果。我使用bean作为有效负载来收集有用的信息,两个有效负载丰富程序用于查询Web服务,最后使用变换器来构建结果。
现在我的问题是,如果系统没有关于我正在查询的实体的信息,REST WS会返回(按设计)HttpStatus.NOT_FOUND(404)。这需要被视为名义用例。 Spring Integration默认将此视为错误并将其解除。我需要正确处理这个案例,在我的bean或类似的东西中存储null(我可以处理它)并继续。
所以我尝试将错误处理程序添加到出站网关但无法使其工作。如果我告诉这不是一个错误(覆盖hasError()),那么SI会尝试解组响应的主体,这显然不起作用;如果我覆盖handleError()并且什么也不做,那就相同。
也许我没有朝着正确的方向前进,但我错过了一个更好的主意,所以......任何帮助都会得到感激之情。
答案 0 :(得分:1)
您可以将<int-http:outbound-gateway>
ExpressionEvaluatingRequestHandlerAdvice
添加为嵌套<request-handler-advice-chain>
并使用其选项:onFailureExpression
,returnFailureExpressionResult = true
。您也可以考虑使用failureChannel
。
这样你就可以捕获404 NOT FOUND
异常并返回你认为合适的补偿结果。
您可以在Reference Manual找到更多信息,此外还有一个sample项目。