http://ws.apache.org/axis2/1_3/quickstartguide.html可以找到原文,这里并没有彻底按照原文进行翻译。
准备工作
1、下载并安装JDK,Axis2要求JDK至少为1.4。设置JAVA_HOME环境变量;
2、下载Axis2;
3、解压Axis2后你会找到一个名为axis2.war的文件,把它拷贝到servlet引擎的发布目录;
4、设置AXIS2_HOME环境变量,或许你应该把%AXIS2_HOME%\bin变量加入到PATH中去。
在很多情况下,我们需要一个Service的WSDL文件,%AXIS2_HOME%\bin目录中的Java2WSDL可以根据你的代码自动生成该WSDL文件。同样有的时候会根据WSDL文件自动生成Java文件,这个工具wsdl2java也同样在%AXIS2_HOME%\bin目录中。
1、编译你的Java服务类
2、用以下命令通过服务类生成WSDL文件:
java2wsdl -cp . -cn package.StockQuoteService -of StockQuoteService.wsdl
想通过WSDL文件生成对应的Java文件,参看wsdl2java命令。
以下的例子均采用将我们定义的服务打包成aar文件拷贝到webapps\axis2\WEB-INF\services目录中。
第一个简单的Axis2 Web Service
以下是要作为WebService发布的类代码:
- package org.jivaro.hw;
- public class HelloWorldService {
- public String echo(String value) {
- System.out.println("HelloWorld Service received: " + value);
- return "HelloWorld Service received: " + value;
- }
- }
我们要发布这个Service,就得定义一个暴露这个类,通过定义这个services.xml:
- <service>
- <parameter name="ServiceClass" locked="false">
- org.jivaro.hw.HelloWorldService
- </parameter>
- <operation name="echo">
- <messageReceiver
- class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
- </operation>
- </service>
嗯,现在我们具备了一个Web Service类,和一个描述服务的XML文件,可以发布了。目录层次应该如此,定义一个同服务名同名的文件夹(这里是HelloWorldService)作为根目录,里面包含了类文件和META-INF文件夹,META-INF下包含了services.xml文件。不用aar文件,也可以直接将这个文件夹拷贝到发布目录中去。
aar文件的打包方式有两种:
1、你确定你使用了具备打jar包的开发工具,打包该文件夹下的所有文件,不包含根目录,定义名称为HelloWorldService.aar;
2、使用命令行方式,请确定你设置了正确的环境变量,用jar打包服务类和META-INF,当然这种方式更适合通过build.xml文件来生成。
把HelloWorldService.aar拷贝到webapps\axis2\WEB-INF\services目录中。
启动Tomcat,通过控制台应可以看到如下信息
[INFO] Deploying Web service: HelloWorldService.aar
通过浏览器,输入:http://localhost:8080/axis2/services/listServices
能看到所有现有的服务,同样你能找到:
HelloWorldService
Service EPR : http://localhost:8080/axis2/services/HelloWorldService
Service Description : No description available for this service
Service Status : Active
Available Operations
- echo
http://localhost:8080/axis2/services/HelloWorldService?wsdl,能看到这个服务的wsdl定义
http://localhost:8080/axis2/services/HelloWorldService?xsd,能查看这个服务的概要
http://localhost:8080/axis2/services/HelloWorldService/echo?value=111,可以看到返回了一个xml串:
- <ns:echoResponse xmlns:ns="http://hw.jivaro.org">
- <ns:return>HelloWorld Service received: 111</ns:return>
- </ns:echoResponse>
注意:因为我们的echo方法是这样定义的:public String echo(String value),所以在url里的参数是value而不是其它的变量。它正确返回了期待的字符串。
什么是WSDL?
是一种web服务描述语言,它描述了所提供的服务:
- 它提供了哪些服务
- 怎样调用这些服务
- 当用户调用业务服务时,该业务服务需要用户提供什么信息?
- 用户如何提供这些必须信息
- 服务将以什么格式返回给用户的信息
通常,我们还需要了解SOAP。
关于WSDL的理解,可以查阅http://www.ibm.com/developerworks/cn/webservices/ws-intwsdl/part1/系列的文章。