[英]Apache CXF JAXB Marshaller not marshalling @XmlAttribute correctly
我试图从以下格式的基于我的基于CXF 3.1版的REST服务获取XML响应。
<root>
<element a="X" b="1.2" c="3.2"/>
<element a="Y" b="5.5" c="1.4"/>
<element a="Z" b="54.2" c="55.4"/>
</root>
我已将DTO定义如下:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="root")
public class Root{
private List<Element> element;
---getters setters and no arg constructor--
}
@XmlType(propOrder = {
"a","b","c"})
@XmlRootElement(name="element")
public class Element{
@XmlAttribute
private String a;
@XmlAttribute
private Double b;
@XmlAttribute
private Double c;
---Getter Setter---
}
我没有覆盖任何映射器,因此默认的CXF JAXB xml映射器正在运行。
但我的xml响应如下: -
<root>
<element>
<element>
<a>X</a>
<b>1.2</b>
<c>3.2</c>
</element>
<element>
<a>Y</a>
<b>5.5</b>
<c>1.4</c>
</element>
<element>
<a>Z</a>
<b>54.2</b>
<c>55.4</c>
</element>
</element>
</root>
我也检查了Moxy API选项,但我无法使用。 有人可以请帮助我的代码有什么问题或缺少什么?
提前致谢
花了很长时间后,我发现了问题,然后找出了解决方案。
问题
问题是apache cxf默认为marshaller,即JAXB没有遵守属性注释,因此将字段重新表示为元素而不是属性。
解
由于默认的序列化和反序列化机制,即JAXB不起作用,因此我们需要覆盖它。 在这里,我的问题通过使用Jackson作为序列化和反序列化api得到了解决。
Jackson以2.0版本开头提供JSON和XML格式,并为此提供了特定的xml注释。
使用@JacksonXmlProperty,将属性设置为true,然后重写ObjectMapper bean,如下所示解决了问题。
@Bean
public ObjectMapper objectMapper(){
ObjectMapper objectMapper= new ObjectMapper();
//overriding apache cxf JAXB mapper to use jackson mapper.
AnnotationIntrospector introspector = new JacksonAnnotationIntrospector();
objectMapper.setAnnotationIntrospector(introspector);
return objectMapper;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.