maven-jaxb2-plugin не компилирует xsd на Linux-машине, но работает на Windows?

Вот фрагмент кода из pom.xml

            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.8.3</version>
            </plugin>

Вот исключение

   [INFO] --- maven-jaxb2-plugin:0.8.3:generate (default) @ customer-project ---
   [ERROR] Error while parsing schema(s).Location [ file:....Customer.xsd{12,97}].
    org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'customer:CustomerApplication' to a(n) 'element declaration' component.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
        at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:2537)

Первая соответствующая часть XSD

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://www.cohbe.org/CustomerRequest"
            xmlns:customer="http://www.cohbe.org/customer"
            targetNamespace="http://www.cohbe.org/CustomerRequest"
            elementFormDefault="qualified">
    <xsd:import schemaLocation="CustomerDetails.xsd"
              namespace="http://www.cohbe.org/customer"/>
    <xsd:element name="CustomerNewRequest">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="customer:CustomerApplicationDetail" minOccurs="0"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    ...
</xsd:schema>

Расположение файла CustomerDetails.xsd (вложенный XSD) такое же, как у первого XSD. Вот соответствующая часть

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="2.15" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://www.cohbe.org/customer"
            targetNamespace="http://www.cohbe.org/customer"
            xmlns:countries="http://www.cohbe.org/Counties"
            elementFormDefault="qualified">
    <!-- Version 2.15 -->
    <xsd:import namespace="http://www.cohbe.org/states" schemaLocation="States.xsd"/>
    <xsd:element name="CustomerApplicationDetail"
               type="CustomerApplicationDetail"/>
    <xsd:complexType name="CustomerApplicationDetail">

    .....
    </xsd:schema>

person emilly    schedule 19.06.2015    source источник
comment
Какие версии/вендоры JDK вы используете в Linux и Windows? java -version   -  person SubOptimal    schedule 19.06.2015
comment
в Linux я пробовал с jdk 1.6.41 и 1.7. На windows пробовал с jdk 1.6.35 и 1.7   -  person emilly    schedule 19.06.2015


Ответы (2)


У меня была та же проблема, когда совершенно корректные XSD не скомпилировались в Linux, но работали в Windows и Mac. Мне пришлось отключить строгую проверку в конфигурации плагина maven-jaxb-2 следующим образом:

<configuration>
    <schemaDirectory>src/main/resources/xsd</schemaDirectory>
    <strict>false</strict>
    <extension>true</extension>
</configuration>
person SpareTheRod    schedule 24.05.2017
comment
Да, ты прав. Я понял это как обходной путь. Похоже, здесь есть какая-то ошибка. - person emilly; 29.05.2017
comment
Согласованный. Это ошибка. Вам не нужно отключать строгую проверку. - person SpareTheRod; 30.05.2017
comment
Та же проблема здесь, воспроизведенная с версией 0.14.0 maven-jaxb2-plugin. Обходной путь тоже работает нормально, но это расстраивает - person Mossroy; 16.12.2019

Вы говорите, что импорт схемы через локальный файл работает в Windows, но не в Linux? Это странно, относительный локальный импорт всегда работает и присутствует почти в каждом тестовом проекте.
Это наводит меня на мысль, что у вас проблема со средой сборки. Убедитесь, что файлы присутствуют и что процесс сборки имеет разрешения на доступ к файлам.

Общий:

  • Используйте более новую версию, текущая версия 0.12.3, вы используете 0.8.3, которой более 2 лет.
  • Предоставьте mvn -X -e clean install журнал.
  • Предоставьте минимальный тестовый проект воспроизведения как PR здесь - например, под e/emily (или любым другим p/project-name по вашему желанию). Помните о лицензии.
person lexicore    schedule 20.06.2015
comment
Я также использовал 0.12.3, но результат тот же. Я пробовал mvn -X -e clean install, но не получил дополнительной информации. Файлы тоже есть - person emilly; 20.06.2015
comment
Но я не уверен, как я могу проверить, имеет ли процесс сборки разрешение на доступ к этому файлу или нет? - person emilly; 20.06.2015
comment
Тем не менее, рассмотрите возможность предоставления этого журнала. Может быть, мы увидим то, чего не видите вы. Как проверить разрешения - попробуйте скомпилировать просто Customer.xsd. Наконец, это ситуация, когда трудно помочь, не видя ваших файлов. Если вам нужна поддержка, выполните шаги, которые я описал выше. - person lexicore; 20.06.2015
comment
см. stackoverflow.com/questions/30955100/. Я также могу воспроизвести его на машине с Windows, если удалю <xsd:element name="CustomerApplicationDetail" type="CustomerApplicationDetail"/> из второго файла xsd. Затем я попытался использовать type вместо ref, как это предлагается на странице xfront.com/ZeroOneOrManyNamespaces.html, но затем получить One of 'ref' or 'name' must be present in a local element declaration. - person emilly; 20.06.2015
comment
Не могли бы вы взглянуть на stackoverflow.com/questions/31293874/. Я пробовал с ‹artifactId›maven-jaxb2-plugin‹/artifactId› ‹configuration› ‹extension›true‹/extension› ‹schemaDirectory›src/main/resources/META-INF/schema‹/schemaDirectory› ‹/configuration›, но это не работает. заранее спасибо - person emilly; 08.07.2015
comment
не могли бы вы взглянуть на stackoverflow.com/questions/31293874/, поскольку я не уверен, как действовать здесь? - person emilly; 09.07.2015