2010-07-01 3 views
1

Интересно, возможно ли это в jaxb2. У меня есть xml, который может быть либо < element>, либо < element2> он никогда не появится в какой-то момент. Они оба типа String, и я хочу, чтобы он сопоставлялся с тем же свойством в моем классе java. Есть ли способ в jaxb2 настроить это?Jaxb 2 сопоставление другого элемента с тем же свойством

Благодаря Charlie

ответ

1

Что бы произошло, если бы вы пытались сериализовать обратно в XML? Какое имя элемента будет использоваться?

Предполагая, что вам нужно только десериализации из XML в Java, то вы можете сделать это, аннотирования ваши методы установщики вместо ваших полей:

public class Bean { 

    private String value; 

    @XmlElement(name="element") 
    public void setA(String value) { 
     this.value = value; 
    } 

    @XmlElement(name="element2") 
    public void setB(String value) { 
     this.value = value; 
    } 
} 

Вы также, возможно, придется добавить getA() и getB() методы для того, чтобы JAXB правильно распознает сеттеры.

+3

Да в моей ситуации я только когда-либо маршализация сообщений для объекта. Тем не менее, я хочу, чтобы он сопоставлялся с тем же свойством get, поэтому мне не нужно использовать if (getA == null) getB; Tho Я нашел ответ на этот вопрос, используя @XmlElements ({@XmlElement (name = "element"), @XmlElement (name = "element2")}) Спасибо за усилие. – charleetm

1

Вы можете сделать что-то подобное:

@XmlElements({ 
    @XmlElement(name="command", type=CommandVO.class, namespace="http://chains.projetox.com.br/"), 
    @XmlElement(name="script", type=ScriptVO.class, namespace="http://chains.projetox.com.br/") 
}) 
private List<SubjectVO> commands; 

Где:

public interface SubjectVO {} 
public class CommandVO implements SubjectVO {} 
public class ScriptVO implements SubjectVO {} 
Смежные вопросы