Pregunta

Estoy intentando consumir un servicio web de SharePoint desde ColdFusion a través de cfinvoke (porque no quiero lidiar con (lea:analizar) la propia respuesta SOAP).

La respuesta SOAP incluye un carácter de marca de orden de bytes (BOM), que produce la siguiente excepción en 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."

El estándar para la codificación UTF-8 incluye opcionalmente el carácter BOM (http://unicode.org/faq/utf_bom.html#29).Microsoft incluye casi universalmente el carácter BOM con transmisiones codificadas en UTF-8.Por lo que puedo decir, no hay forma de cambiar eso en IIS.El analizador XML que JRun (ColdFusion) utiliza de forma predeterminada no maneja el carácter BOM para secuencias XML codificadas en UTF-8.Entonces, parece que la forma de solucionar este problema es cambiar el analizador XML utilizado por JRun (http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=942).

Adobe dice que no maneja el carácter BOM (ver comentarios de anonymous y hall el 2 y 5 de mayo).
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments

¿Fue útil?

Solución

Voy a decir que la respuesta a tu pregunta (¿es posible?) es no.No lo sé definitivamente, pero el cartel que comentó justo encima de hall (en los comentarios de esta pagina) proporcionó una solución alternativa al problema, por lo que supongo que es posible solucionarlo cuando se analiza manualmente.

Dice que está usando CFInvoke porque no quiere lidiar usted mismo con la respuesta del jabón.Parece que no tienes otra opción.

Otros consejos

Como ya dijo Adam Tuttle, la solución está en la página a la que vinculó

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

Parece que ColdFusion está usando Apache Axis bajo las sábanas.

Esto no se aplica exactamente a su solución, pero tuve que lidiar con este problema una vez antes al consumir un servicio web .NET con Apache Axis/Java.La única solución que pude encontrar (ya que el propietario del servicio web no estaba dispuesto a cambiar nada por su parte) fue escribir una clase de controlador que Axis conectaría a la canalización y que eliminaría la lista de materiales del mensaje si existiera.

Entonces, ¿quizás sea posible configurar Axis a través de ColdFusion?En ese caso puede agregar controladores adicionales al flujo de manejo de mensajes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top