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

1

У меня есть выбор 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 в своем проекте.

Теги:
schema
jaxb
wsdl
java2wsdl

1 ответ

0

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

@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;
}
  • 0
    Я не совсем понял тебя, Блейз. Это касается поддержки выбора типа схемы. Нули это не проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню