Пространство имен импорта - не удается разрешить имя в компонент (n) 'определение типа'

Контекст: я генерирую классы Java из файлов xsd с помощью плагина maven-jaxb. Все мои файлы .xsd находятся в одном месте - в каталоге src / main / resource.

Проблема: все работает нормально, когда xsd не ссылаются / не импортируют другие xsd с другим целевым пространством имен. Однако, когда следующий xsd ниже (с targetNamespace = "http://www.companyA.com/someservice") импортирует другой xsd filename.xsd из другого пространства имен (namespace = "http://www.companyB.com/") , Я получаю указанную выше ошибку: не удается преобразовать имя xxx в компонент (n) 'определение типа'.

Изменить: имя элемента в текущем файле xsd - «entityName», а его тип - «companyB: entityName» (т.е. имена такие же.

Затем я попытался вызвать xjc для этого файла из командной строки, и это правильно сгенерировало классы Java. Я также убедился, что в Eclipse я могу щелкнуть ctrl-кнопкой / изучить исходный код на "type =" companyCdm: entityName ", который правильно открывает файл filename.xsd. Однако по какой-то причине maven не может добраться до него.

Вопрос: Что мне не хватает? Почему этот случай (2 пространства имен) отличается от работы с одним пространством имен?

Вот мой XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.companyA.com/someservice"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:companyB="http://www.companyB.com/version"
    targetNamespace="http://www.companyA.com/someservice"
    elementFormDefault="qualified" attributeFormDefault="qualified">

    <xsd:import namespace="http://www.companyB.com/version" schemaLocation="filename.xsd" />

    <xsd:element name="MyName" type="MyType" />

    <xsd:complexType name="MyType">
        <xsd:annotation>
        <xsd:documentation>
            A list
        </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="entityName" type="companyB:entityName" maxOccurs="1" minOccurs="1"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

person crazy horse    schedule 23.02.2012    source источник
comment
Я получаю ту же ошибку, за исключением того, что мой основной xsd находится в каталоге, в котором я запускаю команду, а xsd, от которого я зависит, уже находятся в другом (под) каталоге. Какие-либо предложения?   -  person KingAndrew    schedule 29.08.2013
comment
на данный момент, к сожалению, нет.   -  person crazy horse    schedule 30.08.2013
comment
Я столкнулся с той же проблемой. У тебя есть какое-нибудь решение?   -  person Abdul Fatah    schedule 14.01.2020


Ответы (2)


Хорошо понял обходной путь:

Я переместил все зависимые xsd (то есть проблемные ссылки xsd) плюс кучу других неиспользуемых xsd в отдельную папку, а затем заново сгенерировал код с помощью maven - теперь он работает. Похоже, что произошел некоторый конфликт пространства имен с одним из других неиспользуемых xsd, я еще не указал конкретный.

person crazy horse    schedule 23.02.2012

O'Rielly [Java and XML Chap3][1] говорит, что использование InputSource позволит вам анализировать относительные пути:

person KingAndrew    schedule 04.09.2013
comment