WebService ne peut pas traiter la demande avec du SAVON Corps de ne pas avoir un préfixe d'espace de noms
Mon web service n'est pas en mesure de traiter mes demandes du client lorsque le client appelle le service web sans passer par un préfixe dans le Corps SOAP comme suit:
<soap:Body>
<GetPatientResultsRequest xmlns="http://urlA">
<PatientIdentification>
<PersonCivilRegistrationIdentifier xmlns="http://UrlB"/>
</PatientIdentification>
<Period>
<From>2012-05-26</From>
<To>2012-06-26</To>
</Period>
</GetPatientResultsRequest>
</soap:Body>
L'erreur est que l'objet Java correspondant à GetPatientResultsRequest
et les autres sont nuls.
Il semble que lorsqu'il n'y a pas de préfixe dans le Corps, la désérialisation ne s'est pas déroulée correctement. Mon web service est en mesure de répondre uniquement lorsque le SAVON Corps a un préfixe comme
<soap:Body>
<m:GetPatientResultsRequest xmlns:m="http://urlA">
<PatientIdentification>
<PersonCivilRegistrationIdentifier xmlns="http://UrlB"/>
</PatientIdentification>
<Period>
<From>2012-05-26</From>
<To>2012-06-26</To>
</Period>
</m:GetPatientResultsRequest>
</soap:Body>
Quelqu'un peut-il me faire savoir que faire pour que mon web service SOAP demandes de toutes sortes (c'est à dire avec ou sans préfixe dans le Corps)?
Je suis à l'aide de JAX-WS SOAP (1.1)
Tes deux exemples sont différents. Dans le premier cas, alors l'espace de noms est sur le
GetPatientResultsRequest
et la PatientIdentification
, Period
, From
et To
éléments. Dans le deuxième exemple, c'est seulement sur la GetPatientResultsRequest
élément.Je suis confronté au même problème. Veuillez me dire si vous avez été en mesure de résoudre ce problème...
OriginalL'auteur user1642997 | 2012-09-03
Vous devez vous connecter pour publier un commentaire.
Un service web définit un contrat que vous devez suivre afin de l'appeler. Un seul message à partir des exemples que vous avez affichée correspond à celle du contrat, de sorte que l'un fonctionne, l'autre n'a pas.
Dans votre premier message, vous avez défini un espace de noms par défaut (en raison de la
xmlns
attribut dans l'emballage) et tous les éléments qui ne sont pas undeclare et qui n'ont pas de préfixe sont dans le même espace de noms, parce qu'ils héritent de leurs parents.Dans votre second message vous avez un préfixe explicite déclaration et seul le wrapper est que les espaces de noms, les autres éléments ne sont pas dans un espace de noms et n'hérite pas d'un défaut de la société mère (en raison de
xmlns
attribut manquant).Comme je l'ai dit au début, le web service définit un contrat. Il est plus logique de modifier les clients d'envoyer le bon message, au lieu de modifier le service à accepter des messages erronés de la part du client.
Pour contrôler les espaces de noms de vos éléments dont vous avez besoin pour utiliser le
targetNamespace
valeurs sur les annotations JAX-WS de votre service web et le client.Voici un exemple pour voir la différence dans le code et le format des messages lorsque vous modifiez les espaces de noms cible. Je vais utiliser une base de WSDL pour cela:
Ce définit des messages comme:
et:
Voir le préfixe d'espace de noms sur l'emballage? C'est parce que les éléments sont déclarées dans le
http://tempuri.org
espace de noms, tandis que les autres ne le sont pas et ne sont pas dans un espace de noms.Vous pouvez même supprimer tous les éléments de l'espace de noms. La bande de l'espace de noms cible du WSDL et d'obtenir qu'elle ressemble à ceci:
Cette nouvelle WSDL correspondent à des messages comme:
et:
Pas de préfixe dans ce cas.
Maintenant utiliser
wsimport.exe
sur les deux fichiers wsdl et vous verrez les espaces de noms cible dont je parlais au début, à savoir un changement de ceci::
De contrôle de la
targetNamespace
et vous permettra de contrôler la façon dont le message a l'air.OriginalL'auteur Bogdan