2

我无法弄清楚@XmlJavaTypeAdapter 如何与@XmlSeeAlso 一起使用。我有一个抽象类,并且我在该类中指定了另一种扩展它的类:

@XmlSeeAlso({Position.class})
public abstract class Component implements Serializable {
    ...

由于 Position 没有无参数构造函数,因此我使用 Adapters 使其工作:

@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());
    }

}

有谁知道这背后的原因以及我做错了什么?

谢谢

4

1 回答 1

0

您运行哪个代码来查看该错误?无法重现它。

    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>
于 2014-01-13T09:59:47.507 回答