@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;
}