3

XmlAdapter でユーザー定義の例外をスローし、JAXB がマーシャリング/アンマーシャリングするときにそれらをキャッチする方法はありますか? つまり、私は独自の例外をスローできますが、JAXB はこの例外を無視して独自の例外をスローし、そこから例外メッセージまたは例外オブジェクトにアクセスできません。

try {
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
    jaxbUnmarshaller.unmarshal(inputStream);
}
catch (UserDefinedException e) {
    // Do something.
}

私の代わりに JAXB がスローした正しい例外を投稿していないことをお詫びします。現時点では、コードにアクセスできません。現在、JAXB-RI を使用していますが、EclipseLink MoXY を使用したところ、この問題が発生しました。

コードを手に入れることができたら、追加のデータを投稿します。しかし、それまでは、誰かが私が話していることを知っているかもしれません. XmlAdapter の正しい使い方のコード例も素晴らしいです。

ありがとう。

4

1 に答える 1

1

JAXB (JSR-222)実装で期待されるのは、 JAXBException. これは、 のようなものでスローされた例外XmlAdapterが最終的にラップされることを意味します。XmlAdapterこのユースケースを処理するために、ステートフルを使用できる可能性があります。

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
MyXmlAdpater myXmlAdapter = new MyXmlAdapter();
jaxbUnmarshaller.setAdatper(myXmlAdapter);
jaxbUnmarshaller.unmarshal(inputStream);
if(myXmlAdapter.hasException() {
    // Do something.
}

ステートフルの使用例については、以下をXmlAdapter参照してください。

于 2012-04-25T16:34:49.987 に答える