作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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 文件还有其他数据并且未编码,不幸的是来自元素 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;
}
最佳答案
您将需要添加一个零参数构造函数,或创建一个 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而言first
和 second
将被视为类型 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/
我是一名优秀的程序员,十分优秀!