web-dev-qa-db-ja.com

EclipseのSaxParseException:XMLドキュメント構造は同じエンティティ内で開始および終了する必要があります

Javaにあるlast.fmAPIを使用しています here

私は巨大な データセット を持っており、ユーザーのアーティストの履歴と再生を含むファイルのみを使用しています。 Javaでこれらのアーティスト名を抽出し、Artist.getSimilar()メソッドに基づいて類似のアーティストを返すコードを記述しました。

私は一度それを実行しましたが、すべてのアーティストのためではありませんでした。デバッグを途中で終了しました。ただし、次回は、結果がキャッシュから返され、リクエストがWebサーバーに送信されなくなりました。問題は、今回は結果を終了したアーティストまでしか結果が得られないことです。 artists=Artist.getTopAlbums()に別のメソッドを使用してみましたが、途中で終了し、次回も同じ問題に直面しました。私が得ているエラーは次のとおりです。

[Fatal Error] :513:9: <strong>XML document structures must start and end within the same entity.</strong>
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
Caused by: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
    at com.Sun.org.Apache.xerces.internal.parsers.DOMParser.parse(DOMParser.Java:251)
    at com.Sun.org.Apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.Java:300)

そして、ここでは重要な部分ではない他の多くの例外。

Eclipseを再インストールし、Eclipseを-cleanモードで起動して、ワークスペースをクリーンアップしてみました。何も機能しませんでした。新しいワークスペースも作成しましたが、キャッシュが戻ってきます。私はEclipse3.8を使用しています。 Eclipseでキャッシュをクリアする効率的な方法が役立つでしょうか?どうすればいいですか。何も機能していないようです。 (また、多くの記事で提案されているように、[ウィンドウ]> [設定]でキャッシュを手動でクリーンアップするオプションはありません)。

それとも私は何か他のことをする必要がありますか?どんな助けでも大歓迎です。前もって感謝します。

私のJavaコード(これは完全に正常に機能しており、これにエラーはありません):

//in main
BufferedReader inp = new BufferedReader (new InputStreamReader(System.in));
String sinput=inp.readLine();
System.out.println(sinput+"\t \t \t"+getSimilarartists(sinput));


//to fetch similar artists
public static StringBuilder getSimilarartists(String artist){
String key = "af2bfbcb4dd49870fdb8e92f128f4ff7";
StringBuilder sb = new StringBuilder();
String art=(Artist.getSimilar(artist, key)).toString();
int i=0;
while(i<art.length()-5){
    if((art.substring(i, (i+4))).equalsIgnoreCase("name")){
        i=i+6;

        while(art.charAt(i)!='\''){
            sb.append(art.charAt(i));
            i++;
        }

        break;
    }
    i++;
}
return sb;
}  

出力(最後の数行のみ):

hans zimmer;     I recommend=Hans Zimmer & James Newton Howard<br>
nelly furtado;   I recommend=Jennifer Lopez<br>
madonna;     I recommend=Kylie Minogue<br>
blink-182;   I recommend=Box Car Racer<br>
dave gahan;  I recommend=Depeche Mode<br>
kelly clarkson;  I recommend=Carrie Underwood<br>
lucie silvas;    I recommend=Delta Goodrem<br>
natalie imbruglia;   I recommend=Melanie C<br>
michelle branch;     I recommend=The Wreckers<br>
delta goodrem;   I recommend=Ricki-Lee<br>
new order;   I recommend=Electronic<br>
seal;    I recommend=Simply Red<br>
atomic kitten;   I recommend=Liberty X 

 *** (this is where I had terminated my previous run) ***

[Fatal Error] :513:9: XML document structures must start and end within the same entity.<br>
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
    at de.umass.lastfm.Caller.call(Caller.Java:268)<br>
    at de.umass.lastfm.Caller.call(Caller.Java:189)<br>
    at de.umass.lastfm.Caller.call(Caller.Java:185)<br>
    at de.umass.lastfm.Artist.getSimilar(Artist.Java:144)<br>
    at de.umass.lastfm.Artist.getSimilar(Artist.Java:132)<br>
    at Recommender.getSimilarartists(Recommender.Java:89)<br>
    at Recommender.main(Recommender.Java:58)<br>
Caused by: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.<br>
    at com.Sun.org.Apache.xerces.internal.parsers.DOMParser.parse(DOMParser.Java:251)
    at     <br>
com.Sun.org.Apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.Java:300)<br>
    at de.umass.lastfm.Caller.createResultFromInputStream(Caller.Java:324)<br>
    at de.umass.lastfm.Caller.call(Caller.Java:256)<br>
    ... 6 more
8
HackCode

このようなエラーは通常、不適切な形式のドキュメントを示しています。

原因:org.xml.sax.SAXParseException; lineNumber:513; columnNumber:9; XMLドキュメント構造は、同じエンティティ内で開始および終了する必要があります。で

これをデバッグするためにできることがいくつかあります。

  1. XMLドキュメントをログに出力し、ある種のXMLバリデーターで実行します。
  2. 無効な文字(UTF-8ドキュメントのUTF-16文字など)がないことを確認してください
2
Mike Thomsen

EclipseもJava通常のI/Oを実行するときにWebコンテンツをキャッシュしません。ただし、コンテンツは別の場所にキャッシュできます。おそらく、使用しているde.umass.lastfmAPIがこれを実行しています。おそらくそこにあります。 OSまたはネットワーク上の何かです。