没有命名空间的XSD出错

时间:2014-09-07 22:33:29

标签: rest java-ee jaxb xsd xsd-validation

我有两个XSD到底,下面的情况是,我正在使用REST服务并通过JAXB运行两个XSD来生成类,碰巧我必须得到两个XSD的targetNamespace,因为它似乎当consumption属性为null时,该服务没有命名空间,JAXB生成的类名为package-info.java

@javax.xml.bind.annotation.XmlSchema(namespace = "", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

我将命名空间删除为低(使用带有此目标命名空间的XSD),并且它有效,但我必须使用XSD,并且在其中一个中我使用指向另一个的元素。但是给出了这个格式化错误,我试图导入,但询问命名空间,两个xsds都在同一个目录中

错误:

  

src-resolve.4.2:解析组件“阻止”时出错。它被发现了   'Block'在命名空间'http://www.w3.org/2001/ XMLSchema'中,但是   此命名空间中的组件无法从架构引用   document'file:/// G:/Dev/src/main/xsd/Actor.xsd'。如果这是   错误的命名空间,可能需要'BlockList'的前缀   改变。如果这是正确的命名空间,那么适当   'import'标签应添加到'file:/// G:/ Dev /   的src /主/ XSD / Actor.xsd”。

actor.xsd

 <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" >
     <include schemaLocation="Block.xsd"/>
     <complexType name="Actor">
      <sequence>
       <element name="type" type="string" maxOccurs="1"
        minOccurs="1">
       </element>
       <element name="blockList" type="Block"  maxOccurs="1"
        minOccurs="1"></element>
       <element name="characteristicList" maxOccurs="1"
        minOccurs="1">
        <complexType>
         <sequence>
          <element name="characteristic"
           maxOccurs="unbounded" minOccurs="1">
           <complexType>
            <sequence>
             <element name="id" type="long"></element>
             <element name="name"
              type="string">
             </element>
             <element name="value"
              type="string">
             </element>
            </sequence>
           </complexType>
          </element>
         </sequence>
        </complexType>
       </element>
      </sequence>
     </complexType>
    </schema>

Block.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" >
 <complexType name="Block">
  <sequence>
   <element name="greyList" type="boolean"></element>
   <element name="blackList" type="boolean"></element>
   <element name="blockListTimeToExit" type="long"></element>
   <element name="blockedEventList">
    <complexType>
     <sequence>
      <element name="blockedEvent" type="string" maxOccurs="unbounded"
       minOccurs="0"></element>
     </sequence>
    </complexType>
   </element>
  </sequence>
 </complexType>
</schema>

1 个答案:

答案 0 :(得分:0)

在...中更改您的XSD

<强> actor.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
   targetNamespace="yourNamespace" 
    xmlns:prefix="yourNamespace">
    <include schemaLocation="Block.xsd"/>
    <complexType name="Actor">
        <sequence>
            <element name="type" type="string" maxOccurs="1" minOccurs="1">
       </element>
            <element name="blockList" type="prefix:Block" maxOccurs="1" minOccurs="1"></element>
            <element name="characteristicList" maxOccurs="1" minOccurs="1">
                <complexType>
                    <sequence>
                        <element name="characteristic" maxOccurs="unbounded" minOccurs="1">
                            <complexType>
                                <sequence>
                                    <element name="id" type="long"></element>
                                    <element name="name" type="string">
             </element>
                                    <element name="value" type="string">
             </element>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
        </sequence>
    </complexType>
</schema>

<强> Block.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="yourNamespace"
    xmlns:apm="yourNamespace">
    <complexType name="Block">
        <sequence>
            <element name="greyList" type="boolean"></element>
            <element name="blackList" type="boolean"></element>
            <element name="blockListTimeToExit" type="long"></element>
            <element name="blockedEventList">
                <complexType>
                    <sequence>
                        <element name="blockedEvent" type="string" maxOccurs="unbounded"
                            minOccurs="0">
                        </element>
                    </sequence>
                </complexType>
            </element>
        </sequence>
    </complexType>
</schema>

我只添加了名称空间和前缀来使用Block.xsd中的类型。

相关问题