2015-09-22 2 views
0

Je serai extrêmement reconnaissant si quelqu'un partage son expérience dans la résolution du problème suivant. J'ai un service SOAP dans l'implémentation du JDK (Metro, je crois). Pour la consignation, nous devons extraire le corps de la requête entrante et de la réponse générée. J'essaie de le récupérer en implémentant un SOAPHandler côté serveur. Je configure le gestionnaire en tant que bean Spring. Tous les exemples que j'ai trouvé répliquent essentiellement l'exemple de la documentation Oracle: https://docs.oracle.com/cd/E23943_01/web.1111/e13734/handlers.htm#WSADV170:Obtenir une réponse du gestionnaire de savon java

 public boolean handleMessage(SOAPMessageContext messageContext) 
    { 
    Boolean outboundProperty = (Boolean) 
     messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

    if (outboundProperty.booleanValue()) { 
     System.out.println("\nOutbound message:"); 
    } else { 
     System.out.println("\nInbound message:"); 
    } 

    System.out.println("** Response: "+messageContext.getMessage().toString()); 
    return true; 
    } 

Ici on lit l'une des propriétés booléennes du contexte de message SOAP qui, comme je le vois, correspond soit à la demande ou de réponse .

Mais le débogueur dans mes expériences ne pénètre jamais dans la branche correspondant à la réponse (else-branch). Comment un tel gestionnaire est-il supposé suivre à la fois la demande et la réponse?

Je me demande aussi ce que le message est lu comme messageContext.getMessage(): est-il la méthode d'entrée (demande) ou sortant (réponse)

Je me demande maintenant est-il possible en effet par la mise en œuvre handleMessage() pour obtenir l'accès à à la fois demande et réponse? Un gestionnaire unique intercepte-t-il à la fois la requête et sa réponse? Ai-je mal compris l'exemple?

Et ... SOAPHandler - est-ce une instance spécifique pour chaque requête (paire requête-réponse)? Merci

+0

Oui, seule méthode à la fois INTERCEPTIONS demande et la réponse. – ACV

Répondre

1

Essayez ceci pour SoapHandler:

Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
if (isRequest) { 
//handle request 
} else { 
//handle response 
     } 

Et ceci pour LogicalHandler:

Boolean outboundProperty = (Boolean) 
     messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
    if (outboundProperty.booleanValue()) { 
      System.out.println("\nOutbound message:"); 
    } else { 
      System.out.println("\nInbound message:"); 
    }