Как анализировать теги xs: annotation с помощью EclipseLink MOXy Dynamic JAXB-сопоставлений? - PullRequest
0 голосов
/ 23 октября 2019

Я читаю 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());
            }
        });
    }
}
...