2010-03-19 10 views
3

J'essaie d'envoyer des caractères spéciaux (&, ' (guillemets simples)) dans la demande de savon. J'utilise l'axe 1.4. Le client webservice est dans le serveur weblogic et le serveur webservice est un mainframe ibm (programme COBOL).Envoi de caractères XML invalides dans la demande de savon

Les données de demande du client contient un caractère spécial (& symbole) qui est converti en &

J'ai essayé de le joindre à CDATA comme

<![CDATA[Some Name & Some Data ]]> qui se convertit à

&lt;![CDATA[Some Name &amp; Some Data]]&gt; 

Le client webservice est généré à partir de wsdl, donc je ne pouvais pas utiliser CDATA api pour construire la requête. Je suis capable de le définir comme valeur de chaîne, et il est converti.

Toute aide à ce sujet serait grandement appréciée. S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations à ce sujet.

+0

Quel est exactement le problème? Vous recevez des entités XML. N'êtes-vous pas capable de les manipuler ou de les détruire? –

+2

Envoyez-vous les données au format XML ou une chaîne de caractères? Je ne connais pas l'API Axis, mais dans .NET, je vois des gens qui ont ce problème quand ils construisent XML en utilisant des API de chaînes au lieu d'API XML. Peut-être que c'est votre problème. –

+0

Oui, l'analyseur COBOL ne peut pas lire la chaîne complète à chaque fois qu'il rencontre un signe d'ampli. Par exemple: String "Name & Sex", l'analyseur cobol est incapable de l'analyser comme une chaîne complète. Je dois donc l'inclure dans cdata pour demander à l'analyseur cobol de valider le contenu. Lorsque je l'entoure dans CDATA, il est converti en <! [CDATA [Nom & Sex]] > - encore une fois l'analyseur cobol est incapable de lire le contenu. –

Répondre

7

Les stubs de client de service Web effectuent le codage XML pour vous. Le service Web attend XML, et il code les & et ' dans les références d'entité afin que vous enverriez XML valide.

Pour un analyseur XML, il va "voir" le &amp; comme & et vous n'avez pas de problème.

Si le serveur ne peut pas gérer les références d'entité, le «service Web» COBOL ne fait pas ce qu'il est censé faire. Cela rend difficile pour vous (et les outils basés sur les normes) de générer des talons de client à partir du WSDL, qui est essentiellement un contrat qui décrit les règles pour le format et l'échange de données.

À quoi sert de fournir un service WSDL et un service SOAP s'il ne respecte pas les règles d'interface prescrites?

+0

Ok, en ignorant la partie que le programme COBOL n'est pas capable d'analyser mon contenu. Comment envoyer un CDATA dans la requête sans qu'il soit codé? –

+0

Je ne suis pas sûr si les stubs AXIS vous permettront de définir le contenu et spécifier qu'il doit être CDATA. Il semble que d'autres ont eu des problèmes similaires: http://osdir.com/ml/axis-user-ws.apache.org/2009-12/msg00095.html Vous devrez peut-être soit pirater le code stub généré, recherchez un outil différent pour générer des stubs, ou construire manuellement votre requête et votre message SOAP. –

+0

True. J'ai aussi fini par faire de même, en regardant le talon d'axe pour gérer ce cas spécifique. Je n'ai pas encore compris, je posterai à nouveau si je trouve quelque chose. Merci de votre aide. –