Xml Jackson/JAXB不带包装器元素的序列化列表
我正在尝试使用将映射序列化为XML。我正在将映射转换为一个列表,以便使用映射键作为元素名,使用值作为元素值,我已经非常接近于获得所需的XML 我的班级看起来像:Xml Jackson/JAXB不带包装器元素的序列化列表,xml,xml-serialization,jackson,jaxb2,adobe-analytics,Xml,Xml Serialization,Jackson,Jaxb2,Adobe Analytics,我正在尝试使用将映射序列化为XML。我正在将映射转换为一个列表,以便使用映射键作为元素名,使用值作为元素值,我已经非常接近于获得所需的XML 我的班级看起来像: @JacksonXmlRootElement(localName = "request") public class TrackingEvent { private List<JAXBElement<String>> data = new ArrayList<JAXBElement<Strin
@JacksonXmlRootElement(localName = "request")
public class TrackingEvent {
private List<JAXBElement<String>> data = new ArrayList<JAXBElement<String>>();
public TrackingEvent() {}
public TrackingEvent addData(String key, String value) {
data.add(new JAXBElement<String>(new QName(key), String.class, value));
return this;
}
public Map<String, String> getData() {
Map<String, String> dataAsMap = new HashMap<String, String>(data.size());
for (JAXBElement<String> elem : data) {
dataAsMap.put(elem.getName().getLocalPart(), elem.getValue());
}
return Collections.unmodifiableMap(dataAsMap);
}
}
下面是它生成的XML:
<?xml version='1.0' encoding='UTF-8'?>
<request>
<data>
<eVar17>woohoo</eVar17>
</data>
</request>
呜呼
但我要找的是:
<?xml version='1.0' encoding='UTF-8'?>
<request>
<eVar17>woohoo</eVar17>
</request>
呜呼
我已经尝试向数据声明及其getter添加@JacksonXmlElementWrapper(useWrapping=false)注释,但这似乎没有任何作用。我可以将@JacksonXmlProperty(localName=“moop”)添加到声明/getter中来更改元素的名称,但无法确定如何完全忽略它
我很确定我也可以从阅读中使用JAXB注释,但也没有通过谷歌找到任何东西
您可能会猜到,我正在尝试创建一个表示Omniture数据的XML文档,并尝试以一种不必在POJO中显式包含它们的方式发送所有eVar和prop变量
我的解决方案
我决定放弃使用Jackson,因为我需要的XML没有那么复杂,但是强迫Jackson做我想做的事情变得越来越复杂。我决定使用STAX2直接编写XML,使用Jackson在封面下使用的相同实现。这使我可以根据需要自定义XML
Blaise的回答似乎完全符合我的要求。FYI-这里是如何使用EclipseLink JAXB(MOXy)实现的:嗯,我研究了使用MOXy来实现这一点,看起来它完全符合我的要求。然而,我们使用Nexus来帮助我们的Maven回购协议,显然让Nexus获得JAR是有解决办法的,我不是Nexus管理员,也不愿意为这一个JAR提出所有的更改。基本上,将MOXy JAR引入到项目中需要做很多额外的工作,这使得此解决方案成为不可能。哦,看来Jackson在2.1.x版本中的XML数据绑定应该允许这样做。
<?xml version='1.0' encoding='UTF-8'?>
<request>
<eVar17>woohoo</eVar17>
</request>