IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XMLRAD Discussion :

Ne pas formater une erreur


Sujet :

XMLRAD

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 92
    Points : 55
    Points
    55
    Par défaut Ne pas formater une erreur
    Bonjour,

    J'ai écrit du code en Delphi dans l'événement BeforeXMLService, lorsque ce code génère une Exception j'obtiens une page formatée par XMLRad "Une erreur est intervenue, elle est detaillée ci-dessous ...", comment faire pour avoir une vrai page d'erreur car j'ai une application qui appelle cette fonction et qui teste le résultat de l'exécution or si ce code génère une erreur je dois récupérer un code 404 et pas la page formatée.

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut Exception récupérée en XML
    Est-ce que tu ne préféres pas récupérer plutôt du XML ?
    Si c'est le cas, tu peux ajouter ce champ dans le Context en cas d'exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      try
        ... // Code pouvant générer une exception
      except
        Context.Values['XMLC_OutputFormat'] := 'XML';
      end;
    Ca te permettra de récupérer l'erreur au format XML, mais le header de la réponse HTTP indiquera toujours 200 (success) et non 404 (not found)...
    En l'occurence, l'action a bien été trouvée et la DLL a répondu, signe que ce n'est pas une erreur HTTP, mais une erreur applicative. Le status code 200 est donc approprié ici.

    Je ne crois pas que le Framework permette de jouer avec le status code http retourné au client. Si quelqu'un a une idée à ce sujet...

    Pour gérer l'exception depuis ton application cliente, tu peux utiliser XMLCursor, comme suit :

    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
    19
    20
    21
    22
    23
     
      uses
        STDXML_TLB, XMLCursor, 
        XMLHTTP; // pour avoir accès à SimplePost
    ...
     
    var
      Cursor: IXMLCursor;
      ExceptionMsg: WideString;
      Response: WideString;
    begin
      Response := SimplePost(URL);
      Cursor := TXMLCursor.Create;
      try
        Cursor.LoadXML(Response);
        ExceptionMsg := Cursor.GetValue('/document/XMLC_Params/XMLC_Exception');
      except
        // Reponse pas compatible XML, donc pas une erreur à priori
        Abort;
      end;
      if ExceptionMsg <> '' then
        raise Exception.Create('erreur pour joindre le serveur : ' + ExceptionMsg);
    end;
    Tu récupères ainsi le message d'exception levé par le serveur directement sur ton poste client. Attention si la réponse n'est pas du XML, XMLCursor lève dans ce cas lui-même une exception (d'où le Abort après le LoadXML).

    Dans les options du projet, il faut cocher "Assignable Typed Constant" à l'onglet "Compiler".

    Attention ! On ne fait pas de Free sur un XMLCursor : ca fonctionne avec des compteurs de références, donc pas de probleme de libération de ce coté là. (pas de .Free parce que XMLCursor est un pointeur sur un objet du DOM détenu par le parser XML).

    Peut-être que ca répond à ta question ou que ca te permet de voir le probleme sous un angle différent ?

    Bonne soirée
    Nicolas

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut exeption au format SOAP
    Pour info, on peut aussi passer dans le Context

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Context.Values['XMLC_OutputFormat'] := 'SOAP';
    Ca renvoie l'exception dans une grappe XML compatible SOAP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
          <SOAP-ENV:faultcode>SOAP-ENV:Server</SOAP-ENV:faultcode> 
          <SOAP-ENV:faultstring>Component "Test" not found.</SOAP-ENV:faultstring> 
        </SOAP-ENV:Fault>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    Le message d'exception se trouve alors dans /Envelope/Body/Fault/faultstring
    Nicolas

Discussions similaires

  1. MiKTex 2.8 MetaFont ne s'arrête pas sur une erreur
    Par nibroc dans le forum Distributions
    Réponses: 1
    Dernier message: 14/09/2010, 13h21
  2. [HTML][CSS] W3C--> Je n'arrive pas à résoudre une erreur
    Par gwendy dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/12/2005, 23h50
  3. [W3C] [Débutant] Une erreur pas vraiment clair !
    Par almisuifre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/10/2005, 06h35
  4. [Format Date] erreur sur insertion d'une date
    Par philobedo dans le forum SQL
    Réponses: 4
    Dernier message: 14/06/2005, 10h41
  5. [procédure PG] Une erreur mystérieuse...ou pas
    Par doohan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/07/2003, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo