我有一个JAXB生成的类PersonType,其属性名称,电话,地址。在XSD中,我定义“phone”minoccurs =“1”。 如果XSD中是否需要属性“phone”,我如何在Java代码中以编程方式(即通过反射等)进行测试?
稍后编辑: JAXB生成器创建一个没有任何“必需”等属性的类。所以在类或它的字段上没有注释来指示它是否是必需的。但是,字段上的@XmlElement注释指定了XSD等效元素。所以我想唯一的解决办法就是检查这个注释,然后针对XSD制作一个XPath或其他东西?
谢谢!
答案 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;
}