版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_30325009/article/details/82808204
spring整合axis2的文章的测试部分我们使用了命名空间和方法名访问服务的方法。这次我们使用axis2自动生成的代码访问服务。
生成代码
1.找到解压后的axis目录下的bin文件夹。shift+右键打开power shell,并输入start cmd 【回车】。
在这里我们输入:
wsdl2java -uri http://【ip】:【端口号】/【项目名】/services/【服务名】?/wsdl 【回车】
等待一下,就会发现我们的bin目录下多了一个文件夹。
将这个文件夹拷贝到一个客户端工程(一个java工程就可以了)中。
注意拷贝时,直接从src目录下拷贝。底下目录结构保持不变。
编写测试代码
以下是三种情况下的调用方式:
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<UserModel> getUsersInfo()
GetUsersInfo getUsersInfo = new GetUsersInfo();
GetUsersInfoResponse getUsersInfoResponse = stub.getUsersInfo(getUsersInfo);
//集合类型返回为数组
System.out.println(getUsersInfoResponse.get_return()[0].getUserName());
} catch (AxisFault e) {
e.printStackTrace();
}
}
}
运行测试类,输出结果如下:
有兴趣的话,比较一下我们书写的服务类与测试类,你会发现当服务类返回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 一下
- 使用方法对象设置方法参数
- 使用存根对象调用该方法,方法参数就是方法对象。获取方法响应对象。
- 使用方法响应对象,获取返回值。
参考
- spring整合axis2
https://blog.csdn.net/baidu_30325009/article/details/82790649 - 使用AXIS2作为Client访问WebService https://blog.csdn.net/kinglomei/article/details/38439025
- Axis2调用WebService服务的3种方式(rpc调用不好用)https://blog.csdn.net/menghuanzhiming/article/details/78489527(推荐)
p.s.: 如果我看到好的文章,会把它的地址放在这。