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