1

ジャクソンと連携する JaxB アノテーション @XmlJavaTypeAdapter の例はありますか? List オブジェクトをシリアル化しようとすると、機能しません。

私のシナリオは次のようなものです。Bean は自動生成され、さまざまなモジュールが Bean に基づいて XML/JSON データを生成するため、XML 注釈を使用する必要があります - 私が持っているものの例 -

インターフェイス A、抽象クラス B は A を実装し、多くの Bean は B から派生しています。Bean クラス C があり、

@XmlJavaTypeAdapter(A.class, AAdapter.class)

クラスC {

String type;

List<B> listOfBeans;

}

クラス AAdapter は XmlAdapter を拡張します{

@Override
public Object marshal(A a)
    throws Exception {
if (a == null) {
    return null;
}
if (a.isItDerivedFromB()) {
    return a;
}  else {
    return otherAdapter.getInstance().marshal(()a);
 }
}

}

C のオブジェクトをシリアル化しようとすると、有効なオブジェクトがすべて含まれているにもかかわらず、リストの出力が常に空になります。リスト オブジェクト B のシリアライザー (unknownSerializer を呼び出す) が見つからないようです。

{ "listOfBeans" : [ { }, { } ], "type" : "holderForListOfBeans" }

私のオブジェクトマッパーは-

private ObjectMapper initializeJackson() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setDateFormat(new SimpleDateFormat(TWS_DATE_FORMAT));
    mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
    mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    mapper.setSerializationInclusion(Include.NON_NULL);

    // Need to use JaxB Annotation.
    JaxbAnnotationModule module = new JaxbAnnotationModule();
    mapper.registerModule(module);

    // All 64 bit fields should be quoted. Use StringSerializer for them.
    SimpleModule mySimpleModule = new SimpleModule();
    mySimpleModule.addSerializer(Long.class, new ToStringSerializer());
    mySimpleModule.addSerializer(Double.class, new ToStringSerializer());
    mapper.registerModule(mySimpleModule);

    return mapper;
}
4

0 に答える 0