Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Jackson/JAXB不带包装器元素的序列化列表_Xml_Xml Serialization_Jackson_Jaxb2_Adobe Analytics - Fatal编程技术网

Xml Jackson/JAXB不带包装器元素的序列化列表

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

我正在尝试使用将映射序列化为XML。我正在将映射转换为一个列表,以便使用映射键作为元素名,使用值作为元素值,我已经非常接近于获得所需的XML

我的班级看起来像:

@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>