Каков минимальный путь к классу для клиента Axis2?
Вопрос
Я хочу создать клиент Axis2 (я получаю доступ только к удаленному веб-сервису, я нет реализуем один!) с Maven2, и я не хочу добавлять 21 МБ банок в свой проект.Что я должен положить в мой pom.xml чтобы скомпилировать код, когда я преобразовал файл WSDL с АБР?
Решение
( Примечание: этот ответ был предоставлен самим Аароном Дигуллой. Ниже приводится точный текст его собственного ответа.)
В maven2 минимальный набор зависимостей, позволяющий клиенту ADB работать («ADB», как при создании классов Java из WSDL), выглядит следующим образом:
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-kernel</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.4.1</version>
</dependency>
Хммм ... кажется, я не могу пометить это как правильный ответ. Может кто-нибудь скопировать это, чтобы я мог отметить его пост?
Другие советы
Минимальными банками для клиента являются:
- activation-1.1.jar
- axiom-api-1.2.8.jar
- axiom-impl-1.2.8.jar
- axis2-adb-1.5.1.jar
- axis2-kernel-1.5.1.jar
- axis2-transport-http-1.5.1.jar
- axis2-transport-local-1.5.1.jar
- commons-codec-1.3.jar
- commons-httpclient-3.1.jar
- commons-logging-1.1.1.jar
- httpcore-4.0.jar
- mail-1.4.jar
- neethi-2.0.4.jar
- wsdl4j-1.6.2.jar
- XmlSchema-1.4.3.jar
Приведенные ниже STAX jars не являются частью версии Axis2 1.5.1 и понадобятся, если ваша версия JDK меньше 6:
- stax-1.2.0.jar
- stax-api-1.0.1.jar
Пришлось тоже добавить транспорты
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>1.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>1.5.4</version>
</dependency>
Таким образом, минимальная зависимость для работающего клиента
- axiom-api-1.2.14.jar
- axiom-impl-1.2.14.jar
- axis2-adb-1.6.3.jar
- axis2-kernel-1.6.3.jar
- axis2-transport-http-1.6.3.jar
- axis2-transport-local-1.6.3.jar
- commons-codec-1.3.jar
- commons-httpclient-3.1.jar
- commons-logging-1.1.1.jar
- httpcore-4.0.jar
- mail-1.4.jar
- neethi-3.0.2.jar
- wsdl4j-1.6.2.jar
- XmlSchema-1.4.7.jar
Ниже перечислены минимальные зависимости с подробной информацией
заглушка клиента использует класс ServiceClient, созданный с помощью инструмента %AXIS2_HOME%\ bin\ WSDL2Java для данного WSDL (для генерации вам понадобятся все банки axis в classpath, что проще всего сделать, установив AXIS_HOME)
Классы, требуемые заглушкой клиента по адресу СКОМПИЛИРОВАТЬ время
- axiom-api-1.2.14.jar -- требуется во время компиляции заглушкой клиента для org.apache.axiom.om.OMElement, org.apache.axiom.soap.SOAPEnvelope, org.apache.axiom.soap.SOAPFactory, org.apache.axiom.om.OMNamespace
- axis2-adb-1.6.3.jar -- требуется во время компиляции заглушкой клиента для org.apache.axis2.databinding.Исключение ADBException
- axis2-kernel-1.6.3.jar -- требуется во время компиляции заглушкой клиента для класса org.apache.axis2.AxisFault
Классы, необходимые для успешного вызова заглушки клиента по адресу БЕЖАТЬ время
- axiom-impl-1.2.14.jar (без этого исключения org.apache.axiom.om.OMException:Не найдена мета-фабрика для функции "по умолчанию";обычно это означает, что axiom-impl.jar отсутствует в пути к классу)
- axis2-transport-http-1.6.3.jar (без этого org.apache.axis2.deployment.Исключение DeploymentException:org.apache.axis2.transport.http.CommonsHTTPTransportSender)
- axis2-transport-local-1.6.3.jar (без этого org.apache.axis2.deployment.Исключение DeploymentException:org.apache.axis2.transport.local.LocalTransportSender)
- commons-codec-1.3.jar (без этого java.lang.NoClassDefFoundError:org/apache/commons/codec/DecoderException)
- commons-httpclient-3.1.jar (без этого org.apache.axis2.deployment.Исключение DeploymentException:org/apache/commons/httpclient/HttpException)
- commons-logging-1.1.1.jar (без этого java.lang.NoClassDefFoundError:org/apache/commons/ведение журнала/LogFactory)
- httpcore-4.0.jar (без этого java.lang.NoClassDefFoundError:org/apache/http/HttpResponseFactory)
- mail-1.4.jar (без этого java.lang.NoClassDefFoundError:javax/почта/интернет/Исключение ParseException)
- neethi-3.0.2.jar (без этого java.lang.NoClassDefFoundError:org/apache/neethi/PolicyComponent)
- wsdl4j-1.6.2.jar (без этого java.lang.NoClassDefFoundError:javax/wsdl/Исключение WSDLException)
- XmlSchema-1.4.7.jar (без этого java.lang.ClassNotFoundException:org/apache/ws/commons/схема/XMLSchema)
org.apache.axis2.AxisFault:Отказано в подключении:подключение -> ОШИБКА, ТОЛЬКО если веб-служба не запущена или доступна по какой-либо другой причине
Обратите внимание на точную версию (ы), однако поведение будет достаточно общим с учетом изменений упаковки в разных версиях, следовательно, упомянутые выше FQCNs-
Версия Axis - 1.6.3
Версия Tomcat - Apache Tomcat/7.0.64
Версия сервлета - 3.0
java.runtime.версия - 1.7.0_79-b15
Axis2 версии 1.6.2 не будет работать для меня без axis2-xmlbeans (хотя это может быть связано с тем, что я также использую axis2-wsdl2code- плагин maven-plugin и xmlbeans как моя структура привязки данных). У меня есть следующий POM:
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-kernel</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-xmlbeans</artifactId>
<version>1.6.2</version>
</dependency>
Если ваш клиент работает на Java 6, рассмотрите возможность использования JAX-WS для использования WS. JAX-WS использует стандарт JAXB для привязки, и вам не нужен ни один дополнительный jar для клиента.
На самом деле вам нужна только зависимость axis-и , поскольку axis2-kernel является зависимой от axis-abd . Поэтому вы можете подвести итог:
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.5.1</version>
</dependency>
В Axis2 версии 1.5.1 модули maven, похоже, были реструктурированы. Р>
Мои скрипты Groovy (с использованием привязки ADB) имеют следующие зависимости:
@Grapes([
@Grab(group='org.apache.axis2', module='axis2-kernel', version='1.5.1'),
@Grab(group='org.apache.axis2', module='axis2-adb', version='1.5.1'),
@Grab(group='org.apache.axis2', module='axis2-transport-local', version='1.5.1'),
@Grab(group='org.apache.axis2', module='axis2-transport-http', version='1.5.1'),
])
В этом есть логика. Я мог бы использовать альтернативную структуру привязки при создании моей заглушки или использовать альтернативный транспортный протокол для HTTP.
Пример кода в этом ответ
Для тех, кто использует Gradle , здесь я исключаю ненужные библиотеки:
dependencies {
ext.compileEx = { lib, exModules, exGroups ->
compile (lib) {
exModules.each { exclude module : "$it" }
exGroups.each { exclude group: "$it" }
}
}
List axisExModules = [ 'axiom-compat', 'jaxen', 'apache-mime4j-core' ]
List axisExGroups = [ 'javax.servlet', 'commons-fileupload', 'org.apache.woden',
'javax.ws.rs', 'org.apache.geronimo.specs', 'org.codehaus.woodstox' ]
compileEx ('org.apache.axis2:axis2-adb:1.6.3', axisExModules, axisExGroups)
compileEx ('org.apache.axis2:axis2-transport-local:1.6.3', axisExModules, axisExGroups)
compileEx ('org.apache.axis2:axis2-transport-http:1.6.3', axisExModules, axisExGroups)
}
здесь мой оригинальный пост на форумах Gradle.