通过从另一个xsd选择性替换元素来解组xsd

通过从另一个xsd选择性替换元素来解组xsd,xsd,jaxb,unmarshalling,Xsd,Jaxb,Unmarshalling,我刚刚接触xsd和jaxb,所以如果我的问题不清楚,请教育我。此外,如果你需要任何更多的信息,让我知道,我会提供我能提供的 在我们公司,我们正在与来自第三方的xsd源进行合作。我们需要实现一个SOAP-Java转换,我们有一堆.wsdl和.xsd文件要处理。我们遇到了两个.xsd文件的问题。第三方提供了一个“datatypes.xsd”,具有org.hl7.v3命名空间和一个“datatypes-extensions-hl7nl.xsd”,具有nl.hl7.v3命名空间 当我解组xds源代码时,

我刚刚接触xsd和jaxb,所以如果我的问题不清楚,请教育我。此外,如果你需要任何更多的信息,让我知道,我会提供我能提供的

在我们公司,我们正在与来自第三方的xsd源进行合作。我们需要实现一个SOAP-Java转换,我们有一堆.wsdl和.xsd文件要处理。我们遇到了两个.xsd文件的问题。第三方提供了一个“datatypes.xsd”,具有org.hl7.v3命名空间和一个“datatypes-extensions-hl7nl.xsd”,具有nl.hl7.v3命名空间

当我解组xds源代码时,生成的.java文件将在另一个包下创建,该包以它们自己的名称空间命名:org/hl7/v3和nl/hl7/v3

鉴于第三方希望,在适用的情况下,“datatypes extensions.xsd”中的类型具有优先权,并且应该生成,而不是“datatypes.xsd”中的类型,并在同一个包中生成

到目前为止我所尝试的

由于我无法更改xsd源代码,我使用.jxb文件尝试了两种方法(未成功)

1:在单个目录中生成.java文件。这导致了覆盖问题

2:提供指向正确类型的绑定:

<jaxb:bindings schemaLocation="../coreschemas/datatypes.xsd">
        <jaxb:bindings node="//xs:complexType[@name='TEL']">
            <jaxb:class ref="nl.hl7.v3.TEL"/>
        </jaxb:bindings>
    </jaxb:bindings>

这在一开始是有效的,直到我更改了一个超类型的引用,这时编译器抱怨它无法再为扩展类型找到合适的超类型

来源

这些源代码是开放源代码的,因此如果您想亲自查看,请执行以下操作:

.wsdl:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:hl7="urn:hl7-org:v3"
             targetNamespace="urn:hl7-org:v3"
             name="OpvragenOverdrachtconcerns">
   <documentation> WSDL implementatie van OpvragenOverdrachtconcerns</documentation>
   <types>
      <xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified">
         <xsd:include schemaLocation="../schemas_codeGen/REPC_IN990110NL.xsd"/>
      </xsd:schema>
      <xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified">
         <xsd:include schemaLocation="../schemas_codeGen/REPC_IN990111NL.xsd"/>
      </xsd:schema>
   </types>
   <message name="REPC_IN990110NL">
      <part name="body" element="hl7:REPC_IN990110NL"/>
   </message>
   <message name="REPC_IN990111NL">
      <part name="body" element="hl7:REPC_IN990111NL"/>
   </message>
<?xml version="1.0" encoding="UTF-8"?>
<!-- REPC_IN990111NL - Opleveren overdrachtconcerns --><!--Note: this file was generated. DO NOT EDIT HERE.--><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:hl7-org:v3"
           targetNamespace="urn:hl7-org:v3"
           elementFormDefault="qualified">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hl7="urn:hl7-org:v3" xmlns:hl7nl="urn:hl7-nl:v3"
    xmlns:sch="http://www.ascc.net/xml/schematron" elementFormDefault="qualified" targetNamespace="urn:hl7-org:v3" xmlns="urn:hl7-org:v3">
    <xsd:include schemaLocation="voc.xsd"/>
    <xsd:import namespace="urn:hl7-nl:v3" schemaLocation="datatypes-extensions-hl7nl.xsd"/>

WSDL实现van OpvragenOverdachtConcerns
响应消息类型的标头:REPC_IN990111NL:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:hl7="urn:hl7-org:v3"
             targetNamespace="urn:hl7-org:v3"
             name="OpvragenOverdrachtconcerns">
   <documentation> WSDL implementatie van OpvragenOverdrachtconcerns</documentation>
   <types>
      <xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified">
         <xsd:include schemaLocation="../schemas_codeGen/REPC_IN990110NL.xsd"/>
      </xsd:schema>
      <xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified">
         <xsd:include schemaLocation="../schemas_codeGen/REPC_IN990111NL.xsd"/>
      </xsd:schema>
   </types>
   <message name="REPC_IN990110NL">
      <part name="body" element="hl7:REPC_IN990110NL"/>
   </message>
   <message name="REPC_IN990111NL">
      <part name="body" element="hl7:REPC_IN990111NL"/>
   </message>
<?xml version="1.0" encoding="UTF-8"?>
<!-- REPC_IN990111NL - Opleveren overdrachtconcerns --><!--Note: this file was generated. DO NOT EDIT HERE.--><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:hl7-org:v3"
           targetNamespace="urn:hl7-org:v3"
           elementFormDefault="qualified">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hl7="urn:hl7-org:v3" xmlns:hl7nl="urn:hl7-nl:v3"
    xmlns:sch="http://www.ascc.net/xml/schematron" elementFormDefault="qualified" targetNamespace="urn:hl7-org:v3" xmlns="urn:hl7-org:v3">
    <xsd:include schemaLocation="voc.xsd"/>
    <xsd:import namespace="urn:hl7-nl:v3" schemaLocation="datatypes-extensions-hl7nl.xsd"/>

数据类型中冲突类型的标头和定义。xsd:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:hl7="urn:hl7-org:v3"
             targetNamespace="urn:hl7-org:v3"
             name="OpvragenOverdrachtconcerns">
   <documentation> WSDL implementatie van OpvragenOverdrachtconcerns</documentation>
   <types>
      <xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified">
         <xsd:include schemaLocation="../schemas_codeGen/REPC_IN990110NL.xsd"/>
      </xsd:schema>
      <xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified">
         <xsd:include schemaLocation="../schemas_codeGen/REPC_IN990111NL.xsd"/>
      </xsd:schema>
   </types>
   <message name="REPC_IN990110NL">
      <part name="body" element="hl7:REPC_IN990110NL"/>
   </message>
   <message name="REPC_IN990111NL">
      <part name="body" element="hl7:REPC_IN990111NL"/>
   </message>
<?xml version="1.0" encoding="UTF-8"?>
<!-- REPC_IN990111NL - Opleveren overdrachtconcerns --><!--Note: this file was generated. DO NOT EDIT HERE.--><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:hl7-org:v3"
           targetNamespace="urn:hl7-org:v3"
           elementFormDefault="qualified">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hl7="urn:hl7-org:v3" xmlns:hl7nl="urn:hl7-nl:v3"
    xmlns:sch="http://www.ascc.net/xml/schematron" elementFormDefault="qualified" targetNamespace="urn:hl7-org:v3" xmlns="urn:hl7-org:v3">
    <xsd:include schemaLocation="voc.xsd"/>
    <xsd:import namespace="urn:hl7-nl:v3" schemaLocation="datatypes-extensions-hl7nl.xsd"/>


datatypes-extension-hl7nl.xsd中的头和类型

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:hl7="urn:hl7-org:v3" xmlns="urn:hl7-nl:v3" xmlns:sch="http://purl.oclc.org/dsdl/schematron" targetNamespace="urn:hl7-nl:v3">
    <xsd:import schemaLocation="datatypes.xsd" namespace="urn:hl7-org:v3"/>


预期和实际结果

如上所述,不应该根据不同的名称空间生成两个包,而应该创建一个包,其中的“nl.hl7.v3”类型由同名的“org.hl7.v3”类型生成

提前感谢您抽出时间

马克斯