测试是否需要JAXB生成的字段

时间:2013-02-26 19:40:28

标签: xsd jaxb

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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)进行了注释,而bar字段则没有。{/ p>

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

    @XmlElement(required = true)
    protected String foo;

    protected String bar;

}