2012-04-11 17 views
0

私は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> 

おかげ

答えて

0

私はこれがMuleEventContextに関連しているとは思わない:

は、ここに私のラバconfigです。

機内ペイロードはXMLStreamReaderです。 このXMLStreamReaderをコンポーネント内で消費してから、そのXMLStreamReaderをString型で返すようにしてください。これは、消費したためにもう使用できません。

は、コンポーネントに次のように試してみてください。

  • コンポーネントからこの文字列戻り
  • そのこの文字列または一部をログ
  • StringにするXMLStreamReaderをシリアライズ。
関連する問題