由于名称空间冲突,无法解析XSD

时间:2014-07-19 20:48:25

标签: xml jaxb xsd

我正在尝试使用xjc实用程序生成Java类,但得到以下异常:

  

[错误] src-resolve.4.2:解析组件时出错' act:statusCd'。它   检测到' act:statusCd'在命名空间中   ' http://www.example.org/account/schemas/' ,但来自此的组件   命名空间不能从架构文档中引用   '文件:/ E:/SpringWebServices/BankWebService/xsd/account.xsd' ;.如果这   是不正确的命名空间,也许是' act:statusCd'的前缀。需求   要改变。如果这是正确的命名空间,那么适当   '进口'标签应该添加到   '文件:/ E:/SpringWebServices/BankWebService/xsd/account.xsd' ;.第22行   of file:/ E:/SpringWebServices/BankWebService/xsd/account.xsd

这是我的XSD:

  <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:act="http://www.example.org/account/schemas/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/account"  
    elementFormDefault="qualified">

  <xs:element name="AccountRequest">
    <xs:complexType>
        <xs:all>
            <xs:element name="AccountNumber" type="xs:string"/>
        </xs:all>
    </xs:complexType>
</xs:element>

<xs:element name="AccountResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="AccountNumber" type="xs:string"/>
            <xs:element name="AccountName" type="xs:string"/>
            <xs:element name="AccountBalance" type="xs:double"/>
            <xs:element name="AccountStatus" type="act:statusCd"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:simpleType name="statusCd">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Active"/>
        <xs:enumeration value="Inactive"/>
    </xs:restriction>
</xs:simpleType>
</xs:schema>

请让我知道我在XSD文件中做错了什么。我想引用&#34; statusCd&#34;我的回复中的simpleType。

1 个答案:

答案 0 :(得分:1)

从此

更改与act名称空间前缀对应的名称空间URI
xmlns:act="http://www.example.org/account/schemas/"

到此

xmlns:act="http://www.example.org/account"

然后,您对act:statusCd的引用将正确解析为目标命名空间statusCd中找到的http://www.example.org/account简单类型。