Web service 其运\作原理如下 (下图引用官方网站简介):
+--------------------------------------+
| web service registry
| (aka service broker)
| (UDDI)
+--------------------------------------+
^ ^
| |
(2) | | (1)
| (the client (the web service
WSDL finds the WSDL provider publishes
| service the web service)
| they want) |
| |
v v
+-----------+ +-----------+
| service |<--SOAP-->| service |
| requestor | | provider |
+-----------+ (3) +-----------+
(1) 发布 Web Service.
(2) 寻找已发布的 Web Service.
(3) 通过 SOAP 互相沟通.
(1) 及 (2) 均为 optional.
WSDL -- Web Services description Language. WSDL 描述 web service 的功能.
UDDI -- Universal Description, Discovery and Integration. 发布web service 的协定.
SOAP -- Simple Object Access Protocol. SOAP 通过 HTTP 传送 XML message.
下面将对Axis2 作最简单的实例Hello World.
开始:
安装Tomcat 5.x. ( 亦可选择使用 Axis2 提供的 SimpleHTTPServer )
http://apache.seekmeup.com/tomcat/tomcat-5/v5.5.17/bin/apache-tomcat-5.5.17.exe
下载后直接安装到目录 D:\\tomcat
由于本人电脑安装了几个 tomcat , 故把 port设為8083 ( 预设port是8080 )
http://localhost:8083/ 测试是否安装成功.
下载 axis2-std-1.0-bin.zip 并解压到 D:\\axis2
http://ws.apache.org/axis2/download.cgi
http://www.reverse.net/pub/apache/ws/axis2/1_0/axis2-std-1.0-bin.zip
设定系统环境变数 AXIS2_HOME=D:\\axis2
下载 axis2.war :
http://ws.apache.org/axis2/download.cgi
http://mirrors.isc.org/pub/apache/ws/axis2/1_0/axis2.war
将 axis2.war 放进 D:\\tomcat\\webapps 目录下.
启动 tomcat 就会自动产生 D:\\tomcat\\webapps\\axis2
浏览 http://localhost:8083/axis2/ , 画面如下:
Services -- 观看已 desploy 的 web services.
Validate -- 确定系统是否缺少 必要的library.
Administration -- axis2 管理控制台.
点选 Administration 连结进入控制台登入介面, 输入
User : admin
Password : axis2
上面用户及密码为预设值,
可到 D:\\tomcat\\webapps\\axis2\\WEB-INF\\conf\\axis2.xml 修改 用户名及密码.
<parameter name=\"userName\" locked=\"false\">admin</parameter>
<parameter name=\"password\" locked=\"false\">axis2</parameter>
登入后画面如下:
安装 Axis2 Service Archive & Code Generator Eclipse plug in(使用上发生问题):
下载 Eclipse WTP:
http://www.eclipse.org/webtools/
http://www.eclipse.org/downloads/download.php?file=/webtools/downloads/drops/R-1.5.0-200606281455/wtp-all-in-one-sdk-R-1.5.0-200606281455-win32.zip
解压至 D:\\eclipse_wtp
下载 Axis2_Service_Archiver.zip 及 Axis2_Code_Generator.zip
http://ws.apache.org/axis2/tools/index.html
http://mirrors.combose.com/apache/ws/axis2/tools/1_0/Axis2_Service_Archiver.zip
http://apache.edgescape.com/ws/axis2/tools/1_0/Axis2_Code_Generator.zip
解压后 将 plugins 目录复製至 D:\\eclipse_wtp\\plugins
测试 Axis2 Web Service:
编写 Axis2 Web Service 主要需要4个步骤:
[1] 编写实作类别.
[2] 编写 services.xml 描述 Web Services 档案.
[3] 建立 Web Services *.aar archive (Axis Archive)
[4] 最后发布Web Services.
使用 Eclipse 建立 Project:
Eclipse: File -> New -> Java Project
Project Name: HelloWorldService -> Finish
[1] 建立 HelloWorldService class:
-------------- HelloWorldService.java -----------------
package test.joeyta
public class HelloWorldService {
public String echo(String value) { // 这个 service 只是将输入的文字 return 出去
System.out.println("Service HelloWorldService: " + value);
return value;
}
}
-------------- HelloWorldService.java -----------------
[2] 新增目录 D:\\eclipse_wtp\\HelloWorldService\\META-INF
建立 service descriptor 档案 D:\\eclipse_wtp\\HelloWorldService\\META-INF\\services.xml:
--------------------- services.xml --------------------------
<service>
<parameter name=\"ServiceClass\"
locked=\"false\">test.joeyta.HelloWorldService</parameter>
<operation name=\"echo\">
<messageReceiver class=\"org.apache.axis2.rpc.receivers.RPCMessageReceiver\"/>
</operation>
</service>
--------------------- services.xml --------------------------
<parameter name=\"ServiceClass\" locked=\"false\">test.joeyta.HelloWorldService</parameter>
描述 service class. 这里要包含 package,
<operation name=\"echo\">
描述 此 Service 提供的服务.
Eclipse 里的 project 如下所示:
[3] 建立 Axis2 service archive:
在 Eclipse 里 right click \"HelloWorldService\" project
选 Export -> JAR file
Select the resource to export: 点择 HelloWorldService 裡的 services.xml 及 test.joeyta package
JAR file: D:\\eclipse_wtp\\workspace\\HelloWorldService.aar
然后按 Finish, 就会產生 D:\\eclipse_wtp\\workspace\\HelloWorldService.aar
设定如下图所示:
[4] 上载 Axis2 Service:
Axis2 Administration 登陆后 选择 Upload Service 连结:
http://localhost:8083/axis2/axis2-admin/upload
然后选择浏览 D:\\eclipse_wtp\\workspace\\HelloWorldService.aar
按 upload 后, 点选 Available Services 就会看到如下所示:
在上图中点选 HelloWorldService 连结就会看到该 service 的 WSDL:
http://localhost:8083/axis2/services/HelloWorldService?wsdl
如果检视 WSDL 时出现 (internal server error page) :
即检视 WSDL: http://localhost:8083/axis2/services/HelloWorldService?wsdl
出现 Provider org.apache.xalan.processor.TransformerFactoryImpl not found 等信息.
请到 http://www.apache.org/dist/java-repository/xalan/jars/
下载 xalan-2.7.0.jar
把它放在 D:\\tomcat\\webapps\\axis2\\WEB-INF\\lib 下就能解决.
建立 Client 测试程式:
Eclise: File -> New -> Java Project
Project name: HelloWorldClient
按 Finish 就产生 HelloWorldClient project
点击 HelloWorldClient 右键选 Properties
然后选择 Java Build Path,
Source:
Source folders on build path: 新增 src 目录
Default output folder: HelloWorldClient/bin
如下图所示:
Library:
按 Add External JARs 新增所有 D:\\axis2\\lib 裡的 jar libraries.
使用 WSDL2JAVA 產生 stub classes:
由于测试时 Eclipse Axis2 Code Generator plugin 出问题,
故只好在 DOS command prompt 用手工输入產生.
进入目录 D:\\axis2\\bin , 执行:
D:\\axis2\\bin>wsdl2java.bat -uri http://localhost:8083/axis2/services/HelloWorldService?wsdl -o D:\\eclipse_wtp\\workspace\\HelloWorldClient -p test.joeyta
-uri WSDL 的 uri 位置.
-o 输出 stub classes 的位置. 预设会增加 src 目录.
-p 设定输出 stub classes 使用的 package.
產生 HelloWorldServiceStub.java 及 HelloWorldServiceCallbackHandler.java , 如下图所示.
建立 Client 程式
------------------- HelloWorldClient.java ----------------------
public class HelloWorldClient {
public static void main(String[] args) throws Exception {
HelloWorldServiceStub stub = new HelloWorldServiceStub()
HelloWorldServiceStub.Echo request = new HelloWorldServiceStub.Echo()
request.setValue(\"Hello world, Joeyta\")
EchoResponse response = stub.echo(request)
System.out.println(\"Response : \" + response.get_return())
}
}
------------------- HelloWorldClient.java ----------------------
执行后输出结果:
Response : Hello world, Joeyta
如下图下示:
使用 TCP Monitor 监视 request 及 response SOAP conent:
下载旧版 Axis library axis-bin-1_4.zip:
http://apache.seekmeup.com/ws/axis/1_4/
解压后把 axis.jar 复制至 D:\\axis2\\lib 裡,
进入 D:\\axis2\\lib 目录
执行 D:\\axis2\\lib> java -classpath axis.jar org.apache.axis.utils.tcpmon
就会弹出 TCPMonitor
Listen port 设為 9999 ,
Target Hostname : 127.0.0.1
Target Port:8083
然后按 Add, 如下图所示:
[ 这样设可以依靠 port 9999 去监听 port 8083 ]
修改 Client program HelloWorldServiceStub.java
将所有 port 从 8083 改为 9999 后, 再次执行 HelloWorldClient.java
就可以得到如下的 SOAP message:
使用 SOAP Monitor 监视 SOAP data, 下面是官方的教学.
http://ws.apache.org/axis2/1_0/soapmonitor-module.html
官方文档非常多及齐全, 若想进一步了解, 需要花更长的时间:
http://ws.apache.org/axis2/1_0/index.html
Axis2 的文档及教学非常充足. 官方文档如下连结:
http://ws.apache.org/axis2/1_0/index.html
Axis2 官方的安装教学:
http://ws.apache.org/axis2/1_0/installationguide.html
Axis2 用户指南:
http://ws.apache.org/axis2/1_0/userguide.html
Axis2 WEB Administration 介面的使用教学:
http://ws.apache.org/axis2/1_0/webadminguide.html
Axis2 的设定文档:
http://ws.apache.org/axis2/1_0/axis2config.html
AXIOM (Axis Object Model) 教学:
http://ws.apache.org/axis2/1_0/OMTutorial.html
Axis2 Eclipse plugin 教学:
http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html