3

私は、ローカルの交通機関からオープンデータをクエリして出力するプログラムを開発しています。このデータは、XML応答の形式で返されます。

通常、数時間以内に運行する予定のバスがある場合(およびその他の一般的な状況)、ページによって生成されたXML応答はjava.net.URLConnection.getInputStream()関数によって正しく処理され、後で個々の結果を印刷できます。

問題は、バスが実行されていない場合、またはバスが交通機関のWebサーバーに送信された後にクエリに関するその他の問題が発生した場合です。当局がサービスを開発したとき、彼らは独自のエラー応答コードを思いつきました。これもXMLとして送信されます。たとえば、次のエラーメッセージの1つは次のようになります。

<Error xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Code>3005</Code>
<Message>Sorry, no stop estimates found for given values.</Message>
</Error>

(このコードと同様のものは、そのような状況で交通機関から受け取るすべてのものです。)

ただし、URLConnection.getInputStream()その兄弟の一部は、このカスタムコードを、エラーメッセージとして処理および出力できる「有効な」応答として解釈できないようです。代わりに、より一般的なHTTP/1.1 404 Not Foundエラーが発生します。この問題は私のプログラムにカスケードされjava.io.FileNotFoundException、問題のある入力ストリームを指すエラーが出力されます。

したがって、私の質問は2つあります。

1. Javaで利用可能なプラグインを使用して、Webサービスによって送信されたカスタムXML形式のエラーコードを取得、解析、および印刷する方法はありますか?

2.上記が不可能な場合、説明されているようなカスタムコードを処理するために、他にどのようなツールを使用または開発する必要がありますか?

4

1 に答える 1

0

URLConnection私の意見では、REST の役割を果たせません。また、 を使用している場合getInputStream、文字エンコーディングを正しく処理していないことはほぼ確実です。

Spring のRestTemplateを確認してください。非常に使いやすく ( と同じくらい簡単URLConnectionです)、強力で柔軟です。デフォルトのものは404で例外をスローするため、を変更する必要がありますがResponseErrorHandler、続行して応答のXMLを解析したいようです。

于 2012-12-02T18:06:40.357 に答える