我正在使用Mule Studio(Mule 3.2.1CE)來配置只調用遠程Web服務的代理服務。一切工作正常與調用和獲得正確的響應(使用soapUI)。我想記錄在ESB中收到的SOAP消息。我得到了CXF組件所期望的DepthXMLStreamReader消息,但是當我使用XMLStreamReader對象的next()方法時,我正面臨一個奇怪的行爲。下面是我的代碼使用方法:XMLStreamReader解析器影響MuleEventContext
public Object onCall(MuleEventContext context) throws Exception {
MuleMessage message = context.getMessage();
DepthXMLStreamReader streamReader = new DepthXMLStreamReader((XMLStreamReader) message.getPayload());
while(streamReader.hasNext()){
streamReader.next();
if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT)
{
System.out.println(streamReader.getLocalName());
}
}
return context.getMessageAsString();
上面的代碼工作,並打印XML元素,但我得到以下錯誤算賬:
org.apache.cxf.interceptor.Fault: Failed to route event via endpoint: DefaultOutboundEndpoint{endpointUri=..., connector=HttpConnector
...
Caused by: org.mule.transport.http.HttpResponseException: Internal Server Error, code: 500
我嘗試使用StaxUtils.nextEvent和StaxUtils.toNextElement,但沒有結果不同。我想知道爲什麼通過next()方法解析XML會影響mule上下文。如果我使用System.out.println(context.getMessageAsString());在返回語句之前它會打印「[Messaage無法轉換爲字符串]」,但它在上面的代碼中的while語句之前有效。
這裏是我的騾子配置:
<flow name="wsFlow1" doc:name="wsFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8090" contentType="text/xml" doc:name="HTTP"/>
<cxf:proxy-service bindingId="..." namespace="http://..." service="..." payload="body" wsdlLocation="..." enableMuleSoapHeaders="false" doc:name="SOAP"/>
<component class="mule.ws.SoapLogging" doc:name="Java"/>
<http:outbound-endpoint exchange-pattern="request-response" address="http://..." contentType="text/xml" doc:name="HTTP"/>
</flow>
感謝