如何使用JAXB Java类型适配器
我很难弄清楚@XmlJavaTypeAdapter如何与@xmlsee一起工作。我有一个抽象类,并在该类中为扩展它的类指定see:如何使用JAXB Java类型适配器,java,xml,jaxb,Java,Xml,Jaxb,我很难弄清楚@XmlJavaTypeAdapter如何与@xmlsee一起工作。我有一个抽象类,并在该类中为扩展它的类指定see: @XmlSeeAlso({Position.class}) public abstract class Component implements Serializable { ... 由于Position is没有无参数构造函数,我使用适配器使其工作: @XmlJavaTypeAdapter(PositionAdapter.class) public cl
@XmlSeeAlso({Position.class})
public abstract class Component implements Serializable {
...
由于Position is没有无参数构造函数,我使用适配器使其工作:
@XmlJavaTypeAdapter(PositionAdapter.class)
public class Position extends Component{
...
然而,JAXB似乎忽略了这一点,我仍然得到“…没有无参数默认构造函数”错误
这是我的适配器:
public class AdaptedPosition {
private double x;
private double y;
@XmlElement(name = "x")
public double getX(){
return x;
}
@XmlElement(name="y")
public double getY(){
return y;
}
public void setX(double x){
this.x = x;
}
public void setY(double y){
this.y = y;
}
}
public class PositionAdapter extends XmlAdapter<AdaptedPosition, Position>{
@Override
public AdaptedPosition marshal(Position position) throws Exception {
AdaptedPosition adaptedPosition = new AdaptedPosition();
adaptedPosition.setX(position.getX());
adaptedPosition.setY(position.getY());
return adaptedPosition;
}
@Override
public Position unmarshal(AdaptedPosition position) throws Exception {
return new Position(position.getX(), position.getY());
}
}
公共类适配位置{
私人双x;
私人双y;
@xmlement(name=“x”)
公共双getX(){
返回x;
}
@xmlement(name=“y”)
公共双盖{
返回y;
}
公共无效集x(双x){
这个.x=x;
}
公共空间设置(双y){
这个。y=y;
}
}
公共类PositionAdapter扩展了XmlAdapter{
@凌驾
public AdaptedPosition封送员(位置)引发异常{
AdaptedPosition AdaptedPosition=新的AdaptedPosition();
adaptedPosition.setX(position.getX());
adaptedPosition.setY(position.getY());
返回自适应位置;
}
@凌驾
公共位置解组(AdaptedPosition Position)引发异常{
返回新位置(Position.getX(),Position.getY());
}
}
有人知道这背后的原因和我做错了什么吗
谢谢您运行了哪些代码来查看该错误?不能复制它
Marshaller marshaller = JAXBContext.newInstance(SomeElement.class).createMarshaller();
SomeElement element = new SomeElement();
element.setPosition(new Position(1, 1));
marshaller.marshal(element, System.out);
这将输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><someElement><position><x>1.0</x><y>1.0</y></position></someElement>
1.01.0