在我的XSD我有元素
<xs:element name="MyDateElement" type="MyDateElementType" nillable="true" />
<xs:complexType name="MyDateElementType">
<xs:simpleContent>
<xs:extension base="xs:date">
<xs:attribute name="state" type="xs:string" />
<xs:attribute name="dateFrom" type="xs:date" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
我在用
<artifactId>cxf-codegen-plugin</artifactId>
从WSDL生成Java类。
所以这个插件生成该Java类:
public class ParrentClass
implements Serializable
{
@XmlElement(name = "MyDateElement", required = true, nillable = true)
protected MyDateElementType MyDateElement;
// setter and getter
}
public class MyDateElement
implements Serializable
{
@XmlValue
protected Date value;
@XmlAttribute(name = "state")
protected String state;
@XmlAttribute(name = "dateFrom")
protected Date dateFrom;
// setter and getter
}
我认为这仍然是OK。
所以现在,当我用空值,只是用属性创建元素
protected MyDateElement getDatumStav(String state) {
MyDateElement element = new MyDateElement();
element.setState(state);
return element;
}
JAXB创建XML无效:
<ns:MyDateElement stav="S"></ns:MyDateElement>
(的nillable =真缺失)
因此,谁能帮助我,我应该怎么解决这个问题。
PS:我知道,当在我的xsd允许minOccurs=0
然后插件生成其中包含Java类JAXBElement<MyDateElement>
其中I可以手动设置nillable
。 但我想避免这种情况的解决方案,因为需要这个元素
PS:有可能是错误的,从XSD生成的Java类,因为我发现这个旧的错误: https://java.net/jira/si/jira.issueviews:issue-html/JAXB-840/JAXB-840.html 。 但是,这应该是固定的,所以我仍然感到困惑