如何使用 MOXy 动态 JAXB 查找是否需要 XSD 元素?



我正在尝试使用MOXy的DynamicJAXBContext从XSD中获取信息。我尝试获取的属性之一是是否需要属性或元素。据我了解,如果一个元素有minOccurs="1"则意味着它是必需的

问题是我还没有找到获得它的方法。

这是我到目前为止的代码:

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(),并且都返回属性的true,其中minOccurs="1"

我发现getField()返回的对象实际上是XMLField类型,它是该方法返回的通用类型的子类DatabaseField.XMLField有一个isRequired()方法,如果需要属性,该方法可以有效地返回。

if(dm.getField() instanceof XMLField) {
XMLField field = (XMLField)dm.getField();
System.out.println(field.isRequired());
}

最新更新