L'attribut xsi:type
est normalement pas nécessaire puisque le schéma XSD contenu dans la section types
du WSDL est assez d'information pour le client/serveur pour comprendre le type de tous les éléments. Mais considérons qu'il est parfois nécessaire d'avoir un champ ou un élément comme étant de n'importe quel type (xsd:anyType
) afin que vous puissiez utiliser le polymorphisme (comme vous l'avez mentionné vous-même). Par exemple, vous pouvez avoir un service Web qui exécute certaines commandes envoyées dans un champ XML marqué xsd:anyType
. Un tel service ne spécifie rien sur le type de données au moment de la conception. Par conséquent, les informations de type doivent être fournies lors de l'exécution. Bien entendu, un tel service n'accepte absolument aucun type, mais fonctionne avec un ensemble de types prédéfinis (c'est-à-dire que vous ne lui envoyez pas de merde, seulement des commandes valides à partir d'un ensemble de types de commandes).
Mais la partie XML est juste une communication. Vous devez éventuellement faire quelque chose avec ce type de programme, dans le code client/serveur. Cela signifie que vous devez convertir le xsd:anyType
en objet dans un langage de programmation.
Un outil WSDL-To-Code mappe généralement un xsd:anyType
à la classe supérieure Object
, ce qui n'est franchement pas très utile. Pour cette raison, un xsd:anyType
est toujours sérialisé avec un xsi:type
qui spécifie le type réel afin que votre code sache ce que le diable est là.
En ce qui concerne la validité, envoyez xsi:type
en doc/littéral. Ma réponse est: Je pense que c'est valide. Les spécifications WSDL et SOAP ne mentionnent rien de spécifique lié à cela (pour l'interdire), et la spécification WS-Interoperability le permet.
Donc, je pense que ce n'est pas quelque chose de positif ou négatif, mais juste un outil pour le travail.