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。

看起来 ObjectFactory 方法不支持 @XmlSchemaType 注释,并且包级别的 @XmlSchameType 标记也无法修改此处生成的类型。

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

在这种特殊情况下,这仍然会生成 xs:anySimpleType。

我不能在我的项目中使用 EclipseLink。

4

1 回答 1

0

而不是这样做:

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

您需要为每个元素拥有一个单独的属性才能获得您正在寻找的行为。由于默认情况下 JAXB 不会用 null 值编组属性,因此您仍然可以生成您正在寻找的 XML。

public XMLGregorianCalendar getFoo() {
    return foo;
}

@XmlSchemaType(name="time")
public XMLGregorianCalendar getFoo() {
    return foo;
}
于 2014-06-06T13:23:06.283 回答