gpt4 book ai didi

java - 如何使用 MOXy Dynamic JAXB 查找是否需要 XSD 元素?

转载 作者:行者123 更新时间:2023-11-30 05:26:22 24 4
gpt4 key购买 nike

我正在尝试使用 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() 并且都返回对于 minOccurs="1"

的属性, true

最佳答案

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

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

关于java - 如何使用 MOXy Dynamic JAXB 查找是否需要 XSD 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58496012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com