JAXB编组和泛型
我正在尝试使用JAXB的自省功能来编组和分解所有使用JAXB批注标记的现有域对象。大多数事情都按预期运行,但是要获得一个相当简单的类进行序列化,我会遇到很多麻烦。此类在许多bean上用作@XmlElement,看起来像:
public class Range<E extends Comparable<E>> implements Serializable { protected boolean startInclusive, endInclusive;
protected E start, end;
public Range(){
startInclusive = endInclusive = true;
}
public boolean contains(E value){...}
public E getEnd() {
return end;
}
public void setEnd(E end) {
this.end = end;
}
public boolean isEndInclusive() {
return endInclusive;
}
public void setEndInclusive(boolean endInclusive) {
this.endInclusive = endInclusive;
}
public E getStart() {
return start;
}
public void setStart(E start) {
this.start = start;
}
public boolean isStartInclusive() {
return startInclusive;
}
public void setStartInclusive(boolean startInclusive) {
this.startInclusive = startInclusive;
}
}
我尝试执行以下操作,但没有成功,JAXB仍然对接口Comparable感到愤怒。
public class DoubleRange extends Range<Double> {}
将Range和DoubleRange都用作bean getter的返回类型会产生如下异常:
java.lang.Comparable是一个接口,JAXB无法处理接口。 此问题与以下位置有关:
在java.lang.Comparable
在受保护的java.lang.Comparable com.controlpath.util.Range.start处
在example.util.Range
在example.util.DoubleRange
在公共example.util.DoubleRange example.domain.SomeBean.getRange()
在example.domain.SomeBean
我意识到在大多数情况下List
回答:
您可以通过执行以下操作来编写自定义适配器(不使用JAXB的XmlAdapter):
1)声明一个接受各种元素并具有JAXB批注的类,并按需要处理它们(在我的示例中,我将所有内容都转换为String)
@YourJAXBAnnotationsGoHerepublic class MyAdapter{
@XmlElement // or @XmlAttribute if you wish
private String content;
public MyAdapter(Object input){
if(input instanceof String){
content = (String)input;
}else if(input instanceof YourFavoriteClass){
content = ((YourFavoriteClass)input).convertSomehowToString();
}else if(input instanceof .....){
content = ((.....)input).convertSomehowToString();
// and so on
}else{
content = input.toString();
}
}
}
// I would suggest to use a Map<Class<?>,IMyObjToStringConverter> ...
// to avoid nasty if-else-instanceof things
2)在您要编组的班级中使用此类而不是E
- 当然,这 用于复杂的(嵌套)数据结构。
- 您必须考虑如何再次将其解组,这可能会更加棘手。如果太棘手,请等待比我更好的建议;)
以上是 JAXB编组和泛型 的全部内容, 来源链接: utcz.com/qa/411831.html