2012-04-25 14 views
3

XmlAdapterでユーザー定義例外をスローし、JAXB marshalles/unmarshallsを捕捉する方法はありますか?つまり、私は自分自身の例外をスローすることができますが、JAXBはこの例外を無視して自分の例外メッセージまたは例外オブジェクトに到達できない自分自身をスローします。XmlJavaTypeAdapter throw user defined exception

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

申し訳ありませんが、JAXBが私の代わりにスローした正しい例外を投稿していません。現時点では、私はコードに到達することはできません。現時点ではJAXB-RIを使用していますが、EclipseLink MoXYを使用してこの問題が発生しました。

私はコードを手に入れることができるときに追加データを掲載します。しかしそれまで、誰かが私が何を話しているのか知っていたかもしれません。 XmlAdapterの正しい使い方のコード例もあります。

ありがとうございました。

答えて

1

JAXB (JSR-222)の実装では、​​がスローされます。つまり、XmlAdapterのようなものの中でスローされた例外はすべてラップされることになります。あなたは、潜在的にこのユースケースを処理するために、ステートフルXmlAdapterを使用することができます。

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

ステートフルXmlAdapter参照を使用しての例の場合:これは魔法のように動作

+1

まあブレーズ、 。ありがとう。私はEclipseLink MOXyに戻りました。私はXmlAdaptersとJAXB-RI Antのスキーマ作業に問題がありましたが、MOXyのschmea生成で問題はありました。このコメントを読んでいる人には、JAXBのニーズに合わせてEclipseLink MOXyを使用することを強くお勧めします。それはあなたにたくさんの神経と時間を節約します。 –

関連する問題