首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXB:两个具有两个相同名称的复杂类型的xsd

JAXB:两个具有两个相同名称的复杂类型的xsd
EN

Stack Overflow用户
提问于 2021-07-15 18:29:13
回答 1查看 45关注 0票数 0

这是我的第一个xsd (catalegs-schema.xsd):

代码语言:javascript
复制
<?xml version="1.0" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="request" type="SearchRequestType"/>

  <xs:complexType name="SearchRequestType">
    <xs:sequence>
      <xs:element name="tableName" type="xs:string" minOccurs="0"/>
      <xs:element name="oid" type="xs:string" minOccurs="0"/>
      <xs:element name="owner" type="OwnerType"/>
      <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="term" type="xs:string" minOccurs="0"/>
      <xs:element name="referenceDate" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="startIndex" type="xs:long" minOccurs="0"/>
      <xs:element name="pageSize" type="xs:long" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="OwnerType">
    <xs:sequence>
      <xs:element name="ownerType" type="xs:string"/>
      <xs:element name="ownerCode" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  
</xs:schema>

我的第二个xsd (oid-schema.xml):

代码语言:javascript
复制
<?xml version="1.0" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="request" type="SearchRequestType"/>

  <xs:complexType name="SearchRequestType">
    <xs:sequence>
      <xs:element name="oid" type="xs:string" minOccurs="0"/>
        <xs:element name="referenceDate" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="startIndex" type="xs:long" minOccurs="0"/>
      <xs:element name="pageSize" type="xs:long" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

如您所见,这里定义了两个SearchRequestType complexType。

我正在使用这个bindings.xml文件:

代码语言:javascript
复制
<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    
    jaxb:extensionBindingPrefixes="annox xjc"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:annox="http://annox.dev.java.net"
    
    version="2.1">
    
    <jaxb:bindings schemaLocation="oid-schema.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="cat.catsalut.hes.mpi.hazelcast.loader.domain.serveiterritorial.oid"/>
        </jaxb:schemaBindings>
        <jaxb:bindings node="//xs:complexType[@name='SearchRequestType']">
            <jaxb:class name="attemptdatap"/>
            <annox:annotate>@lombok.Builder</annox:annotate>
            <annox:annotate>@lombok.NoArgsConstructor</annox:annotate>
            <annox:annotate>@lombok.AllArgsConstructor</annox:annotate>
        </jaxb:bindings>
    </jaxb:bindings>
    
    <jaxb:bindings schemaLocation="catalegs-schema.xsd">
        <jaxb:schemaBindings>
            <jaxb:package name="cat.catsalut.hes.mpi.hazelcast.loader.domain.serveiterritorial.catalegs"/>
        </jaxb:schemaBindings>
        <jaxb:bindings node="//xs:complexType[@name='SearchRequestType']">
            <annox:annotate>@lombok.Builder</annox:annotate>
            <annox:annotate>@lombok.NoArgsConstructor</annox:annotate>
            <annox:annotate>@lombok.AllArgsConstructor</annox:annotate>
        </jaxb:bindings>
        <jaxb:bindings node="//xs:complexType[@name='OwnerType']">
            <annox:annotate>@lombok.Builder</annox:annotate>
            <annox:annotate>@lombok.NoArgsConstructor</annox:annotate>
            <annox:annotate>@lombok.AllArgsConstructor</annox:annotate>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

我得到了这样的信息:

代码语言:javascript
复制
Error while parsing schema(s).Location [ file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/catalegs-schema.xsd{4,56}].
org.xml.sax.SAXParseException: 'request' is already defined

完整输出:

代码语言:javascript
复制
$ ~/.sdkman/candidates/java/8.0.201-oracle/bin/xjc -verbose -xmlschema xsd/servei-territorial/merge/catalegs-schema.xsd -xmlschema xsd/servei-territorial/merge/oid-schema.xsd -b xsd/servei-territorial/merge/bindings.xjb -extension -npa -no-header           
parsing a schema...
[ERROR] Unsupported binding namespace "". Perhaps you meant "http://java.sun.com/xml/ns/jaxb/xjc"?
  line 2 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/catalegs-schema.xsd

[ERROR] Unsupported binding namespace "http://annox.dev.java.net". Perhaps you meant "http://java.sun.com/xml/ns/jaxb/xjc"?
  line 2 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/catalegs-schema.xsd

[ERROR] Unsupported binding namespace "http://annox.dev.java.net". Perhaps you meant "http://java.sun.com/xml/ns/jaxb/xjc"?
  line 2 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/oid-schema.xsd

[ERROR] 'request' is already defined
  line 4 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/oid-schema.xsd

[ERROR] (related to above error) the first definition appears here
  line 4 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/catalegs-schema.xsd

[ERROR] 'SearchRequestType' is already defined
  line 15 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/oid-schema.xsd

[ERROR] (related to above error) the first definition appears here
  line 6 of file:/home/jeusdi/projects/salut/mpi/hes-mpi-hazelcast-loader-service/xsd/servei-territorial/merge/catalegs-schema.xsd

Failed to parse a schema.

有没有关于如何处理这个问题的想法?

EN

回答 1

Stack Overflow用户

发布于 2021-07-16 13:15:16

如果您导入xml schema的对象具有相同的名称,并且没有唯一的命名空间,则它们将添加到相同的项目命名空间中,然后您将具有重复的对象定义。

可以通过在xml模式中添加xml名称空间使其唯一或将xml模式导入项目中的不同名称空间来解决此问题。

根据xml模式布局的外观,还可以更改xml模式。如果添加了第三个架构,其中定义了复杂类型的基

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
      <xs:complexType name="SearchRequestType">
    <xs:sequence>
      <xs:element name="oid" type="xs:string" minOccurs="0"/>
        <xs:element name="referenceDate" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="startIndex" type="xs:long" minOccurs="0"/>
      <xs:element name="pageSize" type="xs:long" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

然后将这个基础包含(并扩展)到其他xml模式中

代码语言:javascript
复制
<?xml version="1.0" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="srtype.xsd" />
  <xs:element name="request" type="SearchRequestType"/>
</xs:schema>
代码语言:javascript
复制
<?xml version="1.0" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="srtype.xsd"/>
    <xs:element name="request" type="extSearchRequestType"/>
    <xs:complexType name="extSearchRequestType">
        <xs:complexContent>
            <xs:extension base="SearchRequestType">
                <xs:sequence>
                    <xs:element name="tableName" type="xs:string" minOccurs="0"/>
                    <xs:element name="owner" type="OwnerType"/>
                    <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="term" type="xs:string" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="OwnerType">
        <xs:sequence>
            <xs:element name="ownerType" type="xs:string"/>
            <xs:element name="ownerCode" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

那么它的导入应该没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68392153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档