Маршаллинг с МОКСИ - PullRequest
       3

Маршаллинг с МОКСИ

1 голос
/ 07 марта 2011

У меня нет проблем при демонтаже с MOXy.Это XML, который я распаковал.

<eng><shape type="square"><square-specific>dasdasdas</square-specific></shape></eng>

Но при сортировке я получаю следующее:

<eng><shape><type/><square-specific>dasdasdas</square-specific></shape></eng>

Вот мои файлы моделей:

@XmlRootElement(name="eng")
public class Eng {

    private Shape shape;

    public void setShape(Shape shape) {
        this.shape = shape;
    }

    @XmlElement
    public Shape getShape() {
        return shape;
    }
}


@XmlDiscriminatorNode("type")
public abstract class Shape {

}


@XmlDiscriminatorValue("square")
public class Square extends Shape {

    private String squareSpecificAttribute;

    @XmlElement(name="square-specific")
    public String getSquareSpecificAttribute() {
        return squareSpecificAttribute;
    }

    public void setSquareSpecificAttribute(String s) {
        this.squareSpecificAttribute = s;
    }
}

И этот метод в моем контроллере:

@GET
@Produces(MediaType.APPLICATION_XML)
public Eng get(){
    Eng e = new Eng();
    Square s = new Square();
    s.setSquareSpecificAttribute("dasdasdas");
    e.setShape(s);

    return e;
}

Я предполагаю, что что-то упустил, есть идеи, что бы это могло быть?

Спасибо.

1 Ответ

1 голос
/ 07 марта 2011

@ Узел XmlDescriminator принимает XPath.Чтобы указать, что тип является атрибутом, вы можете сделать следующее:

@XmlDescriminatorNode("@type")

Например, см .:

...