У меня возникли проблемы с получением следующей структуры классов, упорядоченной реализацией Java JAXB. У меня есть абстрактный класс идентификатора, который имеет значение.JAXB и полиморфизм
Для меня важно, чтобы значение было представлено как атрибут.
@XmlSeeAlso({
AbstractIDInt.class
})
@XmlRootElement(name = "AbstractID")
@XmlAccessorType(XmlAccessType.PROPERTY)
public abstract class AbstractID {
@XmlAttribute
abstract Object getValue();
}
А, вот это класс, который расширяет абстрактный класс ID: реализация JAXB
@XmlRootElement(name = "AbstractIDInt")
@XmlAccessorType(XmlAccessType.NONE)
public class AbstractIDInt extends AbstractID {
Integer value;
Integer getValue() {
return value;
}
public void setvalue (Integer value) {
this.value = value;
}
}
В настоящее время в Java просто бросает исключение, если вы пытаетесь Маршалл что-то типа AbstractID.
Это нарушение чего-то в стандарте JAXB или реализация Java JAXB нарушена?
Спасибо. Любая идея, как я могу аннотировать AbstractID, чтобы заставить его работать с реализацией Java JAXB? Я использую JAXB через CXF для создания WSDL. Мне нужен код, сгенерированный из WSDL, для генерации AbstractID с помощью метода getValue(). – rouble
@prmatta - Я добавил обновление, которое может работать с RI JAXB. –
Я думаю, что проблема в том, что в сгенерированном WSDL и в коде, сгенерированном из WSDL, AbstractID теперь будет пустым классом, а AbstractIDInt имеет поле «значение». Таким образом, кто-то, кто хочет получить значение, сначала должен будет передать в AbstractIDInt. Это не идеально, так как невозможно узнать, какой производный тип нужно отличить. Мне нужно, чтобы поле «значение» нужно унаследовать от AbstractID. Любые другие идеи? – rouble