什么消息被发送到文件出站网关的回复通道?

What message is sent to the reply channel of a File Outbound Gateway?

我正在从事一个项目,其中 Spring Integration 用作代理,将 HTTP 请求分发到相关服务并将答案发送回客户端。 传入的 HTTP 请求首先被预处理并发送到 HTTP 出站网关。 在返回客户端的途中,HTTP 响应首先使用 文件出站网关 :

写入文件
<!-- write the message payload to ./toto/ and forward it to the http channel -->
<int-file:outbound-gateway request-channel="outputFileChannel"
                           reply-channel="outputHttpChannel"
                           directory="./toto/"
                           filename-generator-expression="headers.file_name + '.json'"
                           mode="REPLACE"/>

<!-- process the message before returning it to the inbound reply channel -->
<int:chain input-channel="routingOutputHttpChannel"
           output-channel="inboundReplyChannel">
    ...
</int:chain>

file outbound gateway 的文档说“在写入文件后,它还会将其作为消息的有效负载发送到回复通道”。 我的理解是文件 contents 是作为消息有效载荷发送的,但根据我的实现,它是作为有效载荷发送的写入文件的名称。 此时文件名与我无关。有没有办法直接发送文件内容? 如果没有,我应该怎么做才能读取写入的文件的内容?插入文件入站通道适配器(似乎有点多余)?

此外,处理未写入文件的正确方法是什么(以便伪造特定的 HTTP 响应)?我的猜测是捕捉 MessageDeliveryException...

FileWritingMessageHandler 将写入的 java.io.File 对象发送回输出通道。这不是该网关负责返回文件内容的责任。通过有效负载中的 File,您可以使用 FileToByteArrayTransformerFileToStringTransformer 作为流中的下一个端点来获取该文件的内容。 XML 配置分别参见 <int-file:file-to-string-transformer><int-file:file-to-bytes-transformer>

要捕获 <int-file:outbound-gateway> 中的异常并处理失败,您可以使用 <request-handler-advice-chain> sub-element 并提供 ExpressionEvaluatingRequestHandlerAdvicehttps://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#message-handler-advice-chain