Axis2 Fault - Wie im Client auslesen?

Sleepwalker

Mitglied
Hi,

ich weiß nicht, wie ich das Problem anders benennen sollte. Es geht um folgendes:

Ich spreche einen Web Service über Axis2 mit RAMPart an. Das Databinding ist auf xmlbeans gesetzt und der Aufruf ist synchron. RAMPart funktioniert soweit. Der Aufruf des Web Services ist wie folgt:
Java:
...
FooResponseDocument response = stub.putMessage(putMessageDocument);
catch (AxisFault ex) {
    System.err.println("AxisFault!");
    System.err.println("Message: " + ex.getMessage());
    System.err.println("Fault Code: " + ex.getFaultCode());
    System.err.println("Details: " + ex.getDetail());     
    System.err.println(ex.getFaultNode());
    System.err.println(ex.getReason());
    if (ex.getFaultMessageContext() != null) {         
        System.err.println("Envelope: " + ex.getFaultMessageContext().getEnvelope().toString());
    }
}

Ich bekomme nun aber einen AxisFault zurück.
Mein Problem ist, dass ich nicht an die Nachricht selbst herankomme. Ich möchte den Quellcode des Stubs nicht verändern, sondern das Objekt in der Hand haben und ausgeben können.

Ich bekomme mit dem obigen Code aber nur das hier als Ausgabe:
Code:
Message: A Soap envelope with fault action -http://www.w3.org/2005/08/addressing/soap/fault has been received without a fault element in the soap body
Fault Code: null
org.apache.axis2.AxisFault: A Soap envelope with fault action -http://www.w3.org/2005/08/addressing/soap/fault has been received without a fault element in the soap body
Details: null
null
A Soap envelope with fault action -http://www.w3.org/2005/08/addressing/soap/fault has been received without a fault element in the soap body

In der Antwort-Nachricht selbst steht aber angeblich noch mehr drin (sagt der Entwickler beim Testen mit meiner Nachricht):
[XML]Verschlüsselungskram
...
</soap:Header>
<soapenv:Body wsu:Id="foo" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soapenv:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<faultcode>soapenv:Client</faultcode>
<faultstring>Invaild Foo</faultstring>
<detail>
<ErrorMessage>Yout foo is not valid</ErrorMessage>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soap:Envelope>[/XML]

Wie komme ich da ran? Auf den Web Service habe ich keinerlei Einfluss. Habe ich irgendwo etwas vergessen?
Vielen Dank im Voraus.

Gruß
 
Zuletzt bearbeitet:

Keo

Mitglied
In deiner Methode "putMessage" müsste in der WSDL ein spezifisches Fault definiert worden sein. Statt den Fehler mit AxisFault abzufangen, würde ich diesen definierten Fault abfangen. Wenn Du dir nicht sicher bist, ob diese Fehlerinformation des Entwicklers erhälst, könntest Du mittels SOAPUI den Nachrichteninhalt prüfen. Die Fehlermeldung "...has been received without a fault element in the soap body" sagt eigentlich schon aus, dass Du kein Fault bekommst.
 

Sleepwalker

Mitglied
Hi,

wünsche ein frohes, neues Jahr.
Ich habe keine Faults in der WSDL definiert, weil mir die so zur Verfügung gestellt wurde. Habe keinerlei Zugriff auf den Web Service. Ich nehme mal an, dass ich nicht einfach die Faults der Testcases für meinen Client da reinschreiben kann (wüsste leider auch gar nicht, wie).
Sogar wenn ich einen HTTP 500 Fehler zurück bekomme (weiterer Testcase, in TCPMon gut zu sehen), habe ich die gleiche Fehlermeldung wie im obigen Post.

SOAPUI hilft mir nicht viel, weil ich RAMPart zur Verschlüsselung nutze. Alles, was ich in TCPMon sehe, ist die verschlüsselte Antwort. Ich nehme an, mit SOAPUI wäre es das gleiche.

Wenn ich in den Stub reinschreibe, dass er die Nachricht ausgeben soll, dann kommt er im Fehlerfall gar nicht erst soweit und wirft schon vorher den AxisFault.

Gruß
 

Keo

Mitglied
Wenn der WebService über eine SSL-Verbindung abgesichert ist, kannst du auch mit SOAPUI den Keystore angeben und somit auch den Nachrichteninhalt ansehen.

In wsdl müsste in der Response-Methode eine Struktur "Fault" mit den Elemten faultcode, faultstring und detail definiert worden sein. In deiner generierten Skeleton-Klasse könntest du auch prüfen, welche Exception-Klasse in der webservice-Methode geworfen wird. Wird dort ein AxisFault geworfen, wurde in der wsdl kein anwendungspezifisches Fault definiert und der folgende Nachrichteninhalt könnte mit deinen generierten Sourcen nicht gelesen werden.

[XML]<soapenv:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<faultcode>soapenv:Client</faultcode>
<faultstring>Invaild Foo</faultstring>
<detail>
<ErrorMessage>Yout foo is not valid</ErrorMessage>
</detail>
[/XML]
 

Sleepwalker

Mitglied
In der WSDL ist leider kein Fault zu finden.

Wie kann ich denn mit SOAPUI die Nachrichten abfangen und entschlüsseln? Ich habe das Tool noch nie benutzt und komme damit gar nicht zu Rande. Ist das wie TCPMon ein "Proxy" oder horcht es wie Wireshark? Was muss ich denn dafür alles machen?! Den KeyStore in den Einstellungen einfügen geht, aber dann hörts auch schon auf.
 

Keo

Mitglied
SoapUI kann sowohl ein Client als auch ein Webservice simulieren. Da TCPMon mit integriert ist, kannst du mit dem Tool auch Nachrichten mitschneiden. Du gibst in den Einstellungen den Keystore und Passwort an, erstellst ein neues Projekt und importierst die wsdl-Datei hinzu. Danach kannst du die Parameter der Request-Methoden angeben und ggf. im Header die Basic Authentification-Informationen. Dann die Endpoint-Adresse übergeben und auf Ausführen drücken.
Bevor ich Client-Funktionalität implementiere, nutze ich immer zuerst dieses Tool um zu analysieren wie sich der Webservice "verhält"
 

Sleepwalker

Mitglied
Hi,

ich hatte immer noch keine Zeit für SoapUI, aber ich habe eine mögliche Ursache meines Problems:

1. Die Nachrichten sind verschlüsselt
2. Die Fehlermeldung kommt auch verschlüsselt bei mir an
3. Der SOAP Header enthält die "action" eines Faults (im Klartext)
4. Axis2 oder RAMPart versuchen anscheinend den Body der Nachricht auch im Klartext zu lesen, weil im Header ja steht, dass es ein Fault sei. Der Body existiert natürlich so nicht, wenn noch nichts entschlüsselt ist


Problem: Wie bekomme ich eine "erzwungene" Entschlüsselung eines Faults hin?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Axis2 Dateien lesen und schreiben - Pfade SOA 1
L [AXIS2] OutOfMemory Exception bei Übertragung von größerer Datei via Webservice SOA 3
C SSL in Tomcat mit Axis2 SOA 4
K Axis2 SOAP Logging via Client SOA 2
T Verwendung von Eclipse Projekten im Axis2 Webservice SOA 8
S AXIS2 Webservice: Umgang mit komplexen Datentypen SOA 5
S Axis2 / Rampart - XML-Datei verschlüsseln & versenden SOA 14
J Axis2 und wiederverwenden der Serverobjekte SOA 3
B Axis2 Cipher Suite und Protocol einschränken SOA 2
H Axis2 dynamische URL zu WSDL SOA 2
H Axis2: XML<->DB SOA 2
T Axis2 Problem: leeres Array? SOA 1
S Axis2 MustUnderstand problem mit Boolean SOA 9
F Axis2 große Strings streamen SOA 3
A Axis2 oder 1 Ntlm Authentification SOA 5
J Axis2 und Tomcat SOA 4
T Hat AXIS2 noch Zukunft und wie REST implementieren? SOA 6
R AXIS2 u. Eclipse (Galileo) Fehler bei Serverstart SOA 2
G Stub generieren (WSDL=Axis1.4) (WSDL2JAVA=Axis2) SOA 11
H Axis2 Deployment SOA 5
R SOAP Nachrichtenaustausch zwischen Axis2-WSs SOA 5
S Exception in axis2 java2wsdl ant Task SOA 1
N Request-XML-String -> AXIS2 -> WSDL-Check -> Respon SOA 2
G Axis2 Properties SOA 6
N Axis2: Binärdateien übertragen mit JWS/RPC SOA 2
M Axis2 vs XFire vs JAX-WS SOA 4
N Axis2 - hibernate.cfg.xml - wohin? SOA 6
K Axis2 Service / deploying to Tomcat 5.5.25 / web.xml SOA 5
F Axis2 und Listen SOA 3
I Axis2 mit SSL verschlüsseln SOA 4
N Axis2 - Cliententwicklung SOA 3
G axis2 rampart 1.3 SOA 1
K Webservices mit Axis2 SOA 2
OnDemand REST Client Aufbau SOA 7
N Web Services Client aus externen WebService erstellen SOA 4
D POST-Request mit Chrome Rest Client wirft Fehler : HTTP Status 415 - Cannot consume content type SOA 3
M Web Services Client erstellen: Grundlegende Starthilfe SOA 2
G Apache-CXF Client am public key erkennen SOA 0
F Client Problem gegen Webservice SOA 3
J REST mit java client und php server SOA 22
M Webservice Client erstellen und XML Request senden SOA 3
G WebService, was darf der Client alles sehen SOA 19
G OpenLigaDB Webservice Client SOA 4
N JAX-WS Client Timeout Problem SOA 4
H WS-Client geht nur wenn JBoss läuft SOA 4
S Webservice-Client-Klasse gibt immer null zurück SOA 3
R Wie verschicke ich serverseitig eine Nachricht an client SOA 2
R XML verschicken mit Webservice Server Client SOA 2
boxi Axis1 Client: loggen der requests und Response SOA 8

Ähnliche Java Themen

Neue Themen


Oben