У меня есть выбор 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 в своем проекте.
Вместо того, чтобы делать:
@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;
}