Rechercher un changement de comportement dans une action SOAP définie dans les messages sortants

Le comportement relatif à la façon dont le paramètre d'action SOAP est déterminé dans les messages sortants pour les clients JAX-WS Dispatch a changé dans WebSphere Application Server version 8. Dans les éditions précédentes, si une action SOAP n'est pas spécifiée par l'application client Dispatch, l'environnement d'exécution JAX-WS n'envoie pas l'action SOAP appropriée dans le message sortant. A la place, il associe l'action à une opération anonyme. Désormais, dans la version 8, si l'action SOAP n'est pas spécifiée par l'application client, l'environnement d'exécution JAX-WS analyse le message sortant afin d'identifier l'opération appelée et de déterminer la valeur appropriée pour l'action SOAP.

Cette règle marque les appels permettant de créer un client Dispatch lorsque :

Les pratiques de développement recommandées pour les serveurs WebSphere Application Server Traditional et Liberty concernent l'utilisation d'une action SOAP avec les propriétés JAX-WS javax.xml.ws.BindingProvider, SOAPACTION_USE_PROPERTY et SOAPACTION_URI_PROPERTY. L'action SOAP fournie est utilisée et le message sortant n'est pas analysé quelle que soit la définition de la propriété DISPATCH_CLIENT_OUTBOUND_RESOLUTION.

Cet exemple illustre la meilleure pratique de codage avec l'action SOAP définie dans le contexte de requête. Si la propriété SOAPACTION_URI_PROPERTY n'est pas définie ou si la propriété SOAPACTION_USE_PROPERTY est associée à la valeur false, l'appel de la méthode createDispatch() est marqué par cette règle.

Exemple :

//Création d'une instance Dispatch
Dispatch<SOAPMessage> dispatch =
service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);

// Utilisation de Dispatch comme BindingProvider
BindingProvider bp = (BindingProvider) dispatch;

// Configuration de RequestContext pour envoyer l'en-tête HTTP SOAPAction
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello");

Dans la mesure où cette analyse syntaxique peut être coûteuse, une propriété peut être définie sur le serveur WebSphere Application Server Traditional au niveau du système (pour toujours désactiver l'analyse syntaxique) ou sur Contexte du message de demande JAX-WS (pour désactiver l'analyse syntaxique pour chaque message). Si l'analyse est désactivée, l'action SOAP figurant dans le message sortant reste associée à une opération anonyme, comme avant. La propriété de désactivation est définie en tant que constante org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION avec la valeur de chaîne jaxws.dispatch.outbound.operation.resolution.enable. Si la propriété n'est pas définie, elle est interprétée comme chaîne true et permet la résolution des opérations sortantes. Si vous associez la propriété à la valeur false, la résolution des opérations sortantes est désactivée.

Pour plus d'informations, voir :