1

我有一个带有属性名称、电话、地址的 JAXB 生成类 PersonType。在 XSD 中,我定义了“电话”minoccurs="1"。如果 XSD 中是否需要属性“电话”,我如何以编程方式(即通过反射等)在 Java 代码中进行测试?

稍后编辑:JAXB 生成器创建一个没有任何“必需”等属性的类。所以类上没有注释,或者它的字段表明它是否需要。但是,在指定 XSD 等效元素的字段上有 @XmlElement 注释。所以我想唯一的解决方案是检查这个注释,然后针对 XSD 创建一个 XPath 或其他东西?

谢谢!

4

1 回答 1

1

@XmlElement注释有一个属性(默认为requiredfalse),用于指示需要 XML 元素 ( minOccurs> 0)。您可以使用java.lang.reflectAPI 从类中获取此值。

XML 模式

在下面的 XML 模式中,该foo元素是必需的,而该bar元素不是。

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/schema" 
    xmlns:tns="http://www.example.org/schema" 
    elementFormDefault="qualified">

    <complexType name="root">
        <sequence>
            <element name="foo" type="string"/>
            <element name="bar" type="string" minOccurs="0"/>
        </sequence>
    </complexType>

</schema>

生成的类

下面是从 XML 模式生成的类。我们看到该foo字段用@XmlElement(required=true)anf 注释,该bar字段不是。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "root", propOrder = {
    "foo",
    "bar"
})
public class Root {

    @XmlElement(required = true)
    protected String foo;

    protected String bar;

}
于 2013-02-27T11:29:17.680 回答