如何从 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>
{ ...
}
这就是我想要的。
我想这样创建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>
{ ...
}
这就是我想要的。