0

次のコードでは:

try{
....
}

    catch(Exception e)
    {
            logger.error("Exception caught in method: \n");
            logger.error(e.getMessage());
            String fault = "<Fault><FaultCode>" + e.getClass().getName() + "</FaultCode><FaultDescription>" + e.getMessage() + "</FaultDescription></Fault>";
            return XmlObject.Factory.parse(fault);
    }

、例外をスローしない、または例外処理を必要としないコードを使用して、「エラー」文字列を XML オブジェクトに変換する方法はありますか?

基本的に、メソッドが throws 節を使用せずに、成功と失敗の両方のシナリオで XML オブジェクトを返す必要があります。そのため、ParserConfiguration、IOExceptoin、XmlException など、メイン フローで発生する可能性があるすべての特定の例外ケースをキャッチから削除し、一般的なものを保持し、必要な障害情報を収集する文字列をハード コーディングしました。 XML オブジェクトとして戻します。ただし、この最小限のコーディングでも、parse() メソッドで XmlException が発生する可能性があります。errorConfig ファイルからの読み取りや別の XML オブジェクトの作成など、他の方法では、処理する例外がさらに発生します。

では、そのようなコード、つまり XML を返す例外のない catch ブロックを開発することさえ可能かどうかを知りたいだけですか? または、誰かが他のアプローチを推奨できる場合は、それも問題ありません。

参考までに: メイン コードは、基本的に XML を変換するか、さらにタグを追加してそれを充実させ、それを返します。

私が自分自身を明確にしたことを願っています。

4

1 に答える 1

1

パーサーが XML を解析できない (そして例外で中止する) 場合、どこから XML オブジェクトを取得しますか?

操作フローで XML 例外が実際に発生することはあり得ないと思われる場合 (コンパイラーはもちろん保証できません)、それを想定して、例外をキャッチし、「おっと、それは発生してはならない」をログに記録し、再スローします。もう心配する必要はありません (決して起こらないでしょう?)

String fault = "<Fault><FaultCode>" + e.getClass().getName() + 
  "</FaultCode> <FaultDescription>" + e.getMessage() 
   + "</FaultDescription></Fault>";
return XmlObject.Factory.parse(fault);

(そのエラー メッセージがエスケープする必要がない場合)、これが失敗することはないと確信できます。ということで、上記のパターンに当てはまります。

それが「checked-exception-free」かどうかはわかりませんが、XML 文字列を忘れて再解析し、代わりにプログラムで DOM を構築することができます。

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  Document doc = dbf.newDocumentBuilder().newDocument();
  Element rootElement = doc.createElement("fault");
  // etc ...

それが「チェック例外なし」かどうかはわかりませんが、

Javadocs を見る: いいえ。あらゆる種類の構成例外。:-(

于 2013-05-21T06:10:08.743 に答える