Почему axistools-maven-plugin пытается получить доступ к этой относительной схеме? - PullRequest
4 голосов
/ 24 января 2011

Мы работаем над проектом веб-сервиса с Axis 1.x, и у меня возникают проблемы с работой сборки Maven.

Я делаю

 mvn clean generate-sources

, который запускает цель wsdl2java axtools-maven-plugin. Это в конечном счете прерывается с

[INFO] [axistools:wsdl2java {execution: generate-project}]
[INFO] about to add compile source root
[INFO] Processing wsdl: C:\Project\src\main\webapp\WEB-INF\wsdl\project.wsdl
Jan 24, 2011 11:24:58 AM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error generating Java code from WSDL.

Embedded error: Error running Axis
C:\Project\src\main\webapp\WEB-INF\project.xsd (The system cannot find the file specified)

Это правильно. Этот файл не существует. (И -e не дает никакой дополнительной полезной информации - это исключение LifecycleExecutionException, вызванное MojoExecutionException, вызванное AxisPluginException, вызванное FileNotFoundException.)

Дело в том, что он не должен искать WEB-INF\project.xsd, он должен получить доступ к WEB-INF\wsdl\project.xsd.

Вот что говорит WSDL:

<wsdl:types>
    <xsd:schema targetNamespace="http://domain/project/">
        <xsd:import namespace="http://domain/schema/" schemaLocation="project.xsd"/>
    </xsd:schema>
</wsdl:types>

Кажется, это хорошо работает для всех моих коллег. Мы все используем Maven 2.2.1, а axistools-maven-plugin прикреплен к 1.4 со следующей конфигурацией:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>axistools-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
      <execution>
        <id>generate-project</id>
        <goals>
          <goal>wsdl2java</goal>
        </goals>
        <configuration>
          <sourceDirectory>${basedir}/src/main/webapp/WEB-INF/wsdl/</sourceDirectory>
          <outputDirectory>target/generated-sources</outputDirectory>
          <serverSide>true</serverSide>
          <testCases>false</testCases>
          <wrapArrays>false</wrapArrays>
        </configuration>
      </execution>
    </executions>
  </plugin>

Я уже полностью очистил свой локальный репозиторий Maven, надеясь, что это была мошенническая зависимость, но это ничего не изменило. Есть идеи, что может быть причиной этого только для меня, но не для моих коллег?


РЕДАКТИРОВАТЬ 1: я попытался изменить schemaLocation на wsdl/project.xsd (только для целей тестирования, я не смогу вносить постоянные изменения в WSDL) и получил этот забавный результат:

Embedded error: Error running Axis
WSDLException (at /wsdl:definitions/wsdl:types/xsd:schema):
    faultCode=OTHER_ERROR: An error occurred trying to resolve
    schema referenced at 'wsdl\project.xsd', relative to
    'file:/C:/Project/src/main/webapp/WEB-INF/wsdl/project.wsdl'.:
    This file was not found:
    file:/C:/Project/src/main/webapp/WEB-INF/wsdl/wsdl/project.xsd

Если вы, как и я, сейчас думаете, что, возможно, ./project.xsd может сработать ... Нет, извините, это заставляет его снова искать WEB-INF/project.xsd.


РЕДАКТИРОВАТЬ 2: Хорошо, теперь axistools просто дразнит меня ...

../project.xsd
-> src/main/webapp/project.xsd (неверно)

../wsdl/project.xsd
-> src/main/webapp/wsdl/project.xsd (неверно)

../WEB-INF/wsdl/project.xsd
-> src/main/webapp/WEB-INF/WEB-INF/wsdl/project.xsd (неверно)

Как напоминание, правильный путь будет src/main/webapp/WEB-INF/wsdl/project.xsd.

Ответы [ 4 ]

7 голосов
/ 09 февраля 2011

Попробуйте использовать тег useEmitter, например:

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>axistools-maven-plugin</artifactId>
            <version>1.4</version>
            <configuration>
                <useEmitter>true</useEmitter>

...

1 голос
/ 14 сентября 2011

К сожалению, когда <useEmitter> включен, <subPackageByFileName> функция больше не работает.

Так что мне пришлось разделить поколение на два "казни"

  • сначала все WSDL без XSD и с <subPackageByFileName>true</subPackageByFileName>
  • , а затем к одному с XSD относятся (к счастью, у меня только один) с <useEmitter>true</useEmitter> (и имя файла явно добавлено к <packageSpace>)
1 голос
/ 28 июля 2011

Мне удалось решить эту проблему, убедившись, что путь к местоположению проекта не содержит пробелов. Поэтому расположение по умолчанию в Win XP не будет работать («Документы и настройки»)

0 голосов
/ 13 февраля 2013

Я также получил ту же проблему при сборке с maven, как уже упоминалось, и мне удалось решить эту проблему, убедившись, что путь к местоположению проекта не содержит пробелов.

...