0

我是 XML 和 JAXB 的新手,我正在尝试将 AdditionalDataDeposit 字段添加到我的 XML 架构中,这样我就可以使用 Maven 生成 POJO。当我尝试在 Maven 中构建它时出现错误:

blahBlahBlahmsgfactory: Unable to parse input schema(s). Error messages should have been provided. 
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 
'LimitedString50' to a(n) 'type definition' component.

我的代码:

在 AdditionalData 复杂类型下:

<xs:element name="DEPOSIT" type="trmns:AdditionalDataDEPOSIT" minOccurs="0">
  <xs:annotation>
    <xs:documentation>Additional Deposit Data</xs:documentation>
  </xs:annotation>
</xs:element>

然后:

  <xs:complexType name="AdditionalDataDEPOSIT">
    <xs:annotation>
      <xs:documentation>Additional Deposit Data</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="depositorID" type="LimitedString50"/>
      <xs:element name="depositorNationality" type="LimitedString50"/>
      <xs:element name="fundSource" type="LimitedString50"/>
      <xs:element name="fullName" type="LimitedString100"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="LimitedString50">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="LimitedString100">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100" />
    </xs:restriction>
  </xs:simpleType>

我不太了解 XML Schema,但我们将不胜感激。

4

3 回答 3

1

到目前为止,我看到的您的 XML 模式只有一个错误:不应为全局元素定义属性“minOccurs”。所以 DEPOSIT 元素的声明应该是这样的:

<xs:element name="DEPOSIT" type="trmns:AdditionalDataDEPOSIT">
  <xs:annotation>
    <xs:documentation>Additional Deposit Data</xs:documentation>
  </xs:annotation>
</xs:element>

例如这里给出了关于全局元素的 minOccurs 的解释。

于 2020-02-18T11:10:08.293 回答
1

错误消息说 LimitedString50 无法解析为类型定义。这意味着它找不到该类型定义。简单类型“LimitedString50”是在同一个 XSD 中定义的,因此最可能的解释是您的架构有一个非空的 targetNamespace,但您的类型引用未指定该命名空间。

我无法验证这一点,因为您尚未发布整个 XSD。

于 2020-02-18T11:19:46.923 回答
0
<xs:complexType name="AdditionalDataDEPOSIT">
    <xs:annotation>
      <xs:documentation>Additional Deposit Data</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="depositorID" type="trmns:LimitedStringFifty"/>
      <xs:element name="depositorNationality" type="trmns:LimitedStringFifty"/>
      <xs:element name="fundSource" type="trmns:LimitedStringFifty"/>
      <xs:element name="fullName" type="trmns:LimitedStringHundred"/>
    </xs:sequence>
  </xs:complexType>
    <xs:simpleType name="LimitedStringFifty">
      <xs:restriction base="xs:string">
        <xs:maxLength value="50" />
      </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="LimitedStringHundred">
      <xs:restriction base="xs:string">
        <xs:maxLength value="100" />
      </xs:restriction>
    </xs:simpleType>

添加 trmns: 到我的类型的前缀似乎有效,我不完全确定为什么,也许这里有人可以解释。发帖帮助他人。

于 2020-02-18T12:36:21.303 回答