BOM nicht erwartet, dass bei CF aber von IIS gesendet/SharePoint
-
09-06-2019 - |
Frage
Ich bin versucht zu verbrauchen SharePoint webservice von ColdFusion über cfinvoke ('Ursache, die ich nicht wollen, zu behandeln (Lesen Sie:Parsen) der SOAP-Antwort selbst).
Die SOAP-Antwort schließt eine byte-order-mark-Zeichen (BOM), erzeugt die folgende Ausnahme in der 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."
Der standard für UTF-8-Kodierung Optional umfasst die BOM-Zeichen (http://unicode.org/faq/utf_bom.html#29).Microsoft fast allgemein umfasst die BOM-Zeichen mit UTF-8-codierte streams .Von dem, was ich sagen kann, es ist keine Möglichkeit zu ändern, die in IIS.Der XML-parser, dass JRun (ColdFusion) verwendet standardmäßig nicht handhaben die BOM-Zeichen in UTF-8-codierte XML-streams.So, es scheint, dass der Weg, um dies zu beheben, ändern Sie den XML-parser verwendet JRun (http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=942).
Adobe sagt, dass es nicht handhaben die BOM-Zeichen (siehe Kommentare von anoynomous und Halle am 2. Mai und 5.).
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments
Lösung
Ich werde sagen, dass die Antwort auf Ihre Frage (ist es möglich?) Nein. Ich weiß nicht, dass endgültig, aber das Plakat, die knapp über HALL (
Andere Tipps
Wie Adam Tuttle bereits gesagt, ist die Abhilfe auf der Seite, die Sie im Zusammenhang mit
<!--- 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>
Es klingt wie Coldfusion verwendet Apache Axis unter der Decke.
Dies gilt nicht genau auf Ihre Lösung, aber ich habe mit diesem Problem zu befassen hatte einmal vor, wenn ein .NET Web-Service mit Apache Axis / Java raubend. Die einzige Lösung, die ich war in der Lage zu finden (da der Inhaber des Web-Dienstes nicht bereit war, alles an seinem Ende zu ändern) war eine Handler-Klasse zu schreiben, die Achse in die Pipeline stecken würde, die die Stückliste aus der Nachricht löschen würden, wenn es existiert.
So ist es vielleicht möglich Achse durch Coldfusion zu konfigurieren? Wenn ja Sie zusätzliche Handlers zu der Nachricht hinzufügen Umgang mit Fluss .