2013-06-14 2 views
1

J'utilise un gestionnaire jax-ws pour intercepter un message SOAP afin de pouvoir récupérer certains éléments de l'en-tête. Existe-t-il un moyen de désérialiser un en-tête et de l'analyser en un objet généré par wsdl2java ou xmlbeans? Je suis en train de migrer d'AXIS vers CXF. Sous AXIS, je pourrais obtenir l'en-tête XML et l'analyser en utilisant une classe Factory. Je n'ai pas trouvé un bon moyen de le faire avec les objets générés à partir de CXF wsdl2java. Je me rends compte que je peux utiliser le getElementsByTagName pour récupérer chaque nœud, mais il est simplement plus facile de travailler avec l'objet réel.Déserialisez l'en-tête dans le gestionnaire jaxws

Répondre

1

Vous pouvez utiliser l'API SAAJ pour manipuler directement le message SOAP. Étendre AbstractSoapInterceptor en implémentant la méthode handleMessage() et l'ajouter à la chaîne d'InInterceptors.

public class MyCustomInInterceptor extends AbstractSoapInterceptor { 

public void handleMessage(SoapMessage soapMessage) throws Fault { 
    try { 
     SOAPMessage message = soapMessage.getContent(SOAPMessage.class); 
     SOAPPart sp = message.getSOAPPart(); 
     SOAPEnvelope se = sp.getEnvelope(); 
     SOAPBody sb = se.getBody(); 
     SOAPHeader sh = se.getHeader(); 

    } 
    catch(Exception e) 
    { 
     log.error(e); 
     throw new Fault(e); 
    } 

    } 


} 

NOTE: Vous aurez également besoin d'attacher SAAJInInterceptor à la chaîne d'intercepteurs ou bien soapMessage.getContent(SOAPMessage.class) retournera null

+0

Mais je voudrais travailler avec les classes générées Java2WSDL et non le CXF SOAPMessage, SOAPBody , etc. Existe-t-il un moyen d'analyser/transformer le SOAPMessage en classes générées? –

Questions connexes