2016-10-24 72 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