【发布时间】:2010-09-24 03:01:56
【问题描述】:
我想用 Maven2 构建一个 Axis2 客户端(我只是访问一个远程 Web 服务,我没有实现一个!)我不想添加 21MB 的 JAR 到我的项目。当我使用 ADB 转换 WSDL 时,我必须在 pom.xml 中放入什么来编译代码?
【问题讨论】:
标签: java maven-2 classpath axis2
我想用 Maven2 构建一个 Axis2 客户端(我只是访问一个远程 Web 服务,我没有实现一个!)我不想添加 21MB 的 JAR 到我的项目。当我使用 ADB 转换 WSDL 时,我必须在 pom.xml 中放入什么来编译代码?
【问题讨论】:
标签: java maven-2 classpath axis2
总结对工作客户端的最小依赖
下面列出了带有详细信息的最小依赖项
客户端存根使用 %AXIS2_HOME%\bin\WSDL2Java 工具针对给定 WSDL 生成的 ServiceClient 类(为了生成,您需要类路径上的所有轴 jar,通过设置 AXIS_HOME 最容易实现)
org.apache.axis2.AxisFault:连接被拒绝:连接 -> 仅当 Web 服务因其他原因未启动或无法访问时才出现错误
请注意确切的版本,但行为会因版本之间的打包更改而足够通用,因此,上面提到了 FQCN-
轴版本 - 1.6.3
Tomcat 版本 - Apache Tomcat/7.0.64
Servlet 版本 - 3.0
java.runtime.version - 1.7.0_79-b15
【讨论】:
对于那些使用 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)
}
Here 是我在 Gradle 论坛中的原始帖子。
【讨论】:
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>
【讨论】:
-d xmlbeans 选项,则应该只需要 XML Beans 库,然后就不需要axis2-adb 依赖项。见:axis.apache.org/axis2/java/core/docs/…
客户端的最小罐子是:
以下 STAX jar 不是 Axis2 1.5.1 版本的一部分,如果您的 JDK 版本低于 6,则需要:
【讨论】:
也必须添加运输工具
<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>
【讨论】:
axis2-transport-local,但这可能只是因为我正在以编程方式配置 Axis。
在 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 的传输协议。
answer中的示例代码
【讨论】:
实际上,您只需要 axis-abd 依赖项,因为 axis2-kernel 是 axis-abd 的子依赖项。 因此,您可以总结为:
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.5.1</version>
</dependency>
【讨论】:
如果您的客户端在 Java 6 上运行,请考虑使用 JAX-WS 来使用 WS。 JAX-WS 使用 JAXB 标准进行绑定,客户端不需要一个额外的 jar。
【讨论】:
(注意:此回复由 Aaron Digulla 本人提供。以下是他自己回复的确切文本。)
在 maven2 中,使 ADB 客户端工作的最小依赖设置(“ADB”,就像您从 WSDL 创建 Java 类的方式一样)是这样的:
<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>
嗯...看来我无法将其标记为正确答案。有人可以复制这个,以便我可以标记他的帖子吗?
【讨论】: