2013-08-24 1 views
1

My Mule은 HTTP 호출과 클라이언트에 대한 응답을 할 것이고, 상태 코드와 응답 본문과 같은 HTTP 호출 결과를 기록하고 싶습니다. 처음에는 # [페이로드]를 기록하지만 스트림이기 때문에 객체 - 문자열 - 변압기/>이 작동하지만 응답을 변경하고 싶지 않기 때문에 변압기를보다 풍부하게 넣을 수는 있지만 결과는 여전히 바뀌고, 왜?Mule에서 원래의 출력 스트림을 변경하지 않고 HTTP 응답을 어떻게 기록 할 수 있습니까?

내 코드 :

<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: [email protected] 

클라이언트는 시체를 수신하지 :

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 

답변

2

이 스트림의 표준 동작입니다 : 당신이 그것을 소비하면, 그건 소비하고 다시 설정하지 않으면 더 이상 사용할 수있는 데이터가 없어 소비됩니다.

로깅하기 전에 reset() 후에 (MEL 표현식 구성 요소에서) 시도해 볼 수는 있지만 Mule에서 생성 한 실제 스트림 구현이 이러한 메소드를 지원한다는 보장은 없습니다.

자세한 내용은 InputStream JavaDoc을 읽으십시오.

+0

감사 데이빗. 그러나 스트림을 기록 할 때 스트림이있는 것처럼 보입니다. 클라이언트에게 응답을 보내면 잃어 버리게됩니다. – jamee

+0

스트림이 존재하지 않는다고 말한 적이 없으며, 내용을 기록하면 스트림을 사용할 수 없습니다. 즉, 로그 할 수 없습니다. 스트림이'mark()'와'reset()'을 지원하지 않는 한 응답을 위해 사용한다. –

+0

OK, 로그와 응답을 모두 수행하기가 어렵습니다. – jamee

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;]"

관련 문제