java - 使用 jaxb 从 xml 生成 java 类时缺少类

标签 java xml jaxb xsd

所以这是我的第一个问题。 :)

我尝试从 xsd 文件生成 java 类。

所以我的问题如下。 jaxb 不会以某种方式为简单类型“Test”生成 java 类。

我对复杂类型中的两个属性感兴趣 “艺术”与“数字”

            <xs:attribute name="Art" use="required">
              <xs:annotation>
                <xs:documentation>Darf ausschließlich die Werte "BEL" (BEL-Leistung), "NBL"(andere, nicht in der BEL enthaltene Leistung), "EDM" (Edelmetalle oder -legierungen), "MAT" (alle anderen Materialien) oder "RBT" (Rabatt) enthalten. Jede Art kann mehrmals auftreten.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="Positionsart"/>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="Nummer" use="optional">
              <xs:annotation>
                <xs:documentation>Ausschließlich anzugeben, wenn Art="BEL". Es sind ausschließlich die offiziellen BEL-Nummern zu verwenden. BEL-Nummern müssen vierstellig übermittelt werden. Das Feld wird nicht übermittelt, wenn Art ungleich BEL ist.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="Test"/>
              </xs:simpleType>
            </xs:attribute>

类型都在 xsd 的末尾定义:

  <xs:simpleType name="Positionsart">
  <xs:simpleType name="Test">

这两种类型还有更多,但 stackoverflow 告诉我代码太多了。 :)

但是你可以在这里查看文件:

https://www.dropbox.com/sh/u0j58gd1jo98qrn/L2Yw_-psOw

类(class)开始时是这样的

   @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "")
    public static class Position {

        @XmlAttribute(name = "Art", required = true)
        protected Positionsart art;
        @XmlAttribute(name = "Nummer", required = true)
        protected String nummer;

如您所见,Art 是一个 Positionsart 类型,就像它在 xsd 中指定的那样,但 Number 不是测试类型,它只是一个字符串。

我不明白这是什么问题。这两个属性之间的唯一区别是一个是必需的,另一个是可选的,但我已经尝试更改它。

我还以为命名可能有问题。 SimpleType“Test”之前命名为 BEL2,所以我尝试更改名称。

此外我发现一开始有一个命名空间的死链接,首先这个命名空间没有在这个文档中使用,其次我尝试生成没有这个命名空间的类。

为了生成类,我打开了命令行工具,导航到正确的位置并键入 xjc Laborabrechnungsdaten.xsd。我的 Java 变量已就位。

希望有人给点建议。

提前致谢。 :)

最佳答案

有什么相同之处?

PositionsartTest 都是 XML 架构中的简单类型(参见:https://www.dropbox.com/sh/u0j58gd1jo98qrn/F37X8kxa67/Laborabrechnungsdaten.xsd),它们扩展了 xs:string 并定义了一个xs:enumeration 有效值。

有什么不同?

Positionsart 而不是 Test 生成 Java 枚举的原因是 Test 类型包含的值不是有效的 Java 枚举值(value)观。

  <xs:enumeration value="0010"/>
  <xs:enumeration value="0018"/>

对于这些无效值中的每一个,您都需要使用外部绑定(bind)文件来指定有效的枚举值。例如,请参阅我对 Stack Overflow 上类似问题的回答

关于java - 使用 jaxb 从 xml 生成 java 类时缺少类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106606/

相关文章:

java - 将 XML 转换为 Java 对象时获取不正确的值

java - 将图片插入 JTextPane

c - 从 xml 文件中提取字符串并将其粘贴到文本文件中

xml - 如何在 Go 中解码包含脏 HTML 的 XML

xml - XSLT 转换 - 动态元素名称

java - 从生成的jaxb类中的抽象Java类实现抽象方法(继承)

java - 如何使用 Javassist 从源代码加载类?

java - Spring Boot 2.1.3.RELEASE : Not able to read environment properties from application. 属性

java - 以相反的顺序更改 LinkedHashMap 项

jaxb - 注释向元素添加属性