Créer une exception Soap

Créer une exception Soap - Java - Programmation

Marsh Posté le 18-08-2010 à 12:03:32    

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 :
 

Code :
  1. <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  2.    <env:Header>
  3.       <t:trackingHeader xmlns:t="http://............." xmlns:date="http://exslt.org/dates-and-times">
  4.          <t:requestId>ebb8030e-e634-478e-b40d-d47870e2a39e</t:requestId>
  5.          <t:timestamp>2010-07-28T09:53:38+02:00</t:timestamp>
  6.       </t:trackingHeader>
  7.    </env:Header>
  8.    <env:Body>
  9.       <env:Fault xmlns:ns="http://...........">
  10.          <faultcode>Mon code</faultcode>
  11.          <faultstring>Ma string</faultstring>
  12.          <detail>
  13.             <reason>Ma raison</reason>
  14.          </detail>
  15.       </env:Fault>
  16.    </env:Body>
  17. </env:Envelope>


 
Comment faire pour créer ce genre d'exception ?
J'ai tenté de créer une AxisFault de la manière suivante :
 

Code :
  1. AxisFault fault = new AxisFault("mon message" );
  2. fault.setFaultCodeAsString("Mon code" );
  3. fault.setFaultDetailString("Mes détails" );


 
mais voici ce que j'obtiens en testant avec SoapUI :
 

Code :
  1. <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">
  2.    <soapenv:Body>
  3.       <soapenv:Fault>
  4.          <faultcode>soapenv:Server.userException</faultcode>
  5.          <faultstring>java.rmi.RemoteException: mon message</faultstring>
  6.          <detail>
  7.             <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">I20080682</ns1:hostname>
  8.          </detail>
  9.       </soapenv:Fault>
  10.    </soapenv:Body>
  11. </soapenv:Envelope>


 
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 ?
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 :
  1. <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  2.    <soap:Body>
  3.       <soap:Fault>
  4.          <faultcode>soap:Server</faultcode>
  5.          <faultstring>code05</faultstring>
  6.          <detail>
  7.             <ns3:monException xmlns="http://...../types" xmlns:ns2="http://..../G1" xmlns:ns3="http://..../G1/fault">
  8.                <ns3:message>Erreur de format du champ</ns3:message>
  9.             </ns3:monException>
  10.          </detail>
  11.       </soap:Fault>
  12.    </soap:Body>
  13. </soap:Envelope>

Reply

Marsh Posté le 18-08-2010 à 12:03:32   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed