2016-10-24 23 views
0

こんにちは私は、デフォルトのJAXBシリアライザとして正確に動作するようにfastxml.Jacksonシリアライザを設定する必要があります。ジャクソンXMLシリアル化XMLElementRef名前

I持っている二つのクラスでは、次の場合:

@XmlRootElement(name = "elA") 
public class A { 
    @XmlElementRef 
    public Collection<B> getBs() { 
     return this.bs; 
    } 
} 

@XmlRootElement(name = "elB") 
public class B { 

} 

マイオブジェクトマッパーの設定は次のようになります。

私はジャクソンシリアライザは、次のXMLを生成するためObjectMapperを設定する必要が
XmlMapper objectMapper = new XmlMapper(); 
JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule(); 
objectMapper.registerModule(jaxbAnnotationModule); 

objectMapper.setDefaultUseWrapper(false); 
objectMapper.configure(SerializationFeature.INDENT_OUTPUT,true); 
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,false); 
objectMapper.configure(SerializationFeature.CLOSE_CLOSEABLE, true); 
objectMapper.setSerializationInclusion(Include.NON_ABSENT); 

JaxbAnnotationIntrospector jaxbAnnotationIntrospector = new XmlJaxbAnnotationIntrospector(objectMapper.getTypeFactory()); 
objectMapper.setAnnotationIntrospector(jaxbAnnotationIntrospector); 

<elA> 
    <elB></elB> 
    <elB></elB> 
</elA> 

しかし、私はこれを得ます:

<A> 
    <bs></bs> 
    <bs></bs> 
</A> 

期待どおりの結果を得るためにObject Mapperを設定する必要がありますか?ありがとうございました。

これはフレームワークの一部であるため、クラスも注釈も変更できません。

私が影響を与えることができるのは、ObjectMapperとJacksonの設定だけです。

+0

私はクラスAとBと対応する注釈を持つフレームワークを持っています。私はクラスやその注釈を変更することはできません。 JAXBと同じように注釈を認識するObjectMapperまたはjackson Configurationsを設定する必要があります。 – Michael

答えて

0
@XmlRootElement(name = "elA") 
public class ElA{ 
@XmlElementRef 
public Collection<B> getElB() { 
    return this.elb; 
} 
} 

@XmlRootElement(name = "elB") 
public class ElB{ 

} 
+0

クラスAとクラスBの構造は、レガシーコードの一部であるため変更できません。 – Michael

+0

@XmlRootElement(name = "elB")から@XmlElement(name = "elB")に変更しました – Mahi

+0

ありがとうございましたが、注釈やクラスはレガシーコードに属するため変更できません。 – Michael