我想使用JAXB unmarshaller将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文件还包含其他数据并且已经解组,但遗憾的是,来自元素first
和second
的数据未被解组。我尝试将这些字段上的@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;
}
答案 0 :(得分:3)
您需要添加零参数构造函数,或为XmlAdapter
类创建Pair
以使其正确解组(请参阅:http://blog.bdoughan.com/2010/12/jaxb-and-immutable-objects.html)。
我正在使用JAXB marshaller,当我进行调试时 非编组元素,它有错误的类型。 ElementNSImpl而不是 整数。
就JAXB而言,first
和second
将被视为类型Object
,因为它在类级别Pair
instenad中派生类型级别的元数据{ {1}}。因此,XML需要使用必要的类型信息来限定XML元素。这是使用Pair<Integer, Integer>
属性完成的。
xsi:type
尝试使用您想要的数据填充对象模型,然后对其进行编组,您将看到XML应该是什么样的解组操作。