ObjectFactory方法的@XmlSchemaType

时间:2014-06-05 08:30:16

标签: java jaxb wsdl schema java2wsdl

我有一个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。

1 个答案:

答案 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;
}