0

テストと古いコード部分であるjunitテストを書いています。このコードは、iplanet Web サーバーとローカルの Tomcat サーバーで機能し、問題なく動作します。ただし、JUNIT テストで実行すると、この例外が発生します。

背景: JAR から XSL ファイルを取得し、リソース ファイルから読み込まれた xml ドキュメントで変換します。

トランスフォーマー ファクトリの変更、エンコーディングの変更、および 16 進エディターを使用してすべてのファイルのヌル文字のチェックを試みました。何か案は?

[致命的なエラー] :2251:46: 属性「test」および要素「xsl:when」の値に無効な XML 文字 (Unicode: 0x0) が見つかりました。システム ID が不明です。行番号 2251; 列 #46; org.xml.sax.SAXParseException; 行番号: 2251; 列番号: 46; 属性「test」の値に無効な XML 文字 (Unicode: 0x0) が見つかり、要素は「xsl:when」です。

* *UPDATE XSL が保持されているプロジェクトのクラス フォルダーを使用し、それを jar の依存関係について移動すると機能することがわかりましたが、jar から xsl を使用すると壊れます

4

3 に答える 3

0

2251行目までのところにある場合は、その場所周辺のファイルの内容に問題があることを強く示唆しています。その場所のファイルに問題がない場合、次の提案は、パーサーに問題があることです。クレイジーに聞こえるかもしれませんが、JDKに組み込まれているXMLパーサーは深刻なバグがあるため、代わりにApacheバージョンのXercesをインストールすれば問題が解決するかどうかを確認します。多くの場合、これは単に関連するJARファイルをJDKインストールのlib/endorsedディレクトリに配置することの問題です。

于 2013-01-02T23:03:45.290 に答える
0

提案:

1) ライブラリのバージョンがすべて一致していることを確認します。

2) 「無効な XML 文字 (Unicode: 0x0) が見つかりました」は、いくつかのまったく異なる原因のいずれかが原因であると思われます。それぞれを調査する必要があります。

3)最初に、最も明白な - 入力にヌル文字がないか確認してください:)

4) 次に、エンコーディングを確認してください。おそらく、送信者は UTF-16 を書き込んでいますが、読者は UTF-8 を予期しています。ここに良いリンクがあります:

* Java での無効な XML 文字に関するエラー

これはエンコードの問題です。入力ストリームを UTF8 として読み取ってそうでないか、またはその逆です。

コンテンツを読むときは、エンコーディングを明示的に指定する必要があります。例:経由

new InputStreamReader(getInputStream(), "UTF-8")

別の問題は、Tomcat である可能性があります。URIEncoding="UTF-8"server.xml ファイルに tomcat のコネクタ設定を追加してみてください

5) 根本的な原因は、読み取りの失敗または何らかの種類のオブジェクトの欠落である可能性もあります。おそらく定義がありません。

Q:「SystemId」とは何ですか? それが「行方不明」になる原因は何ですか?

6) 1 つの可能性は、「resolveEntity()」が失敗していることです。

InputSource resolveEntity(String publicId, String systemId)

その問題に関するいくつかのリンクを次に示します。

7) これらのリンクは両方とも、「指定されたホストに接続できないため、resolveEntity() が失敗している可能性がある」ことを示唆しています。XML にリストされているネットワーク ホスト名を確認し、「ping」できることを確認してください。

于 2013-01-02T18:51:37.563 に答える
0

これは、変換しようとしていた XSL ファイルがまだ JAR にあったために発生しました。まず、Maven でファイルをターゲット ディレクトリに抽出する必要がありました。

于 2013-06-26T20:30:15.520 に答える