Xsd 测试是否需要JAXB生成的字段
我有一个JAXB生成的类PersonType,它的属性有名称、电话和地址。在XSD中,我定义了“phone”minoccurs=“1”。 如果XSD中是否需要属性“phone”,我如何用Java代码进行编程测试(即通过反射等) 稍后编辑: JAXB生成器创建一个没有任何“required”等属性的类。因此,在类或它的字段上没有注释来指示它是否是必需的。但是,字段上有@XmlElement注释指定XSD等效元素。所以我想唯一的解决方案是检查这个注释,然后针对XSD生成XPath或其他东西Xsd 测试是否需要JAXB生成的字段,xsd,jaxb,Xsd,Jaxb,我有一个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)
或者您想测试该类的实例是否具有requirename
元素?@BlaiseDoughan我需要一种方法来测试该字段是否在XSD端是必需的。在Java生成的类中,没有这方面的指示。非常感谢。您想测试该类是否包含@xmlement(required=true)
或者您想测试该类的实例是否具有requirename
元素?@BlaiseDoughan我需要一种方法来测试该字段是否在XSD端是必需的。在Java生成的类中,没有这方面的指示。非常感谢。非常感谢。这是一个很好的解决方案,但是如果这些字段是基类型限制的一部分,JAXB不会为“扩展”类型生成任何元数据。字段仅在基类型中定义(在Java代码中)。@leadgy-您也可以使用反射检查继承的字段/属性。您还可以获得一个classes超类,并直接检查它。只是如果您从父类型进行限制,子类型中设置的限制不会出现在生成的Java代码中。所以我不确定这怎么可能与反射有关。谢谢非常感谢。这是一个很好的解决方案,但是如果这些字段是基类型限制的一部分,JAXB不会为“扩展”类型生成任何元数据。字段仅在基类型中定义(在Java代码中)。@leadgy-您也可以使用反射检查继承的字段/属性。您还可以获得一个classes超类,并直接检查它。只是如果您从父类型进行限制,子类型中设置的限制不会出现在生成的Java代码中。所以我不确定这怎么可能与反射有关。谢谢