私は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を解析するのがなぜノーコンテキストに影響するのだろうかと思います。私がSystem.out.println(context.getMessageAsString())を使用している場合。 return文の前に「[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>
おかげ