Domanda

Sto cercando di utilizzare un servizio web SharePoint da ColdFusion tramite cfinvoke (perché non voglio occuparmi di (leggi:analizzare) la risposta SOAP stessa).

La risposta SOAP include un carattere byte-order-mark (BOM), che produce la seguente eccezione in 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."

Lo standard per la codifica UTF-8 include facoltativamente il carattere BOM (http://unicode.org/faq/utf_bom.html#29).Microsoft include quasi universalmente il carattere BOM con flussi codificati UTF-8.Da quello che posso dire non c'è modo di cambiarlo in IIS.Il parser XML utilizzato da JRun (ColdFusion) per impostazione predefinita non gestisce il carattere BOM per i flussi XML codificati UTF-8.Quindi, sembra che il modo per risolvere questo problema sia cambiare il parser XML utilizzato da JRun (http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=942).

Adobe afferma che non gestisce il carattere BOM (vedere i commenti di anoynomous e halL del 2 e 5 maggio).
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments

È stato utile?

Soluzione

Dirò che la risposta alla tua domanda (è possibile?) è no.Non lo so in modo definitivo, ma il post che ha commentato appena sopra halL (nei commenti di questa pagina) ha fornito una soluzione alternativa al problema, quindi presumo che sia possibile gestirlo durante l'analisi manuale.

Dici che stai utilizzando CFInvoke perché non vuoi gestire tu stesso la risposta soap.Sembra che tu non abbia altra scelta.

Altri suggerimenti

Come ha già detto Adam Tuttle, la soluzione alternativa si trova nella pagina a cui ti sei collegato

<!--- 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>

Sembra che ColdFusion stia utilizzando Apache Axis sotto le coperte.

Questo non si applica esattamente alla tua soluzione, ma ho già dovuto affrontare questo problema una volta durante l'utilizzo di un servizio Web .NET con Apache Axis/Java.L'unica soluzione che sono riuscito a trovare (poiché il proprietario del servizio web non era disposto a modificare nulla da parte sua) era scrivere una classe Handler che Axis avrebbe inserito nella pipeline che avrebbe eliminato la BOM dal messaggio se esistesse.

Quindi forse è possibile configurare Axis tramite ColdFusion?Se è così è possibile aggiungere ulteriori gestori al flusso di gestione dei messaggi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top