Ich benutze Mule Studio (Mule 3.2.1CE), um einen Proxy-Dienst zu konfigurieren, der einfach einen Remote-Web-Service aufruft. Alles funktioniert gut mit dem Aufruf und der richtigen Antwort (mit soapUI). Ich möchte SOAP-Nachrichten protokollieren, die im ESB empfangen werden. Ich erhalte eine DepthXMLStreamReader-Nachricht wie von der CXF-Komponente erwartet, aber ich habe ein seltsames Verhalten, wenn ich die next() - Methode des XMLStreamReader-Objekts verwende. Hier ist der Code, die ich benutze:XMLStreamReader-Parser beeinflusst 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();
Der obige Code funktioniert und druckt XML-Elemente, aber ich bekomme die folgende Fehlermeldung danach:
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
ich versucht, mit StaxUtils.nextEvent und StaxUtils.toNextElement, aber keine Unterschied im Ergebnis. Ich frage mich, warum das Analysieren von XML durch die Methode next() den Kontext von mule beeinflusst. Wenn ich System.out.println (context.getMessageAsString()) verwende; vor der return-Anweisung wird "[messaage konnte nicht in string umgewandelt werden]" gedruckt, aber es funktioniert vor while-Anweisung im obigen Code.
Hier ist mein mule config:
<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>
Dank