1

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

我的代码:

<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
4

2 回答 2

2

这是流的标准行为:一旦你消费了它,它就会被消费,除非你重置它,否则它会一直被消费,没有更多可用的数据。

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

阅读InputStream JavaDoc以获得更多信息。

于 2013-08-24T16:43:45.693 回答
0

Mule 允许您在 MEL 表达式中使用 Java。你可以尝试这样的事情:

#[String str = message.payloadAs(java.lang.String); java.io.InputStream ins = new java.io.ByteArrayInputStream(str.getBytes()); message.payload = ins; return str;]"

于 2016-04-19T18:13:12.973 回答