Précédent   Forum du club des développeurs et IT Pro > Java > Développement Web en Java > Web Services
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/11/2012, 15h24   #1
burlud
Invité de passage
 
Inscription : 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.
burlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 11h10   #2
burlud
Invité de passage
 
Inscription : janvier 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 5
Points : 2
Points : 2
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 ?
burlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 14h31   #3
burlud
Invité de passage
 
Inscription : janvier 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 5
Points : 2
Points : 2
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é :

Citation:
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)
burlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h42.


 
 
 
 
Partenaires

Hébergement Web