gpt4 book ai didi

java - 如何将 XML 解码到此类?

转载 作者:行者123 更新时间:2023-11-30 08:18:32 24 4
gpt4 key购买 nike

我想使用 JAXB 解码器将 XML 解码到这种类型的对象。

public class Pair<T1,T2> implements Serializable {
private T1 first;

private T2 second;

public Pair(T1 first, T2 second) {
this.first = first;
this.second = second;
}

public T1 getFirst() {
return first;
}

public void setFirst(T1 first) {
this.first = first;
}

public T2 getSecond() {
return second;
}

public void setSecond(T2 second) {
this.second = second;
}
}


public class TripPair<T1,T2> extends Pair<T1,T2> {

public TripPair(T1 first, T2 second) {
super(first, second);
}
}

public class Fare extends Pricing implements Comparable<Fare> {

private List<TripPair<Integer,Integer>> trips = new LinkedList<>();
}

XML文件

<fareGroups>
<trips>
<second>37</second>
<first>0</first>
</trips>
</fareGroups>

XML 文件还有其他数据并且未编码,不幸的是来自元素 firstsecond 的数据未编码。我尝试将这些字段上的 @XmlElement 注释添加到 Pair 类,但没有成功。

使用XmlAdapter

public class PairAdapter extends XmlAdapter<String, Integer> {

public String marshal(Integer val) throws Exception {
return val.toString();
}

public Integer unmarshal(String val) throws Exception {
return Integer.valueOf(val);
}
}

public class Pair<T1,T2> implements Serializable {
@XmlJavaTypeAdapter(PairAdapter.class)
private T1 first;

@XmlJavaTypeAdapter(PairAdapter.class)
private T2 second;
}

最佳答案

您将需要添加一个零参数构造函数,或创建一个 XmlAdapter对于 Pair类使其正确解码(参见:http://blog.bdoughan.com/2010/12/jaxb-and-immutable-objects.html)。

更新

I'm using JAXB marshaller for it and when I made a debugging of non-marshalled element, it has wrong type. ElementNSImpl instead of Integer.

就JAXB而言firstsecond将被视为类型 Object ,因为它在类级别派生元数据 Pair instenad 类型级别 Pair<Integer, Integer> .因此,XML 需要用必要的类型信息来限定 XML 元素。这是使用 xsi:type 完成的属性。

public class Pair<T1,T2> implements Serializable {
private T1 first;

private T2 second;

尝试用您想要的数据填充您的对象模型,然后对其进行编码,您将看到用于解码操作的 XML 应该是什么样子。

关于java - 如何将 XML 解码到此类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com