2017-12-21 19 views
0

私はapache-camelでMyBatisを実行しています。ObjectFactoryとMyBatis、結果をJAXBElement <XmlGregorianCalendar>にマッピング

クエリの結果には、jdbcType = "DATE"形式のデータが含まれています。私は、データをJAXBオブジェクト(xsdスキームから生成)に設定するために使用しているSQL日付とXMLGregorianCalendar日付型の間の変換を処理する私のカスタムObjectTypeHandlerを書きました。

JAXBクラスのすべてのフィールドがraw XMLGregorianCalendar値を受け入れるわけではなく、JAXBElementが必要なように定義されているものもあります。

これを解決するにはObjectFactoryインスタンスを使用できますが、JAXBElementを入力として(ObjectFactoryで独自のcreate *メソッドを使用するため)、各フィールドにカスタムObjectTypeHandlerを記述する必要があります。それは、定型的で重複したコードのように思えます。

もっと丁寧に対応することは可能ですか?

+1

JAXBオブジェクトを生成する際に、グローバルバインディング(xjbファイル内)を使用しないのはなぜですか?私はXJCコンパイラが正しく処理すると思います。 – Vadim

+0

@Vadimグローバルバインディングの使用方法にリンクできますか? – Dmitriy

答えて

0

私は@Vadim勧告を使用してこの問題を解決:

ジャスト(JAXBElementラッパーの発生を回避するfalsegenerateElementPropretyセット付き)xjbファイルを定義し、XSDスキームからPOJOの生成中にXJCコンパイラに供給する。例えば

bindings.xjbコマンド経由

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jaxb:globalBindings generateElementProperty="false"/> 
</jaxb:bindings> 

スタートXJCコンパイラ:

xjc *.xsd -d ../../java -b bindings.xjb 

この例にあるスキームファイル(*.xsd)から../../javaディレクトリにPOJOファイルを生成bindings.xjbファイルの追加設定を使用して作業ディレクトリにコピーします。

ありがとう、@ Vadim、正しい方向を指しています!

関連する問題