axis2发布webservice和客户端调用的例子,完全可以跑的通

l  配置axis2的环境,这里使用的版本是axis2-1.5.6,不过还要下载axis2-1.5.6-war

这两个东西,自己到apache的官网上去下载

配置axis2的环境变量

l  看一下axis2是否安装配置成功 ,测试一下wsdl的命令是否可用

看到下面的界面说明安装成功

l  解压axis2-1.5.6-war

把axis2.war,注意是axis2.war,而不是axis2-1.5.6-war ,放到tomcat的webapps下面,

启动tomcat,访问http://localhost:8080/axis2/看一下效果,看到下面的页面说明成功了

新建webproject :webServiceServerDemo,作为webservice的server端

为webServiceServerDemo添加axis2的支持,这里使用的是axis2-1.5.6,

把 axis2-1.5.6-bin\axis2-1.5.6\lib下的jar包拷贝到webServiceServerDemo的lib目录下

下面编写测试程序,这里直接借用的是hoojo的部分代码

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 data.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;
    }
}
View Code
package data;

import java.io.Serializable;

/**
 * <b>function:</b>User Entity
 * @author hoojo
 * @createDate Dec 16, 2010 10:20:02 PM
 * @file User.java
 * @package com.hoo.entity
 * @project AxisWebService
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email hoojo_@126.com
 * @version 1.0
 */
public class User implements Serializable {
    private static final long serialVersionUID = 677484458789332877L;
    private int id;
    private String name;
    private String email;
    private String address;
    
    @Override
    public String toString() {
        return this.id + "#" + this.name + "#" + this.email + "#" + this.address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    
    
}
View Code

项目结构:

由于使用axis2的插件打包生成arr文件时,老是报错,所以选择了手动打包发布webservice

  1. 在webServiceServerDemo项目的src下 创建folder 名字叫  deploy
  2. 把webServiceServerDemo\WebRoot\WEB-INF\classes下面要发布的

ManagerUserService相关的.class文件,包括包名拷贝到刚刚创建的deploy中

  1. 在deploy下面创建文件夹folder,名字叫META-INF
  2. 在META-INF下面创建services.xml文件

文件内容是:

<service name="ManagerUserService">

<description>ManagerUserService</description>

<parameter name="ServiceClass">com.hoo.service.ManagerUserService</parameter>

<messageReceivers>

<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>

<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>

</messageReceivers>

</service>

 

此时的项目结构如下图  注意deploy文件夹的结构一定要弄对了,否则不会成功的

在这里deploy下面的class文件是看不到的,可以在deploy文件夹右击

看到class文件,实际上是有的

执行命令生成aar文件,

进入到工作空间中webServiceServerDemo项目中deploy的文件下

执行命令jar cvf ManagerUserService.aar . (注意带.号)

会发现在deploy的文件下面生成了aar文件

查看一下ManagerUserService.aar的组织结构是否正确

没有问题的,注意services.xml是万万不能少的,并且要在META-INF目录下

把生成的ManagerUserService.aar放到tomcat中webapps\axis2\WEB-INF\services下面即可

启动tomcat看一下效果

可以看到刚刚发布的webservice

再新建一个web工程,名字叫callWebserviceDemo,用来测试生成webservice的客户端和调用

该工程也要添加axis2的支持,拷贝jar包,这里不再啰嗦

在cmd中进入到callWebserviceDemo的工作空间中

执行命令

 wsdl2java -uri http://localhost:8080/axis2/services/ManagerUserService?wsdl

查看现在的工程组织结构,生成了下面的东西

在编写调用刚刚生成的客户端的程序

ManagerUserServiceStub.java和ManagerUserServiceCallbackHandler.java

package test;


import java.rmi.RemoteException;

import com.hoo.service.ManagerUserServiceStub;
import com.hoo.service.ManagerUserServiceStub.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/ManagerUserService";
        ManagerUserServiceStub stub = new ManagerUserServiceStub(target);
        
        /**
         * 调用User Bean模式:
         * EditUser、User是内部静态类,axis2会帮我们进行参数封装
         */
        //editUser是方法名
        ManagerUserServiceStub.EditUser editUser = new ManagerUserServiceStub.EditUser();
        // 创建editUser方法的参数,User.java类型的参数
        ManagerUserServiceStub.User u = new ManagerUserServiceStub.User();
        u.setAddress("china");
        u.setEmail("axis2@axis2.com");
        u.setName("axis2");
        u.setId(222);
        //为editUser方法设置参数值
        editUser.setUser(u);
        //返回值也被封装
        //可以认为是调用方法
        EditUserResponse eur = stub.editUser(editUser);
        //获得方法的返回值,这里返回的是User.java类型的对象
        ManagerUserServiceStub.User returnUser = eur.get_return();
        //returnUser.getId()在服务器端动态重置过
        System.out.println(returnUser.getId() + "#" + returnUser.getName() + "#" + returnUser.getEmail() + "#" + returnUser.getAddress());
        
        /**
         * User数组模式
         */
        ManagerUserServiceStub.GetUser4Array userArray = new ManagerUserServiceStub.GetUser4Array();
        userArray.setJ(3);
        ManagerUserServiceStub.GetUser4ArrayResponse userArrResponse = stub.getUser4Array(userArray);
        ManagerUserServiceStub.User[] userArr = userArrResponse.get_return();
        for (ManagerUserServiceStub.User user : userArr) {
            System.out.println(user.getId() + "#" + user.getName() + "#" + user.getEmail() + "#" + user.getAddress());
        }
        
        
        /**
         * Map User模式,不支持Map、List
         */
        /*ManagerUserServiceStub.GetUser4Map userMap = new ManagerUserServiceStub.GetUser4Map();
        userMap.setJ(3);
        ManagerUserServiceStub.GetUser4MapResponse userMapResponse = stub.getUser4Map(userMap);
        ManagerUserServiceStub.Map map = userMapResponse.get_return();
        System.out.println(map);*/
        
        /**
         * GetUsers是ManagerUserServiceStub的内部类,axis2的代码生成工具会帮我们把参数更具wsdl文件的内容进行封装
         */
        /*ManagerUserServiceStub.GetUsers getUsers = new ManagerUserServiceStub.GetUsers(); 
        getUsers.setJ(3);//服务器的参数int j
        ManagerUserServiceStub.GetUsersResponse usersResponse = stub.getUsers(getUsers);
        System.out.println(usersResponse.get_return());*/
    }
}
View Code

测试结果如下

posted @ 2013-06-12 17:47  wanggd_blog  阅读(1101)  评论(0)    收藏  举报