Импортировать пространство имен. Невозможно разрешить имя в (n) компоненте «определение типа». - PullRequest
3 голосов
/ 23 февраля 2012

Контекст: я генерирую 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>

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Ладно разобрался, обойти:

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

0 голосов
/ 05 сентября 2013

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

...