Axis2+Tomcat+MyEclipse部署和访问Web服务
一、环境准备
1.1软件下载准备
Axis Eclipse plug-in(代码生成工具和打包工具): Axis2_Codegen_Wizard_1.3.0
Axis2_Service_Archiver_1.3.0
Axis War包: axis2-1.4-war
Tomcat: apache-tomcat-5.5.27
MyEclipse: MyEclipse7.5
1.2安装
1) 安装MyEclipse7.5。
2) 将下载到的Axis 的两个plug-in(两个压缩包rar)解压缩到MyEclipse安装目录下的dropins子目录。
删除org.eclipse.update目录。
3)启动MyEclipse,并选择“File->New->Other”可以找到下面的这些Wizards
4)下面开始搭建Web Services的部署环境。将下载的tomcat报解压缩到一个目录。完成web container 的安装。
5)axis2-1.5-war.zip解压完后出现axis2.war,将axis2.war包拷贝到tomcat安装目录下的webapps目录中。
6)启动Tomcat,打开浏览器输入并访问:http://ip:8080/axis2来查看,如果能看到下面的页面则说明已经安装完成。
二、进入开发
2.1 建立要发布的WebService
1)在MyEclispse中添加一个用户库命名为axis2,将axis2/WEB-INF/lib下的包均添加进来,然后建立一个JavaProject命名为AccountService,将axis2用户库加入到build path中。
2)现在开始编写要发布的WebSevice,在src中建包account,建立AccountOper类如下:
2.2 发布WebService
1)打包要发布的Service,Eclipse中New --> File --> Other --> Axis2 wizards --> Axis2 Services Archiver,按照向导选择刚建立的类编译后的class文件和services.xml文件(选择自动生成)。
2)将sunny_service.aar拷贝到Tomcat/webapps/axis2/WEB-INF/services目录下,重新打开http://localhost:8080/axis2/services/listService就会发现AccountService已经发布成功,现在就可以应用这个Web服务了。
2.3 测试
1) 生成WSDL文件
Account.AccountOper的class文件的路径是D:/sunny—workspace/AccountService/bin
2)通过WSDL文件生成AccountServiceCallbackHandler.java和AccountServiceStub.java
参数不变
注意下输出的路径
3)在工程目录按F5刷新,就可以看到刚生成的文件,但提示都有错误,这是因为包名不一样。解决方法是将生成的两个文件直接移动到account包下
4)编写服务测试程序AccountTest.java如下:
package account;
public class AccountTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String endpoint = "http://localhost:8080/axis2/services/Sunny";
AccountOperStub stub = new AccountOperStub(endpoint);
AccountOperStub.SetAccountID set = new AccountOperStub.SetAccountID();
set.setId( 2 );
stub.setAccountID( set );
AccountOperStub.GetAccountResponse get = stub.getAccount();
System.out.println( "Current: " + get.get_return() );
AccountOperStub.Deposit dep = new AccountOperStub.Deposit();
dep.setMoney( 120 );
AccountOperStub.DepositResponse depRes = stub.deposit( dep );
System.out.println( "After Deposit 120: " + depRes.get_return());
AccountOperStub.Withdraw draw = new AccountOperStub.Withdraw();
draw.setMoney( 50 );
AccountOperStub.WithdrawResponse drawRes = stub.withdraw( draw );
System.out.println( "After Withdraw 50: " + drawRes.get_return());
AccountOperStub.GetAccountResponse getLast = stub.getAccount();
System.err.println( "At last: " + getLast.get_return() );
}
}
运行结果如下:
测试成功!但是不理想的是有两个警告。
三、在局域网其他客户机调用
以下介绍在局域网客户端调用上面发布的AccountService。为了不受杀毒软件及防火墙的影响,测试时我们把杀毒软件及防火墙关闭。
1)新建一个web project
2)New --> File --> Other --> Axis2 wizards --> Axis2 Code Generator,按下一步
注意路径是在web project的工程下src子目录中。
3)刷新一下项目,就可以看到刚生成的客户端文件了,SunnyStub.java和SunnyCallbackHandler.java,但都有错误,这是生成的包名的问题,改一下:把包名src.account改成account就行了。
4)写测试类
package account;
public class AccountTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String endpoint = "http://localhost:8080/axis2/services/Sunny";
SunnyStub stub = new SunnyStub(endpoint);
SunnyStub.SetAccountID set = new SunnyStub.SetAccountID();
set.setId( 2 );
stub.setAccountID( set );
SunnyStub.GetAccountResponse get = stub.getAccount();
System.out.println( "Current: " + get.get_return() );
SunnyStub.Deposit dep = new SunnyStub.Deposit();
dep.setMoney( 120 );
SunnyStub.DepositResponse depRes = stub.deposit( dep );
System.out.println( "After Deposit 120: " + depRes.get_return());
SunnyStub.Withdraw draw = new SunnyStub.Withdraw();
draw.setMoney( 50 );
SunnyStub.WithdrawResponse drawRes = stub.withdraw( draw );
System.out.println( "After Withdraw 50: " + drawRes.get_return());
SunnyStub.GetAccountResponse getLast = stub.getAccount();
System.err.println( "At last: " + getLast.get_return() );
}
}
运行结果:
和在本机测试一样,调用成功!(每次运行前要初始化的,重开Tomcat)