2016-10-24 133 views
0

你好,我需要配置fastxml.Jackson序列化程序作爲默認的JAXB序列化程序工作。傑克遜XML序列化XMLElementRef名稱

我有以下的情況下,兩個類:

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

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

} 

我的對象映射器的配置是這樣的:

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); 

我需要配置ObjectMapper傑克遜串行產生以下XML

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

但我得到這個:

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

我該如何配置Object Mapper才能獲得預期的結果?謝謝。

我不能更改類和註解,因爲這是框架的一部分。

我能影響的唯一東西是ObjectMapper和Jackson配置。

+0

我有一個框架與類A和B和相應的註釋。我既不能改變課程,也不能改變他們的註釋。我需要配置ObjectMapper或jackson配置,它可以像JAXB一樣識別註釋。 – 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