Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    janvier 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 5
    Points : 2
    Points
    2

    Par défaut Intercepteurs CXF - récupération objet unmarshallé

    Bonjour à tous

    je suis confronté à un soucis, que je n'arrive pas à résoudre :
    Dans le cadre d'une application WS SOAP, je tente de mettre en place un système de log des données entrantes, en utilisant les intercepteurs CXF d'apache.
    En clair, je souhaite me positionner après la phase d'unmarshalling, récupérer mon objet java, et ainsi pouvoir logger son contenu.

    Mon problème est le suivant :

    Via le code suivant, je me suis positionné en phase POST_LOGICAL, donc d'après ce que j'ai compris, après l'opération d'unmarshalling

    Code :
    1
    2
    3
    public TestInterceptor() {
    		super(Phase.POST_LOGICAL );
    	}
    Ensuite, dans la méthode handle que j'override, je souhaite récupérer mon objet, via, d'après ce que j'ai cru voir, le code suivant :

    Code :
    1
    2
    3
    4
     
    public void handleMessage(SoapMessage arg0) throws Fault {
    MonObjet monObjet = arg0.getContent(MonObjet.class);
    }
    Or... null.

    En passant en debug, j'ai vu qu'effectivement, l'attribut contents de arg0 est null. Par contre, un attribut nommé defaultContents contient bien mon objet comme je le souhaite, mais je ne trouve pas comment le getter...

    Help, si quelqu'un a une solution, ça serait un bonheur

    Merci d'avance.

  2. #2
    Invité de passage
    Inscrit en
    janvier 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 5
    Points : 2
    Points
    2

    Par défaut

    Bon, j'ai un peu avancé, je suis passé à la version 2.6.2 de CXF, ce qui me permet d'avoir le contents renseigné avec mon objet.

    Mais je n'arrive toujours pas à le récupérer ...

    Personne n'a jamais été confronté à ce soucis ?

  3. #3
    Invité de passage
    Inscrit en
    janvier 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 5
    Points : 2
    Points
    2

    Par défaut

    Bon ben je me répond à moi même :

    Pour récupérer les objets unmarshallés, il faut faire un getContent sur la classe java.util.List. La liste obtenue contient l'objet tant désiré

    ci dessous le code (en phase POST_LOGICAL toujours) :

    Code :
    1
    2
    3
    4
    5
    6
    public void handleMessage(SoapMessage arg0) throws Fault {
     
    		List list = arg0.getContent(List.class);
    		MonObjet monObjet = (MonObjet ) list.get(0);
     
    	}
    Si ça peut servir, voici le petit texte que j'ai trouvé qui m'a aidé :

    You can examine which formats are available using message. getContentFormats() and obtain
    message content using: message.getContent(Class<?>).
    If JAXB data binding is used, message normally contains following formats after UNMARSHAL
    phase for incoming chain:
    1) javax.xml.stream.XMLStreamReader (message content as XML reader)
    2) java.util.List (message content as JAXB objects)
    3) java.io.InputStream (message content as InputStream)
    4) org.w3c.dom.Node (message content as DOM)

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •