我有java类:
public class ActivityAddress {
@XmlElement(name = "Elem1", required = false)
private String elem1;
@XmlElement(name = "Elem2", required = false)
private String elem2;
@XmlElement(name = "PostIndex", required = true)
private String postIndex;
}
我想获得这样的架构:
<xs:complexType name="ActivityAddress">
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element name="Elem1" type="xs:string"/>
<xs:element name="Elem2" type="xs:string"/>
</xs:choice>
<xs:element name="PostIndex" type="xs:string"/>
</xs:sequence>
所以必须选择两个字段“Elem1”和“Elem2”。
像这样的决定:
@XmlElements({
@XmlElement(name = "Elem1", type = String.class, required = false),
@XmlElement(name = "Elem2", type = String.class, required = false)
})
private String elem;
不适合我,因为在 java 类中我需要有两个字段。
Ноw 我能做到吗?任何人都可以帮忙吗?
最佳答案
生成 XML 模式
对于以下 Java 类:
public class ActivityAddress {
@XmlElement(name = "Elem1", required = false)
private String elem1;
@XmlElement(name = "Elem2", required = false)
private String elem2;
@XmlElement(name = "PostIndex", required = true)
private String postIndex;
}
您将获得如下所示的 XML 模式,没有办法按照您希望的方式生成选择。
<xs:sequence>
<xs:element name="Elem1" type="xs:string" mincOccurs="0"/>
<xs:element name="Elem2" type="xs:string" minOccurs="0"/>
<xs:element name="PostIndex" type="xs:string"/>
</xs:sequence>
指向手工制作的 XML 模式
但是,您可以生成一个 XML 模式,然后自己修改它,然后告诉 JAXB 使用它。这是通过包级别
@XmlSchema
完成的注解。包信息.java
@XmlSchema(location="http://www.example.com/foo/mySchema.xsd")
package com.example.foo;
关于JAXB schemagen 如何为两个字段生成选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26680029/