簡體   English   中英

如何使用JAXB Java類型適配器

[英]How to use JAXB Java Type Adapters

我在弄清楚@XmlJavaTypeAdapter如何與@XmlSeeAlso一起工作時遇到了麻煩。 我有一個抽象類,並在該類中指定了擴展它的類:

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

並且由於Position是沒有no arg構造函數,所以我使用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());
    }

}

有人知道這背后的原因以及我在做什么錯嗎?

謝謝

您運行哪個代碼來看到該錯誤? 無法重現。

    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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM