1

私は以前に実装したフィード リストに誰かが追加した RSS フィードのリストを返す RESTful Web サービスに取り組んでいます。

ここで、TEXT_PLAIN応答を返すと、これはブラウザーに問題なく表示されますが、 APPLICATION_XML応答を返そうとすると、次のエラーが表示されます。

XML 解析エラー: ドキュメント要素の後のジャンク 場所: http:// localhost:8080/Assignment1/api/feedlist 行番号 1、列 135: SMH トップ ヘッドラインhttp://feeds.smh.com.au/rssheadlines/top.xmlUTS ライブラリニュースhttp://www.lib.uts.edu.au/news/feed/all

コードは次のとおりです-整形式のXMLページが返されない理由がわかりません(XML応答を改行とスペース(インデント)でフォーマットしようとしました-もちろん、これは機能しませんでした):

package au.com.rest;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import au.edu.uts.it.wsd.*;


@Path("/feedlist")
public class RESTFeedService {

String feedFile = "/tmp/feeds.txt"; 
String textReply = "";
String xmlReply = "<?xml version=\"1.0\"?><feeds>";
FeedList feedList = new FeedListImpl();

@GET
@Produces(MediaType.APPLICATION_XML)
public String showXmlFeeds() throws FileNotFoundException, IOException
{

    feedList.load(feedFile);
    for (Feed f:feedList.list()){
        xmlReply += "<feed><name>" + f.getName() + "</name>";
        xmlReply += "<uri>" + f.getURI() + "</uri></feed></feeds>";
    }

    return xmlReply;
}

}
4

1 に答える 1

2

編集:私は今、差し迫った問題を発見しました。feedsすべての入力要素で要素を閉じています:

for (Feed f:feedList.list()){
    xmlReply += "<feed><name>" + f.getName() + "</name>";
    xmlReply += "<uri>" + f.getURI() + "</uri></feed></feeds>";
}

最小限の変更は次のとおりです。

for (Feed f:feedList.list()){
    xmlReply += "<feed><name>" + f.getName() + "</name>";
    xmlReply += "<uri>" + f.getURI() + "</uri></feed>";
}
xmlReply += "</feeds>";

...しかし、以下の残りのアドバイスを適用する必要があります。


最初のステップ - 問題をさらに診断する必要があります。ブラウザでソースを見て、何について不平を言っているのかを正確に確認してください。XML の問題を自分で確認できますか? それはどのように見えますか?

使用している残りのフレームワークについて知らなければ、複数のリクエストにサービスを提供する単一のインスタンスで問題が発生する可能性があるようです。何らかの理由で、メソッドで変更しているインスタンス変数を取得しました。なぜそれをしたいのですか?リクエストごとにクラスの新しいインスタンスが作成される場合、問題にはならないはずですが、そうであるかどうかはわかりません。

最初の変更として、次の行を移動してみてください。

String xmlReply = "<?xml version=\"1.0\"?><feeds>";

ローカル変数としてメソッドに追加します。

その後:

  • すべてのフィールドを非公開にする
  • このようなループで文字列連結を使用しないでください
  • さらに重要なのは、手動で XML を作成しないでください。XML API を使用して作成することです。(組み込みの Java API は良くありませんが、代替手段はたくさんあります。)
  • これらのフィールド (存在する場合) のどれが、ローカル変数である必要があるものではなく、実際にオブジェクトの状態であるかを検討してください。あなたのオブジェクトは論理的にどのような状態にありますか?
于 2012-08-30T06:13:47.553 に答える