2009-10-21 3 views
1

Mon client basé SAAJ-génère le code XML suivant et l'envoie à un service Web .NET:Manipuler préfixes d'espaces de noms SAAJ/accès XML brut au sein SAAJ

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
<SOAP-ENV:Header> 
<AuthenticationHeader xmlns="http://www.w3.org/2001/XMLSchema-instance"> 
<Password xmlns="http://schemas.datacontract.org/2004/07/">temp123</Password> 
<UserName xmlns="http://schemas.datacontract.org/2004/07/">temp321</UserName> 
</AuthenticationHeader> 
</SOAP-ENV:Header> 
<SOAP-ENV:Body> 
<GetTracks xmlns="http://tempuri.org/"> 
    <TrackName>baby</TrackName><ArtistID>0</ArtistID><AlbumID>0</AlbumID><Start>0</Start><Count> 20</Count> 
</GetTracks></SOAP-ENV:Body></SOAP-ENV:Envelope> 

Le problème que je fais l'expérience est que pour la AuthenticationHeader élément Je dois avoir un préfixe défini mais il ne doit pas être ajouté au tout début. C'est exactement ce que je dois faire produit afin de ne pas obtenir une erreur du service Web:

<AuthenticationHeader xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 

Alors que si je produis un préfixe lors de la création de nom, il est automatiquement ajouté après l'attribut xmlns et à la tout début de l'élément.

J'ai essayé de fouiller avec tout le paquetage javax.xml.soap mais je n'ai pas réussi à trouver quelque chose qui pourrait m'aider à contourner ce problème. Pouvez-vous me donner un indice sur la direction à suivre pour obtenir un tel XML généré? Sur une note de côté, je me demande si c'est un comportement même valide pour un service Web de rejeter xml valide comme ça? Quelle est la motivation pour un tel comportement d'interprétation?

Merci!

+0

.net les services Web, en particulier les premiers, sont connus dans le monde java pour ne pas être conforme aux spécifications, et ne fonctionnent que lorsque les deux extrémités de la conversation sont .net. Ils sont devenus beaucoup mieux à ce sujet, mais il ya encore beaucoup de services plus anciens qui font des choses comme paniquer si les préfixes ne sont pas comme prévu. – skaffman

Répondre

1

Les API SOAP Java supposent généralement la conformité aux spécifications du service auquel elles s'adressent, ce qui évite que des éléments tels que le contrôle des préfixes ne soient exposés via l'API, car il n'y a aucune raison de s'en soucier.

Dans les cas précédents comme celui-ci, j'ai souvent dû recourir à la construction manuelle de l'objet SOAP DOM, qui est horriblement douloureux.

Plus récemment, j'ai eu raisonnablement bonne chance en obtenant Spring WebServices pour produire exactement ce que je recherche. Il fait abstraction de l'API SAAJ, tout en fournissant des hooks pour descendre et se salir avec le DOM au niveau XML. Je suggère de l'essayer et de voir ce que vous pouvez imaginer.

+0

Merci de m'avoir donné une direction à suivre! Je me demande toujours s'il pourrait y avoir un fichier de configuration SAAJ ou une directive JRE qui permettrait de contrôler le processus de génération de préfixe. – Yuriy