Я новичок в работе с 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, я (безуспешно) попробовал 2 вещи, используя файл .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>
Первоначально это работало, пока я не изменил ссылку на супертип, после чего компилятор пожаловался, что больше не может найти правильный супертип для расширяющихся типов.
Источники
Источники с открытым исходным кодом, так что если вы хотите увидеть их для себя: https://decor.nictiz.nl/pub/vzvz/kz-vzvz-xml-20190122T131422.zip
.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>
Заголовок типа ответного сообщения: REPC_IN990111NL:
<?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">
Заголовок и определение конфликтующего типа в datatypes.xsd:
<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:complexType name="TEL">
<xsd:complexContent>
<xsd:extension base="URL">
<xsd:sequence>
<xsd:element name="useablePeriod" type="IVL_TS" minOccurs="0"
maxOccurs="unbounded">
<!-- FIXME: one would expect the name "GTS" here but it's not
SXCM does ALL the right things, it's just not the right NAME. -->
</xsd:element>
<xsd:element name="id" type="II" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="use" type="set_cs_TelecommunicationAddressUse" use="optional">
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Заголовок и введите 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"/>
<xsd:complexType name="TEL">
<xsd:complexContent>
<xsd:extension base="ANY">
<xsd:sequence>
<xsd:element name="useablePeriod" type="QSET_TS" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="value" type="xsd:anyURI" use="optional"/>
<xsd:attribute name="use" type="set_TelecommunicationAddressUse" use="optional"/>
<xsd:attribute name="capabilities" type="set_TelecommunicationCapability" use="optional"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Ожидаемые и фактические результаты
Как указано выше, вместо генерации двух пакетов в соответствии с различными пространствами имен, один должен быть создан с типами "nl.hl7.v3", сгенерированными вместо типов "org.hl7.v3" с тем же именем.
Спасибо, что уделили время.
Макс