13

ONIX XML 形式の XML メッセージを受け入れる JAX-RS (Jersey) REST サービスを作成しました。通常、xjc を使用して、特定のスキーマから JAXB バインディングに必要なすべてのクラスを生成しました。全体で 500 以上のクラスがあり、それらを変更することはできません。

ここで、JAXB マップ オブジェクトを取得したら、それをデータベースに格納する必要があります。私は mongoDb を使用しているため、メッセージ形式は JSON にする必要があります。JAXBモジュールでJacksonを使用して、JAXBオブジェクトをJSONに変換しようとしました。これは、データの保存で非常にうまく機能します。しかし、JSON を JAXB オブジェクトに変換しようとすると、何らかの方法で JAXBElement に接続された例外がスローされます。Google では、Jackson で JAXBElement がサポートされていないことがわかりました。この問題を回避する必要があります。しかし、JAXBで生成されたクラスを変更できないため、できません。

JAXB オブジェクトを他の方法で JSON にマップする方法はありますが、JAXB 仕様全体に従っているため、JSON から JAXB オブジェクトおよびビザベラに変換する際に問題が発生することはありませんか?

4

2 に答える 2

8

Jackson を使用しているため、 を使用ObjectMapperしてJaxbAnnotationModuleを作成し、値を書き出すことができます。以下は、JAXB アノテーション付きオブジェクトをシステム出力に書き込むためのコードです。

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JaxbAnnotationModule());
        mapper.writeValue(System.out, jaxbObject);

このアプローチは、 GLASSFISH-21141 に従ってClassNotFoundException を引き起こすコンテナーによって指定されたプロバイダーを利用しないため、Glassfish でも機能します。

于 2014-10-10T02:17:22.683 に答える