Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JAXB Java类型适配器_Java_Xml_Jaxb - Fatal编程技术网

如何使用JAXB Java类型适配器

如何使用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

我很难弄清楚@XmlJavaTypeAdapter如何与@xmlsee一起工作。我有一个抽象类,并在该类中为扩展它的类指定see:

@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