@XmlSchemaType для метода ObjectFactory

У меня есть выбор XSD, оба они имеют тип javax.xml.datatype.XMLGregorianCalendar. Как рекомендовано, я использовал ObjectFactory и JAXBElement, чтобы различать два варианта.

@XmlElementDecl(namespace = "http://me.com/1.0/api", name="timestamp")
JAXBElement<XMLGregorianCalendar> createTimestamp(XMLGregorianCalendar timestamp) {
    return new JAXBElement<XMLGregorianCalendar>(_timestamp_QNAME, XMLGregorianCalendar.class, null, timestamp);
}

Теперь я хочу изменить тип, который появляется в автоматически сгенерированном WSDL, на dateTime вместо xs:anySimpleType.

Похоже, аннотация @XmlSchemaType не поддерживается в методе ObjectFactory, а теги @XmlSchameType уровня пакета также не могут изменять типы, сгенерированные здесь.

@javax.xml.bind.annotation.XmlSchemaType(name="dateTime", type=javax.xml.datatype.XMLGregorianCalendar.class)
package my.example.api;

Это все еще генерировало xs: anySimpleType в данном конкретном случае.

Я не могу использовать EclipseLink в моем проекте.

1 ответ

Вместо того, чтобы делать:

@XmlElementRefs({
    @XmlElementRef(name="foo", type=JAXBElement.class),
    @XmlElementRef(name="bar", type=JAXBElement.class)
})
public JAXBElement<XMLGregorianCalendar> getFooOrBar() {
    return fooOrBar;
}

Вам нужно будет иметь отдельное свойство для каждого элемента, чтобы получить поведение, которое вы ищете. Поскольку по умолчанию JAXB не выполняет маршализацию свойств с нулевым значением, вы все равно сможете создавать искомый XML.

public XMLGregorianCalendar getFoo() {
    return foo;
}

@XmlSchemaType(name="time")
public XMLGregorianCalendar getFoo() {
    return foo;
}
Другие вопросы по тегам