Question

J'essaie de consommer un service Web SharePoint de ColdFusion via cfinvoke (parce que je ne veux pas m'en occuper (lire :analyser) la réponse SOAP elle-même).

La réponse SOAP inclut un caractère de marque d'ordre d'octet (BOM), qui produit l'exception suivante dans CF :

"Cannot perform web service invocation GetList.
The fault returned when invoking the web service operation is:
'AxisFault
faultCode: {http://www.w3.org/2003/05/soap-envelope}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog."

La norme pour le codage UTF-8 inclut en option le caractère BOM (http://unicode.org/faq/utf_bom.html#29).Microsoft inclut presque universellement le caractère BOM avec les flux codés en UTF-8.D'après ce que je peux dire, il n'y a aucun moyen de changer cela dans IIS.L'analyseur XML que JRun (ColdFusion) utilise par défaut ne gère pas le caractère BOM pour les flux XML codés en UTF-8.Il semble donc que la façon de résoudre ce problème consiste à modifier l'analyseur XML utilisé par JRun (http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=942).

Adobe dit qu'il ne gère pas le caractère BOM (voir commentaires d'anonymous et hallL les 2 et 5 mai).
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments

Était-ce utile?

La solution

Je vais dire que la réponse à votre question (est-ce possible ?) est non.Je ne le sais pas avec certitude, mais l'affiche qui a commenté juste au-dessus de hall (dans les commentaires sur cette page) a donné une solution au problème - je suppose donc qu'il est possible de le résoudre lors de l'analyse manuelle.

Vous dites que vous utilisez CFInvoke parce que vous ne voulez pas gérer vous-même la réponse au savon.On dirait que vous n'avez pas le choix.

Autres conseils

Comme Adam Tuttle l'a déjà dit, la solution de contournement se trouve sur la page à laquelle vous avez lié

<!--- Remove BOM from the start of the string, if it exists --->
<cfif Left(responseText, 1) EQ chr(65279)>
<cfset responseText = mid(xmlText, 2, len(responseText))>
</cfif>

Il semble que ColdFusion utilise Apache Axis sous les couvertures.

Cela ne s'applique pas exactement à votre solution, mais j'ai déjà dû résoudre ce problème une fois lors de la consommation d'un service Web .NET avec Apache Axis/Java.La seule solution que j'ai pu trouver (puisque le propriétaire du service Web n'était pas disposé à changer quoi que ce soit de son côté) était d'écrire une classe Handler qu'Axis brancherait au pipeline et qui supprimerait la nomenclature du message si elle existait.

Alors peut-être est-il possible de configurer Axis via ColdFusion ?Le cas échéant vous pouvez ajouter des gestionnaires supplémentaires au flux de gestion des messages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top