簡體   English   中英

如何使用 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()並且對於minOccurs="1"的屬性都返回true

我發現getField()返回的 object 實際上是XMLField類型,它是該方法DatabaseField返回的一般類型的子類。 XMLField有一個isRequired()方法,如果需要該屬性,則該方法有效地返回。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM