axis2访问webservice方法(补充)

spring整合axis2的文章的测试部分我们使用了命名空间和方法名访问服务的方法。这次我们使用axis2自动生成的代码访问服务。


生成代码

1.找到解压后的axis目录下的bin文件夹。shift+右键打开power shell,并输入start cmd 【回车】。
在这里我们输入:
wsdl2java -uri http://【ip】:【端口号】/【项目名】/services/【服务名】?/wsdl 【回车】
等待一下,就会发现我们的bin目录下多了一个文件夹。
将这个文件夹拷贝到一个客户端工程(一个java工程就可以了)中。
注意拷贝时,直接从src目录下拷贝。底下目录结构保持不变。
axis2访问webservice方法(补充)_第1张图片


编写测试代码

以下是三种情况下的调用方式:

package com.axis2.publish;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.transform.sax.SAXResult;

import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.OperationClient;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.async.AxisCallback;
import org.apache.axis2.rpc.client.RPCServiceClient;

import com.axis2.publish.TestserviceStub.GetUserInfo;
import com.axis2.publish.TestserviceStub.GetUserInfoResponse;
import com.axis2.publish.TestserviceStub.GetUsersInfo;
import com.axis2.publish.TestserviceStub.GetUsersInfoResponse;
import com.axis2.publish.TestserviceStub.Test;
import com.axis2.publish.TestserviceStub.TestResponse;

public class TestUwca {
	public static void main(String[] args) throws RemoteException {
			System.out.println("====== 使用生成的类 =========");
			TestserviceStub stub = new TestserviceStub();
			//访问UserModel getUserInfo()
			//生成方法对象
			GetUserInfo getUserInfo0 = new GetUserInfo();			
			//生成方法返回对象
			GetUserInfoResponse userInfoResponse = stub.getUserInfo(getUserInfo0);
			//通过方法返回对象获取结果
			System.out.println(userInfoResponse.get_return().getAge());
		 
			//访问String test(String test)
			Test test = new Test();
			//设置传递参数
			test.setTest("zhangxu");
			TestResponse testResponse = stub.test(test);
			System.out.println(testResponse.get_return());
			
			//访问List getUsersInfo()
			GetUsersInfo getUsersInfo = new GetUsersInfo();
			GetUsersInfoResponse getUsersInfoResponse = stub.getUsersInfo(getUsersInfo);
			//集合类型返回为数组
			System.out.println(getUsersInfoResponse.get_return()[0].getUserName());
		} catch (AxisFault e) {
			e.printStackTrace();
		}
	}
}

运行测试类,输出结果如下:
axis2访问webservice方法(补充)_第2张图片
有兴趣的话,比较一下我们书写的服务类与测试类,你会发现当服务类返回List类型时,而测试类得到的是数组。
下面是发布的服务中的方法:

package com.axis2.publish;

import java.util.ArrayList;
import java.util.List;

import com.axis2.publish.model.UserModel;

public class Testservice {
	public String test(String test) {
		return "测试: "+test;
	}
	
	public List<UserModel> getUsersInfo(){
		UserModel user1 = new UserModel("zhangxu", "man", 22);
		UserModel user2 = new UserModel("sunhongluan", "woman", 22);
		List<UserModel> users = new ArrayList<>();
		users.add(user1);
		users.add(user2);
		return users;
	}
	
	public UserModel getUserInfo() {
		return new UserModel("zhangsan", "transgender", 34);
	}
	
	
}

总结

使用生成的代码访问webservice有三步:

  • 创建存根(【服务名】stub)对象
  • 生成方法对象,就是new 一下
  • 使用方法对象设置方法参数
  • 使用存根对象调用该方法,方法参数就是方法对象。获取方法响应对象。
  • 使用方法响应对象,获取返回值。

参考

  1. spring整合axis2
    https://blog.csdn.net/baidu_30325009/article/details/82790649
  2. 使用AXIS2作为Client访问WebService https://blog.csdn.net/kinglomei/article/details/38439025
  3. Axis2调用WebService服务的3种方式(rpc调用不好用)https://blog.csdn.net/menghuanzhiming/article/details/78489527(推荐)
    p.s.: 如果我看到好的文章,会把它的地址放在这。

你可能感兴趣的:(WebService,axis2)