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

Xsd 测试是否需要JAXB生成的字段,xsd,jaxb,Xsd,Jaxb,我有一个JAXB生成的类PersonType,它的属性有名称、电话和地址。在XSD中,我定义了“phone”minoccurs=“1”。 如果XSD中是否需要属性“phone”,我如何用Java代码进行编程测试(即通过反射等) 稍后编辑: JAXB生成器创建一个没有任何“required”等属性的类。因此,在类或它的字段上没有注释来指示它是否是必需的。但是,字段上有@XmlElement注释指定XSD等效元素。所以我想唯一的解决方案是检查这个注释,然后针对XSD生成XPath或其他东西 谢谢大家

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

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


谢谢大家!

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

XML模式

在XML模式下,需要
foo
元素,而不需要
bar
元素


生成的类

下面是从XML模式生成的类。我们看到
foo
字段被
@xmlement(required=true)
注释,而
字段没有注释

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

    @XmlElement(required = true)
    protected String foo;

    protected String bar;

}

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

XML模式

在XML模式下,需要
foo
元素,而不需要
bar
元素


生成的类

下面是从XML模式生成的类。我们看到
foo
字段被
@xmlement(required=true)
注释,而
字段没有注释

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

    @XmlElement(required = true)
    protected String foo;

    protected String bar;

}

您想测试该类是否包含
@xmlement(required=true)
或者您想测试该类的实例是否具有require
name
元素?@BlaiseDoughan我需要一种方法来测试该字段是否在XSD端是必需的。在Java生成的类中,没有这方面的指示。非常感谢。您想测试该类是否包含
@xmlement(required=true)
或者您想测试该类的实例是否具有require
name
元素?@BlaiseDoughan我需要一种方法来测试该字段是否在XSD端是必需的。在Java生成的类中,没有这方面的指示。非常感谢。非常感谢。这是一个很好的解决方案,但是如果这些字段是基类型限制的一部分,JAXB不会为“扩展”类型生成任何元数据。字段仅在基类型中定义(在Java代码中)。@leadgy-您也可以使用反射检查继承的字段/属性。您还可以获得一个classes超类,并直接检查它。只是如果您从父类型进行限制,子类型中设置的限制不会出现在生成的Java代码中。所以我不确定这怎么可能与反射有关。谢谢非常感谢。这是一个很好的解决方案,但是如果这些字段是基类型限制的一部分,JAXB不会为“扩展”类型生成任何元数据。字段仅在基类型中定义(在Java代码中)。@leadgy-您也可以使用反射检查继承的字段/属性。您还可以获得一个classes超类,并直接检查它。只是如果您从父类型进行限制,子类型中设置的限制不会出现在生成的Java代码中。所以我不确定这怎么可能与反射有关。谢谢