如何使用 MOXy Dynamic JAXB 查找是否需要 XSD 元素?
How to find if an XSD element is required using MOXy Dynamic JAXB?
我正在尝试使用 MOXy 的 DynamicJAXBContext 从 XSD 中获取信息。我试图获取的属性之一是属性或元素是否 必需。据我了解,如果一个元素有 minOccurs="1"
则意味着它是 required.
问题是我还没有找到获取它的方法。
这是我到目前为止的代码:
DynamicJAXBContext jaxbContext =
DynamicJAXBContextFactory.createContextFromXSD(is, new MyEntityResolver(), null, null);
Collection<ClassDescriptor> descriptors = jaxbContext.getXMLContext().getSession().getDescriptors().values();
for (ClassDescriptor desc : descriptors) {
if (desc.getJavaClassName() != null) {
System.out.println("=================================");
System.out.println("Class: " + desc.getJavaClassName());
desc.getMappings().forEach(dm ->{
System.out.println(dm.getAttributeName());
System.out.println(dm.getClass().getName());
if(dm instanceof XMLDirectMapping) {
XMLDirectMapping xmlInfo = (XMLDirectMapping)dm;
System.out.println(xmlInfo);
}
if(dm.getAttributeClassification() != null) {
System.out.println(dm.getAttributeClassification().getName());
}
if(dm.getReferenceDescriptor() != null) {
System.out.println(dm.getReferenceDescriptor().getJavaClassName());
}
});
}
}
到目前为止,我已经能够获取有关属性类型的信息,如果它是一个集合和集合类型。
我尝试探索 dm
变量的其他方法,包括 isOptional()
和 getField().isNullable()
以及 return true
属性 [=12] =]
我发现 getField()
返回的对象实际上是 XMLField
类型,它是该方法 DatabaseField
返回的一般类型的子类。 XMLField
有一个 isRequired()
方法,如果属性是必需的,它有效 returns。
if(dm.getField() instanceof XMLField) {
XMLField field = (XMLField)dm.getField();
System.out.println(field.isRequired());
}
我正在尝试使用 MOXy 的 DynamicJAXBContext 从 XSD 中获取信息。我试图获取的属性之一是属性或元素是否 必需。据我了解,如果一个元素有 minOccurs="1"
则意味着它是 required.
问题是我还没有找到获取它的方法。
这是我到目前为止的代码:
DynamicJAXBContext jaxbContext =
DynamicJAXBContextFactory.createContextFromXSD(is, new MyEntityResolver(), null, null);
Collection<ClassDescriptor> descriptors = jaxbContext.getXMLContext().getSession().getDescriptors().values();
for (ClassDescriptor desc : descriptors) {
if (desc.getJavaClassName() != null) {
System.out.println("=================================");
System.out.println("Class: " + desc.getJavaClassName());
desc.getMappings().forEach(dm ->{
System.out.println(dm.getAttributeName());
System.out.println(dm.getClass().getName());
if(dm instanceof XMLDirectMapping) {
XMLDirectMapping xmlInfo = (XMLDirectMapping)dm;
System.out.println(xmlInfo);
}
if(dm.getAttributeClassification() != null) {
System.out.println(dm.getAttributeClassification().getName());
}
if(dm.getReferenceDescriptor() != null) {
System.out.println(dm.getReferenceDescriptor().getJavaClassName());
}
});
}
}
到目前为止,我已经能够获取有关属性类型的信息,如果它是一个集合和集合类型。
我尝试探索 dm
变量的其他方法,包括 isOptional()
和 getField().isNullable()
以及 return true
属性 [=12] =]
我发现 getField()
返回的对象实际上是 XMLField
类型,它是该方法 DatabaseField
返回的一般类型的子类。 XMLField
有一个 isRequired()
方法,如果属性是必需的,它有效 returns。
if(dm.getField() instanceof XMLField) {
XMLField field = (XMLField)dm.getField();
System.out.println(field.isRequired());
}