我有一个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中出现的类型更改为&#39; dateTime&#39;而不是xs:anySimpleType。
看起来ObjectFactory方法不支持@XmlSchemaType注释,而包级别@XmlSchameType标签也无法修改此处生成的类型。
@javax.xml.bind.annotation.XmlSchemaType(name="dateTime", type=javax.xml.datatype.XMLGregorianCalendar.class)
package my.example.api;
在这种特殊情况下,仍会生成xs:anySimpleType。
我不能在我的项目中使用EclipseLink。
答案 0 :(得分: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;
}