Soap 基于的Web Service在演化,实现其的技术栈也在随之变化。Java领域出现了许多了Web Service相关的技术,从早期的Apache Axis,xfire到今天的Apache Axis2, Apache CXF, Metro,Spring WS。Java对Soap Web Service在早期提出了JAX-RPC的模型,今天JAX-RPC则被JAX-WS代替,这也体现了业界正在由RPC风格到 Document(Message)风格的转变。
正如Axis官方所说,Axis虽然如今已经逐步被新一代的Web Service技术取代,但是宝刀未老,有时后还是得使用Axis
- 需要使用JAX-RPC的项目。只有两个主要的JAX-RPC实现,一个是Sun给出的标准参考实现,另一个就是Axis
- 需要访问或者发布使用SOAP encoding的Web Service的项目,虽然SOAP encoding已经被废弃,新一代的Web Service框架也不再支持这种use,但是也许项目需要接入的Web Service就是用了SOAP encoding的已经基于Axis构建的项目。如果用新一代的Web Service技术重写已有的项目,投资回报堪忧,那估计还是继续用Axis好些。
访问已有的基于rpc/encoded的Web Service是一个比较常见的应用集成场景,尤其是在企业内部的信息交换,如果有跨平台的Service实现存在,这种需求可能更加常见。
Maven依赖
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
Maven 插件
MojoHaus Maven 插件项目提供了一个支持Axis wdsl2java/java2wsdl 工具的插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>axistools-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<sourceDirectory>${project.basedir}/src/main/resources</sourceDirectory>
<packageSpace>top.ourway.wsdl</packageSpace>
<subPackageByFileName>true</subPackageByFileName>
</configuration>
<executions>
<execution>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
利用其在项目构建生命周期中的代码生成功能,可以很容实现对rpc/encorded服务的访问,使用上和JAX-WS用wsimport工具生成代码相比差不多,所生成代码的使用模式也比较类似。
HelloServerPortType portType = new HelloServiceLocator().getHelloServerPort();
portType.sayHello("li mei");