2

@XmlJavaTypeAdapter が @XmlSeeAlso とどのように連携するかがわかりません。抽象クラスがあり、それを拡張するクラスのそのクラスにも参照を指定します。

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

そして、 Position には引数のないコンストラクターがないため、アダプターを使用して機能させます。

@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