Мы работаем над проектом веб-сервиса с 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
.