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

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 に答える
2

あなたの質問 (それは可能ですか?) に対する答えはノーです。はっきりとはわかりませんが、halL のすぐ上 (このページのコメント内) にコメントした投稿者は、問題の回避策を提供しました。したがって、手動で解析するときに対処できると思います。

ソープ応答を自分で処理したくないため、CFInvoke を使用しているとあなたは言います。選択の余地がないようです。

于 2008-09-11T15:37:35.300 に答える
0

ColdFusion は隠れて Apache Axis を使用しているようです。

これはあなたのソリューションに正確には当てはまりませんが、Apache Axis/Java で .NET Web サービスを使用するときに、この問題に一度対処しなければなりませんでした。私が見つけることができた唯一の解決策は (Web サービスの所有者が自分の側で何も変更することを望まなかったため)、Axis がパイプラインにプラグインする Handler クラスを作成することでした。BOM が存在する場合は、メッセージから BOM を削除します。

では、ColdFusion を介して Axis を構成することは可能でしょうか? その場合は、メッセージ処理フローにハンドラーを追加できます

于 2008-09-11T15:32:34.657 に答える