如何从 xml 创建 xsd 和 java class

How to created xsd and java class from xml

我想这样创建xml(不需要元素元素(minOccurs=0))

<Root>
    <ns:Element date="1980-02-06" state="S">Value1</ns:Element>
    <ns:Element date="1980-02-06" state="S">Value2</ns:Element>
    <ns:Element date="1980-02-06" state="N" xsi:nil="true" />
</Root>

所以在 XSD 我创建了元素:

        <xs:element name="Element" type="ElementType" minOccurs="0" maxOccurs="unbounded" nillable="true"/>

但问题是我正在使用的插件 (cxf-codegen-plugin) 创建 class 其中包含:

@XmlElement(name = "Element")
protected List<ElementType> element;

而不是

protected List<JAXBElement<ElementType>> element;

这是我意料之中的,因为现在我没有设置 nillable 的选项。当我从 xsd 中删除 nillable="true" 时,没有任何变化,并且生成了相同的 java 代码。那我该怎么办?

好的,我应该找到了修复方法。当我添加到 bindings.xml 时:

<jaxb:bindings node="//xs:element[@name='Element']">
    <jaxb:class name="MyCustomElementType"/>    
</jaxb:bindings>

然后它创建属于元素的新内部静态 class:

    public static class MyCustomElementType
        extends JAXBElement<ElementType>
    { ...
}

这就是我想要的。