java - 在Mule中,我如何在不改变原始输出流的情况下记录http响应

标签 java mule

我的 Mule 将对我的客户端进行 HTTP 调用和响应,我想记录 HTTP 调用结果,例如状态代码和响应正文。起初我记录了 #[payload],但它是一个流,我知道 可以工作,但我不想更改响应,所以我将转换器放入丰富器中,但是结果还是变了,为什么?

我的代码:

<http:outbound-endpoint exchange-pattern="request-response" address="http://#[payload]" doc:name="Call Service in Pool"/>
<enricher source="#[payload]" target="#[flowVars['responseBody']]" doc:name="Message Enricher">
    <object-to-string-transformer doc:name="Object to String"/>
</enricher>
<logger level="INFO" doc:name="Log Response" message="response, http status: #[message.inboundProperties['http.status']], body: #[flowVars['responseBody']], org: #[payload]"/>

日志输出:

org.mule.api.processor.LoggerMessageProcessor: response, http status: 200, body: {"groupId":"group1", "formParam":"null"}, org: org.mule.transport.http.ReleasingInputStream@51dfd9b8

客户端没有收到正文:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 24 Aug 2013 10:55:49 +0800
Server: Mule EE Core Extensions/3.4.0
X-MULE_SESSION: rO0ABXNyACNvcmcubXVsZS5zZXNzaW9uLkRlZmF1bHRNdWxlU2Vzc2lvbi7rdtEW7GGKAwAEWgAFdmFsaWRMAA1mbG93Q29uc3RydWN0dAAmTG9yZy9tdWxlL2FwaS9jb25zdHJ1Y3QvRmxvd0NvbnN0cnVjdDtMAAJpZHQAEkxqYXZhL2xhbmcvU3RyaW5nO0wAD3NlY3VyaXR5Q29udGV4dHQAJ0xvcmcvbXVsZS9hcGkvc2VjdXJpdHkvU2VjdXJpdHlDb250ZXh0O3hwAXB0ACRhZWFhODZjOS0wYzY4LTExZTMtYjhkZS0xNTQzZDIwNjFkNWZwc3IAJWphdmEudXRpbC5Db2xsZWN0aW9ucyRTeW5jaHJvbml6ZWRNYXAbc/kJS0s5ewMAAkwAAW10AA9MamF2YS91dGlsL01hcDtMAAVtdXRleHQAEkxqYXZhL2xhbmcvT2JqZWN0O3hwc3IAJG9yZy5tdWxlLnV0aWwuQ2FzZUluc2Vuc2l0aXZlSGFzaE1hcJ3R2e9nRc4AAwAAeHB3DD9AAAAAAAAQAAAAAHhxAH4ACXh4
X-MULE_ENCODING: UTF-8
Transfer-Encoding: chunked
Connection: close

最佳答案

这是流的标准行为:一旦您消耗了它,它就会被消耗,除非您重置它,否则它会保持消耗状态,并且没有更多可用数据。

您可以尝试在记录之前使用 mark() ,然后在记录之后使用 reset() (在 MEL 表达式组件中),但不能保证 Mule 生成的实际流实现支持这些方法。

阅读InputStream JavaDoc了解更多信息。

关于java - 在Mule中,我如何在不改变原始输出流的情况下记录http响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414478/

相关文章:

java - 单元测试不适用于 XSLT 变压器

java - Spring Kafka 生产者不能异步工作

java - 使用 MapReduce 在 couchbase 中动态 View

java - 为什么在这种情况下调用父类方法而不是子类方法?

error-handling - 为什么在 mulesoft "on Error Propagate"中重新抛出相同的错误?

unit-testing - 模拟外部 REST API 调用时 MUnit 测试失败

java - Apache POI XSLF 删除幻灯片上文本的阴影

java.lang.NoClassDefFoundError : org/springframework/core/ResolvableType

mule - 为什么使用 Maven 构建 Mule Studio 3.4 失败或无限期挂起

sockets - ule子上的AMQPConnector-SocketException : Too many open files