2

我正在尝试通过 cfinvoke 从 ColdFusion 使用 SharePoint Web 服务(因为我不想处理(阅读:解析)SOAP 响应本身)。

SOAP 响应包含一个字节顺序标记字符 (BOM),它在 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."

UTF-8 编码标准可选地包括 BOM 字符 ( http://unicode.org/faq/utf_bom.html#29 )。Microsoft 几乎普遍包含带有 UTF-8 编码流的 BOM 字符。据我所知,在 IIS 中无法改变它。JRun (ColdFusion) 默认使用的 XML 解析器不处理 UTF-8 编码的 XML 流的 BOM 字符。因此,解决此问题的方法似乎是更改 JRun 使用的 XML 解析器(http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=942)。

Adobe 说它不处理 BOM 字符(请参阅 5 月 2 日和 5 日来自 anonynomous 和 halL 的评论)。
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments

4

3 回答 3

2

我要说的是,您的问题的答案(有可能吗?)是否定的。我不确定这一点,但是在大厅上方发表评论的发帖人(在本页的评论中)给出了解决该问题的方法——所以我认为在手动解析时可以处理。

您说您正在使用 CFInvoke 是因为您不想自己处理肥皂响应。看起来你别无选择。

于 2008-09-11T15:37:35.300 回答
2

正如 Adam Tuttle 已经说过的,解决方法在您链接到的页面上

<!--- 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>
于 2008-09-16T15:33:16.673 回答
0

听起来 ColdFusion 在幕后使用了 Apache Axis。

这并不完全适用于您的解决方案,但是在使用 Apache Axis/Java 使用 .NET Web 服务之前,我不得不处理过这个问题。我能找到的唯一解决方案(因为 Web 服务的所有者不愿意更改他的任何内容)是编写一个 Handler 类,Axis 将插入到管道中,如果存在的话,它将从消息中删除 BOM。

那么也许可以通过 ColdFusion 配置 Axis?如果是这样,您可以向消息处理流程添加额外的处理程序

于 2008-09-11T15:32:34.657 回答