Rohe XML-SOAP-Antwort auf Clientseite mithilfe von ADB-Stubs, die von AXIS2 erstellt wurden, erhalten

8

Ich greife auf einen SOAP-Service mit ADB-Stubs zu, die von AXIS2 erstellt wurden. Ich möchte die rohe XML-Antwort eines beliebigen Achsenfehlers protokollieren, der vom Dienst zurückgegeben wird. Ich kann diese Fehler als "ServiceError" abfangen. Ich finde jedoch keinen Weg, das rohe XML zu retreißen (siehe Beispiel unten).

Ich habe einen Weg gefunden, auf die rohe XML-Anfrage / -Antwort für die normale Verarbeitung zuzugreifen, indem ich getomeelement verwende (siehe Beispiel unten). Dies funktioniert jedoch nicht für Fehler.

Wie bekomme ich den rohen XML-Fehler mit ADB-Stubs?

Beispiel Java-Code:

%Vor%

Beispiel für eine Fehlerantwort, die ich abholen und protokollieren möchte:

%Vor%     
Daniel 29.08.2012, 09:41
quelle

5 Antworten

2

Wie von joergl vorgeschlagen, änderte ich meine ADB-Stubs zu JAX-WS-Einsen mit einem "SOAPHandler", um Anfragen, Antworten und Fehler gemäß der folgenden Beschreibung zu protokollieren: Ссылка

Mein Handler sieht so aus, um das schön formatierte XML mit log4j zu protokollieren:

%Vor%

Zusätzlich wollte ich das rohe XML in meinem Anwendungscode wiederverwenden. Also musste ich diese Daten vom SOAPHandler zurück in meinen Client-Code übertragen. Wie das zu sehen war, war nicht allzu offensichtlich. Mehr zu diesem Problem finden Sie in diesem Artikel: So senden Sie zusätzliche Felder an Soap Handler entlang mit soapMessage?

    
Daniel 03.09.2012, 00:00
quelle
5

Während diese Frage bereits gut beantwortet wurde, musste ich dies früher tun und hatte Schwierigkeiten, eine passende Antwort zu finden, die meinen Beschränkungen entsprach, so dass ich meine eigene für die Nachwelt hinzufüge.

Ich musste dies mit Axis 2 Version 1.4.1 für ein aktuelles Projekt mit JDK 1.4 tun, das von dem, was ich gelesen hatte, nicht von den JAX-WS Stubs unterstützt wurde. Ich endete damit, die ADB-Stubs zu behalten, während ich die Eingabe abpackte, indem ich SoapBuilder mit meiner eigenen Builder-Klasse verpackte, den Eingabestrom kopierte und die Kopie an den SoapBuilder weitergab:

%Vor%

Aus verschiedenen Gründen war die Konfiguration mit axis2.xml problematisch, daher wurde der Wrapper programmgesteuert wie folgt hinzugefügt:

%Vor%

Damit können Antworten mithilfe von responseCaptor.getLastResponse () abgerufen werden, nachdem der Dienst aufgerufen wurde.

    
Taufiq 26.09.2012 07:11
quelle
5

Unten ist, was Sie wahrscheinlich suchen, yourStub ist das, was Sie über wsdl2java generiert haben, und verwenden Sie die unteren Zeilen, nachdem Sie Ihre Anfrage gestellt haben. Die Nachricht wird auf lastOperation gesetzt und sendet sie, wenn Sie den eigentlichen Anruf tätigen:

%Vor%

Ich hoffe, das war hilfreich.

    
Ducane 03.01.2014 22:27
quelle
2

Bezieht sich auf Ducanes Antwort:

%Vor%

schlägt mit einer Ausnahme com.ctc.wstx.exc.WstxIOException und der folgenden Meldung fehl: Versuchte Leseoperation bei geschlossenem Stream .

    
dayer 06.02.2014 15:44
quelle
0

Für Axis2 diejenigen, die nicht den Luxus haben, die Implementierung zu ändern / oder JAS-WS nicht für xyz-Gründe verwenden zu wollen,

Found @ Ducane ist nützlich

%Vor%

Wie in @ dayers Antwort vorgeschlagen

%Vor%      

schlägt mit einer com.ctc.wstx.exc.WstxIOException-Ausnahme und der folgenden Meldung fehl: & gt; Versuch, den geschlossenen Datenstrom zu lesen.

Nicht sicher, was mit "In" Message Lable passiert,

Aber bei der Suche wurde folgendes JIRA-Ticket Ссылка gefunden, das auf Ссылка Und in der Diskussion eine der WA gefunden, um dieses Problem mit dem folgenden Code zu lösen, kann ich abhören Antwortnachricht für die soapRequest.

%Vor%

Wie hier ist MessageContextListner Argument-definierte anonyme innere Klassen es wird Zugriff auf alle einschließenden Variablen haben, Also habe ich gerade eine String-Klassenvariable als latestSoapResponse definiert und gespeicherte Antwort für die weitere Verwendung.

%Vor%

Beachten Sie, dass Sie den Listener vor dem Generieren der Soap-Anforderung hinzufügen müssen. und Request MessageContext wird nur verfügbar sein, sobald Sie eine Soap-Anfrage generieren.

Auch diejenigen, die nur wollen Rohseife Anfrage Antwort zu Debugging-Zwecken kann die Antwort von @Sanker, hier sehen, um die Apache Commons-Protokollierung mit JVM-Argumenten zu aktivieren.

    
Kavan 21.04.2015 19:38
quelle

Tags und Links