微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

webservice 学习笔记,axis2传递简单对象,非stub方式

首先在MyEclipse中创建一个web project,创建方式可以参见我博客中的《webservice 笔记(小结) axis2 集成spring <一>发布服务》一文, @H_502_5@project取名 Ws2Pojo

 

服务器端 @H_502_5@  1、创建pojo类:

 

package sample.ws.pojo;

public class Person {

 private String name;@H_502_5@ @H_502_5@ private String age;

 public String getName() {@H_502_5@  return name;@H_502_5@ }

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

 public String getAge() {@H_502_5@  return age;@H_502_5@ }

 public void setAge(String age) {@H_502_5@  this.age = age;@H_502_5@ }@H_502_5@ @H_502_5@}

 

-------------------------------------------------------------------------

  TsetService.jave: @H_502_5@package sample.ws.service;

import sample.ws.pojo.Person;

public class ServiceTest {@H_502_5@/**@H_502_5@ * 很简单我们只是将发过来的person返回去@H_502_5@ * @param person@H_502_5@ * @return@H_502_5@ */@H_502_5@ public Person getPerson(Person person){@H_502_5@  @H_502_5@  return person;@H_502_5@ }@H_502_5@     @H_502_5@    @H_502_5@}

 

--------------------------------------------------

services.xml 文件内容

 

<?xml version="1.0" encoding="UTF-8"?>

@H_502_5@<service name="TestService" scope="application">@H_502_5@  <description>TestService</description>

  <messageReceivers>   @H_502_5@     <messageReceiver    @H_502_5@            mep="http://www.w3.org/2004/08/wsdl/in-only"  @H_502_5@    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>   @H_502_5@        <messageReceiver   @H_502_5@            mep="http://www.w3.org/2004/08/wsdl/in-out"  @H_502_5@    class="org.apache.axis2.rpc.receivers.RPcmessageReceiver"/>   @H_502_5@    </messageReceivers>  @H_502_5@    <parameter name="ServiceClass">@H_502_5@    sample.ws.service.ServiceTest@H_502_5@    </parameter>@H_502_5@ @H_502_5@</service>

 

 

将项目部署到tomcat上,这样服务器端就发布成功了。 @H_502_5@现在是客户端,我们采用rpc的方式调用 @H_502_5@@H_502_5@1、首先建立pojo类Person(注意包名要和服务器端的person的包名相同) @H_502_5@   Person.java @H_502_5@package sample.ws.pojo;

public class Person {

private String name;@H_502_5@ @H_502_5@ private String age;

 public String getName() {@H_502_5@  return name;@H_502_5@ }

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

 public String getAge() {@H_502_5@  return age;@H_502_5@ }

 public void setAge(String age) {@H_502_5@  this.age = age;@H_502_5@ }@H_502_5@ @H_502_5@}

 

2、创建客户调用类:

 

   package sample.ws.client;

 

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;@H_502_5@import org.apache.axis2.client.Options;@H_502_5@import org.apache.axis2.rpc.client.RPCServiceClient;

import sample.ws.pojo.Person;

public class Ws2pojoClient {

 public static void main(String args[]) throws java.lang.Exception{@H_502_5@ @H_502_5@ RPCServiceClient client = new RPCServiceClient();@H_502_5@ @H_502_5@ Options option = client.getoptions();@H_502_5@// 指定客户端访问的webservice服务器端地址@H_502_5@ EndpointReference erf = new EndpointReference("http://localhost:8080/Ws2Pojo/services/TestService");@H_502_5@ @H_502_5@ option.setTo(erf);@H_502_5@// 指定命名空间,指定要调用方法@H_502_5@ QName name = new QName("http://service.ws.sample","getPerson");@H_502_5@// 创建Person对象@H_502_5@ Person person = new Person();@H_502_5@ person.setAge("20");@H_502_5@ person.setName("张三");@H_502_5@ @H_502_5@// 创建要传送的object数组@H_502_5@ Object[] object = new Object[]{person};@H_502_5@// 创建返回的参数类型@H_502_5@ Class[] returnTypes = new Class[]{Person.class};@H_502_5@// 调用远程服务,得到返回的object数组@H_502_5@ Object[] response = client.invokeBlocking(name,object,returnTypes);@H_502_5@// 强制转换成Person对象@H_502_5@ Person p = (Person)response[0];@H_502_5@ @H_502_5@ System.out.println(p.getAge());@H_502_5@ System.out.println(p.getName());@H_502_5@ @H_502_5@ }@H_502_5@}

 

 

得到输出20            张三     说明调用成功,一开始的时候总是出错,原因是客户端的Person的命名空间,和服务器端的不同,总是说Person找不到。要特别注意命名空间(TCPMonitor是个不错的工具) 下一篇:axis2 传递对象数组

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐