Bonjour
Je développe une appli de test qui va servir à simuler le comportement d'un service distant (S1). Les échanges se font par web service.
J'ai donc le WSDL de mon service distant S1 qui décrit le format des Request, des Response et des Exceptions qui peuvent transiter.
A partir de ça j'ai pu développer mon simulateur et ça fonctionne bien.
Cependant, le service distant S1 n'est pas accédé directement, les échanges passe par une appli proxy (P1) qui se charge de faire transiter les requêtes et les réponses.
Le problème c'est que ce proxy P1 peut lui aussi retourner des erreurs en cas d'erreur de connexion à S1 par exemple.
Ce sont ces erreurs que je n'arrive pas à simuler.
Voici le format de l'erreur que je dois recréer en plus des erreurs de S1 décrites dans le WSDL :
Comment faire pour créer ce genre d'exception ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header> <t:trackingHeader xmlns:t="http://............." xmlns:date="http://exslt.org/dates-and-times"> <t:requestId>ebb8030e-e634-478e-b40d-d47870e2a39e</t:requestId> <t:timestamp>2010-07-28T09:53:38+02:00</t:timestamp> </t:trackingHeader> </env:Header> <env:Body> <env:Fault xmlns:ns="http://..........."> <faultcode>Mon code</faultcode> <faultstring>Ma string</faultstring> <detail> <reason>Ma raison</reason> </detail> </env:Fault> </env:Body> </env:Envelope>
J'ai tenté de créer une AxisFault de la manière suivante :
mais voici ce que j'obtiens en testant avec SoapUI :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 AxisFault fault = new AxisFault("mon message"); fault.setFaultCodeAsString("Mon code"); fault.setFaultDetailString("Mes détails");
On voit que le faultCode et le faultString ne sont pas correct. Faut-il plutôt hériter de AxisFault ? Quelles méthodes sont à redéfinir dans ce cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.userException</faultcode> <faultstring>java.rmi.RemoteException: mon message</faultstring> <detail> <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">I20080682</ns1:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
Je ne sais pas non plus comment renseigner la balise "detail" pour lui ajouter une "reason".
Merci d'avance pour votre aide.
Pour info, voici le format des erreurs retournées par S1 (qui fonctionne bien car l'exception "monException" de la balise detail est décrite dans le WSDL) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>code05</faultstring> <detail> <ns3:monException xmlns="http://...../types" xmlns:ns2="http://..../G1" xmlns:ns3="http://..../G1/fault"> <ns3:message>Erreur de format du champ</ns3:message> </ns3:monException> </detail> </soap:Fault> </soap:Body> </soap:Envelope>
Partager