Я читаю XSD, используя EclipseLink MOXy Dynamic JAXB. В этом XSD есть аннотации с дополнительной документацией для этого элемента, например:
<xs:element maxOccurs="1" minOccurs="0" name="state" type="xs:string">
<xs:annotation>
<xs:documentation
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xml:lang="en">
The status code for the objective.
</xs:documentation>
</xs:annotation>
</xs:element>
Проблема, с которой я столкнулся, заключается в том, что, похоже, нет способа получить аннотации XSD. Я попытался осмотреться с помощью отладчика, но не нашел ни одного поля, содержащего, в данном случае, строку документации. Я читаю XSD так:
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());
}
});
}
}