4

unmarshall(Javaオブジェクトに変換)する必要のあるxmlファイルがあります。現在、Javaオブジェクトはサードパーティのものであり、マーシャリング解除のために注釈を付けることはできません。注釈なしでアンマーシャリングする方法に関するアイデア。以下の私のコードスニペットを見つけてください

JAXBContext context;
        try {
            context = JAXBContext.newInstance(Abc.class);
            Unmarshaller unMarshaller = context.createUnmarshaller();
            Abc abc= (Abc) unMarshaller.unmarshal(new FileInputStream("C:\\Documents and Settings\\sandeep.nair\\Desktop\\abc.xml"));
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (Exception e){

        }

次の例外が発生します。引数なしのコンストラクター(Adapterのアノテーションを追加することでこれを解決できることはわかっていますが、アノテーションなしで処理するためのサンプルスニペットを知りたい、または見たいです)

同様に、JAXBでインターフェイスを処理できないという別のメッセージが表示されます。

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:IllegalAnnotationExceptionsの5つのカウントjava.sql.Timestampには、引数なしのデフォルトコンストラクターがありません。この問題は、次の場所に関連しています。java.sql.Timestamp at public java.sql.Timestamp com.test.Abc.getSomeTimestamp()atcom.riteaid.entities.customer.Customercom.test.Defにはno-argデフォルトコンストラクタ。この問題は、次の場所に関連しています:com.test.Def .. ..

java.sql.Dateには、引数なしのデフォルトコンストラクタがありません。この問題は、次の場所に関連しています。at java.sql.Date ... com.test.Ghiはインターフェースであり、JAXBはインターフェースを処理できません。この問題は、次の場所に関連しています。...com.test.Ghiには引数なしのデフォルトコンストラクターがありません。この問題は、次の場所に関連しています。

4

1 に答える 1

4

注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB(JSR-222)エキスパートグループのメンバーです。

JAXBは例外による構成であるため、デフォルトのマッピング動作をオーバーライドする場合にのみアノテーションを追加する必要があります。

メタデータを提供する標準的な方法は、注釈を使用することです。サードパーティのクラスなど、注釈を付けることができない状況では、MOXyの外部マッピングドキュメント拡張機能に関心があるかもしれません。

とタイプXmlAdapterを処理するために使用できます。javax.sql.Datejavax.sql.Timestamp

于 2012-08-22T19:39:13.743 に答える