2017-11-17 24 views
0

を解析さ:サクソンは、次のエラーを取得し、サクソンHEとXSLT 2.0スタイルシートを解析しようとすると、XSLスタイルシートは、リモートリソースにアクセスすることはできません

Error on line 44 column 168 
    XTSE0165: I/O error reported by XML parser processing 
    http://www.loc.gov/standards/mods/inc/mimeType.xsl: Server returned HTTP response code: 
    403 for URL: http://www.loc.gov/standards/mods/inc/mimeType.xsl 

このスタイルシートは、それが取得しようとするリモートリソースのほんの一握り含まれています

<xsl:include href="http://www.loc.gov/standards/mods/inc/dcmiType.xsl"/> 
<xsl:include href="http://www.loc.gov/standards/mods/inc/mimeType.xsl"/> 
<xsl:include href="http://www.loc.gov/standards/mods/inc/csdgm.xsl"/> 
<xsl:include href="http://www.loc.gov/standards/mods/inc/forms.xsl"/> 
<xsl:include href="http://www.loc.gov/standards/mods/inc/iso3166-1.xsl"/> 
<xsl:include href="http://www.loc.gov/standards/mods/inc/iso639-2.xsl"/> 

しかし、すべてのリンクが有効であり、ブラウザまたはカールを介して取得されていることを確認しました。さらに、私がlocalhostにそれらのファイルを提供し、それに応じて<xsl:include>を変更すると、私は403エラーを取得しません。

私の質問、localhostにないリソースにアクセスサクソンHEを妨げているいくつかの種類サクソンやJavaの設定はありますか?

事前に感謝の意を表します。

更新:localhost:6767で動作するSaxon変換を実行するサーバーとしてpyjxsltを使用しています。

+0

あなたはあなたが得たエラーコードであなたの質問にタグを付けました。タグの説明を読むと、「サーバはリクエストに応答しません」ということが明らかです.Saxonの問題ではなく、サーバスタイルシートの提供を拒否する。 –

+0

はい、ただし、スタイルシートに記載されているすべてのURLについては、ブラウザやカールで403エラーなしで*アクセスできます。だから、XSLTスタイルシートであるSaxonは、なぜドキュメントを要求すると403という結果になるのでしょうか? – ghukill

+1

ブラウザとJavaネットAPIとで異なるユーザーエージェント設定が原因である可能性があります。あなたのマシンとサーバーの間でHTTPリクエスト/レスポンスを聞き取り、ブラウザのものとSaxonが行ったものとを比較しようとすることができます。 –

答えて

0

私は、HTTPトラフィックを監視するために、「チャールズ」を使用して、XQueryのコマンドラインからこのdocを使用して()関数を試してみました。

詳細なHTTPレスポンスは、サイトがアクセスを制限するためにCloudFlareを使用していること、そしてそれは、「ブラウザの署名に基づいて、」アクセスを拒否したと述べています。

ですから、リクエストにブラウザの署名を変更する、またはそのセキュリティポリシーは意味をなさないサイトの所有者を説得するためのプロキシのいくつかの種類を挿入することができない限り、あなたは運が悪いかもしれません。私は気づく

一つは、SafariはHTTPリクエストヘッダにある「アプリケーション/ XMLを受け入れる」、およびJavaにはないが含まれていることです。リクエストヘッダーにXMLを受け入れるように指定されていない限り、XMLに対応しないようにサイトが設定されている可能性があります。私はこれが以前に起こるのを見たことはありませんが、調査するべきことです。

ちなみに、デフォルトでは、SaxonはJava APIを直接呼び出してドキュメントを取得しません。標準の(デフォルトの)URIResolverを使用すると、要求されたURLをラップするInputSourceオブジェクトが作成され、InputSourceがXMLパーサーに渡され、XMLパーサーがリソースをフェッチします。 XMLパーサが実際に使用しているJava APIはわかりません。しかし、うまくいく方法を見つけることができれば、HTTPリクエストを設定してInputStreamを直接取得するURIResolverを書くことでこれを回避できます。

+0

これは大変助かりました。ありがとうございます。リクエストヘッダーを確認する機会はありませんでしたが、「accept application/xml」は、適切なコンテンツネゴシエーションのプロンプトがこのサーバーに必要なものであることを示唆しています。 URIResolverを書くことを考えたり、適切なXMLヘッダーを送信する小さなプロキシサーバーを組み込むだけでも、XSLT変換を必要とするこのアプリケーションでは機能します。再度、感謝します。 – ghukill

関連する問題