编辑一个返回User对象、List<User>Map<String, User>User[]的形式,并且用axis2的工具完成发布WebService

  下面看看服务器端WebService代码:

package com.hoo.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import com.hoo.entity.User;

/**
* <b>function:</b>传递User对象类型的List、Map、User、Array等数据方法的WebService
*
@author hoojo
* @createDate 2011-1-13 下午03:50:06
* @file ManagerUserService.java
* @package com.hoo.service
* @project Axis2WebService
* @blog
http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
*
@version 1.0
*/
public class ManagerUserService {

/**
* <b>function:</b>传递User对象,返回User对象
*
@author hoojo
* @createDate 2011-1-13 下午03:54:36
*
@param user
*
@return User
*/
public User editUser(User user) {
user.setId(new Random().nextInt(100));
return user;
}

/**
* <b>function:</b>返回List&lt;User&gt;的数据类型
*
@author hoojo
* @createDate 2011-1-13 下午03:57:19
*
@param j
*
@return List&lt;User&gt;
*/
public List<User> getUsers(int j) {
List<User> users = new ArrayList<User>();
for (int i = 0; i < j; i++) {
User user = new User();
user.setAddress("china");
user.setEmail("hoojo_@126.com");
user.setName("hoojo");
user.setId(22 + i);
users.add(user);
}
return users;
}

/**
* <b>function:</b>返回Map&lt;String, User&gt;类型的数据
*
@author hoojo
* @createDate 2011-1-13 下午04:03:41
*
@param j
*
@return Map&lt;String, User&gt;
*/
public Map<String, User> getUser4Map(int j) {
Map<String, User> users = new HashMap<String, User>();
for (int i = 0; i < j; i++) {
User user = new User();
user.setAddress("china");
user.setEmail("amy@223.com");
user.setName("amy");
user.setId(22 + i);
users.put("user#"+ i, user);
}
return users;
}

/**
* <b>function:</b>返回User的数组数据
*
@author hoojo
* @createDate 2011-1-13 下午04:05:23
*
@param j
*
@return User[]
*/
public User[] getUser4Array(int j) {
User[] users = new User[j];
for (int i = 0; i < j; i++) {
User user = new User();
user.setAddress("china");
user.setEmail("tom@223.com");
user.setName("tom");
user.setId(22 + i);
users[i] = user;
}
return users;
}
}




 A、下面用axis2的工具生成aar文件,然后完成发布WebService

 

1、  点击工作空间WorkSpace,右键New选择Other


 

2、  选择Axis2 Service Archiver,点击Next 


 

3  然后点击Browser选择你当前的工程的classes目录

点击Next

4、  没有WSDL,选择第一项,点击Next,然后再Next一次

5、  不用设置service.xml,直接Next

6、  最关键一步,填写WebService的Name,设置class路径点击Load你就可以看到当前class的方法

勾中的方法表示将会被暴露到客户端可以调用的方法,然后点击Next

7、  设置aar文件的名称和保持的目录

点击Finish你可以看到提示successfully的提示。

8、  刷新当前工程可以看到ManangerUserService.aar文件了

9、  下面我们在浏览器中访问这个地址:http://localhost:8080/axis2/

点击Admin这个链接,可以看到要输入用户名和密码,用户名和密码在

Tomcat_Home\webapps\axis2\WEB-INF\conf下的axis2.xml中可以找到

<parameter name="userName">admin</parameter>

<parameter name="password">axis2</parameter>

10、  输入密码进入管理页面后可以看到

下面介绍下上面常用的功能

Upload Service当然是上传aar的文件,完成发布WebService的工具了

Available Service是查看当前发布的Service详细信息

Available Service Groups是Service组

Global Chains是可以用的全局的Chain

Operation Specific Chains是某个具体操作的chain

Deactivate Service 是取消某个Service

Activate Service 是将取消发布的Service再发布出去

Edit Parameters是修改WebService类的参数

11、  我们这里用Upload Service这个工具,然后选择我们刚才用axis2的工具生成aar文件。

其实这一步我们可以直接将ManagerUserService.aar文件copy到

tomcat-home\webapps\axis2\WEB-INF\services这个目录下。

12、  然后点击Available Service就可以看到ManagerUserService这个Service了

B、现在我们要用axis2的工具生成wsdl文件

  1、点击WorkSpace,右键New选择Other。然后选择客户端代码生成工具

 2、点击Next,你可以看到让你选择wsdl。选择第一个,然后点击Next

    上面是根据Java class代码生成wsdl文件

    3、填写你的WebService的classpath,然后选择你当前class所在工程的class目录

然后点击Add Folder选择你的工程的classes 或 bin目录,也就是你填写的class所在的目录,然后点击Test 测试是否正确。

点击Next继续下一步

4、可以看到即将发布的WebService名称和命名空间

5、继续Next,选择wsdl文件保存目录

这样services.wsdl文件就生成了。

    C、用axis2的工具生成客户端调用的代码

    1、右键workspace,点击New选择Other,然后选择aixs2的生成代码工具

    2、选择第一项,根据wsdl文件生成Java代码,然后Next

3、然后选择刚才上面生成好的wsdl文件

如果你有向tomcat中发布过你的WebService,那么你可以通过WebBrowser访问

http://localhost:8080/axis2/

点击Services链接,就可以看到你的WebService。点击你的WebService

这样你也可以看到wsdl内容

这样你也可以在上面的WSDL file location中填写:

http://localhost:8080/axis2/services/ManagerUser?wsdl

这个地址也是可以的

4、点击Next,就可以看到你要生成指定方法的代码的选项了

注意的是在选择PortName的时候,不同的选项将会生产不同的调用代码。其调用方式也略有不同。但你可以看生成的源代码进行详细的了解。

5、点击Next,选择代码输出保存的目录,然后点击Finish

刷新目录后发现多了2个文件

D、 编写客户端代码

package com.hoo.service;

import java.rmi.RemoteException;
import com.hoo.service.ManagerUserStub.EditUserResponse;

/**
* <b>function:</b>ManagerUserService客户端调用代码
*
@author hoojo
* @createDate 2011-1-14 下午03:17:31
* @file ManagerUserServiceClient.java
* @package com.hoo.service
* @project Axis2WebService
* @blog
http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
*
@version 1.0
*/
public class ManagerUserServiceClient {

public static void main(String[] args) throws RemoteException {
String target = "http://localhost:8080/axis2/services/ManagerUser";
ManagerUserStub stub = new ManagerUserStub(target);

/**
* 调用User Bean模式:
* EditUser、User是内部静态类,axis2会帮我们进行参数封装
*/
ManagerUserStub.EditUser editUser = new ManagerUserStub.EditUser();
ManagerUserStub.User u = new ManagerUserStub.User();
u.setAddress("china");
u.setEmail("axis2@axis2.com");
u.setName("axis2");
u.setId(222);
editUser.setUser(u);
//返回值也被封装
EditUserResponse eur = stub.editUser(editUser);
ManagerUserStub.User returnUser = eur.get_return();
//returnUser.getId()在服务器端动态重置过
System.out.println(returnUser.getId() + "#" + returnUser.getName() + "#" + returnUser.getEmail() + "#" + returnUser.getAddress());

/**
* User数组模式
*/
ManagerUserStub.GetUser4Array userArray = new ManagerUserStub.GetUser4Array();
userArray.setJ(3);
ManagerUserStub.GetUser4ArrayResponse userArrResponse = stub.getUser4Array(userArray);
ManagerUserStub.User[] userArr = userArrResponse.get_return();
for (ManagerUserStub.User user : userArr) {
System.out.println(user.getId() + "#" + user.getName() + "#" + user.getEmail() + "#" + user.getAddress());
}




posted on 2012-03-31 14:08  ywChen  阅读(1295)  评论(0编辑  收藏  举报