質問

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 日の anoynous と halL からのコメントを参照)。
http://livedocs.adobe.com/coldfusion/8/htmldocs/Tags_g-h_09.html#comments

役に立ちましたか?

解決

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

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

他のヒント

アダム・タトルがすでに述べたように、回避策はリンク先のページにあります

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

ColdFusion が内部で Apache Axis を使用しているようです。

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

では、ColdFusion を通じて Axis を設定できるのではないでしょうか?もしそうなら メッセージ処理フローにハンドラーを追加できます。.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top