Как создать JAVA классов из иерархии XSD без пространства имен - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть набор файлов XSD от клиента. Мне нужно сгенерировать java классов из них. Один из XSD импортирует другой без пространства имен. Это не сработает mvn generate-sources с ошибкой: sr c -resolve: Невозможно разрешить имя 'faultstring' в (n) компоненте "объявление элемента". . Орг xml .sax.SAXParseException; systemId: file: /src/main/resources/Common/SOAP_Fault_v4_0_0.xsd

Я использую openjdk 11 с версией 3.3.0 cxf-xj c -plugin для генерации классов. В приложении находится проект.

Я попытался сгенерировать дочерний XSD (SOAP_Fault_v4_0_0) отдельно и использовал файл привязок для ссылки на сгенерированный класс из parent (Envelope). Не работает Я также попытался использовать другой плагин jaxb2-maven-plugin (v2.5.0), но он заканчивается с той же ошибкой.

Когда я даю пространство имен дочернему XSD SOAP_FaultElements_v4_0_0.xsd и ссылаюсь на SOAP_Fault_v4_0_0.xsd используя префикс, он генерирует классы нормально, но затем он не совпадает с ответом клиента. Я не могу изменить клиентские XSD, поскольку это выходит за рамки моей компетенции. Однако, если модификация не изменяет пространства имен и структуру, я могу попробовать.

Ниже приведены XSD для справки:

    <?xml version="1.0" encoding="UTF-8"?>
        <xs:schema xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema"
                   targetNamespace="http://schemas.xmlsoap.org/soap/envelope/"
                   elementFormDefault="qualified" attributeFormDefault="unqualified">
            <xs:include schemaLocation="Common/SOAP_Fault_v4_0_0.xsd"/>
            <xs:element name="Envelope">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Body">
                            <xs:complexType>
                                <xs:choice>
                                    <xs:element name="request">
                                        <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                                <xs:maxLength value="36"/>
                                            </xs:restriction>
                                        </xs:simpleType>
                                    </xs:element>
                                    <xs:element ref="env:Fault"/>
                                </xs:choice>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://schemas.xmlsoap.org/soap/envelope/"
           elementFormDefault="qualified" attributeFormDefault="unqualified" version="4.0.0">
    <xs:import schemaLocation="SOAP_FaultElements_v4_0_0.xsd"/>
    <xs:element name="Fault">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="faultstring"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified" attributeFormDefault="unqualified" version="4.0.0">
    <xs:element name="faultstring">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:maxLength value="255"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

Поиск предложений по решению проблемы.

...