`
wanghuanqiu
  • 浏览: 110219 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

axis2和cxf复合类型参数传递(绝对权威)

阅读更多

首先服务端是由CXF发布的服务CXF服务版本为2.2,之前说过2.3JDK需要1.6的,本人用1.5版本。

本章只讲对象数组的传递和List类型的传递。

CXF客户端:

本人用的CXF版本为2.2和2.3均可以通过。

首先是客户端包装接口,只需要定义和服务接口一样即可,名称可以任意,但是包名必须相同。

如:客户端定义接口如下(跟服务端一样哦):

@WeService

public class IHelloWorld {

User[] getUsers(User[] user){

return user;

}

List<User> getListUser(List<User> user){

return user;

}

}

User.java我就不写了,很简单。

客户端调用:

JaxWsProxyFactoryBean factory1 = new JaxWsProxyFactoryBean();
  factory1.setServiceClass(IHelloWorld.class);
  factory1.setAddress("
http://127.0.0.1:8088/**/IHelloWorld");
  QName qName1 = new QName("
命名空间");//wsdl文件中targetNameSpace的值
  factory1.setServiceName(qName1);
  IHelloWorld service = (IHelloWorld) factory1.create();
List<User> list = new ArrayList<User>();
  User user = new User();
  user.setAge(25);
  user.setName("fei");
  User[] users = new User[]{user}; 

 list.add(user);

//直接可以调用了

System.out.println(service.getUsers(users));

System.out.println(service.getListUser(users));

OK CXF的调用就可以。如有问题可以联系我

AXIS2客户端:

axis2调用还是要注意一些问题的。我用的jdk是1.4的版本比较低,在实现的过程中让我很头疼,大家最好还是用1.5之上的吧。另外大家最好用axis2 1.4版本的,因为之前的版本与CXF服务端访问时,SOAP可能无法解析会出错。

因为axis无法直接传递list和对象数组参数,1.4是这样的高版本就不晓得了。所以必须封装一下我们建一个Users.java

public class Users{

private User[] user;

private List userList;

//get和set方法

}

User.java就不写了

客户端调用:写在MAIN方法里,如果做项目就写在action里

   RPCServiceClient serviceClient = new RPCServiceClient();
  Options options = serviceClient.getOptions();
  EndpointReference targetEPR = new EndpointReference("
http://localhost:8088/**/HelloWorld?wsdl");
  options.setTo(targetEPR);
  QName name2 = new QName("
targetNameSpace", "getUsers");
  QName name3 = new QName("
targetNameSpace"getListUser");
  Users users = new Users();
  User[] user2 = new User[2];
  List list = new ArrayList();
  for (int i = 0; i < 2; i++) {
   User user1 = new User();
   user1.setName("fei" + i);
   user1.setAge(24 + i);
   user2[i] = user1;
   list.add(user1);
  }
  users.setUsers(user2);
  users.setUserList(list);
  Object[] object1 = new Object[] { users };
  Class[] classes2 = new Class[] { Users.class };
  Class[] classes3 = new Class[] { List.class };
  Object[] object3 = serviceClient.invokeBlocking(name2, object1, classes2);
  System.out.println(object3.toString());
  Object[] object4 = serviceClient.invokeBlocking(name3, object1, classes3);
  List list1 = (List) object4[0];
  System.out.println(list1.size());
  OK ,Axis2的访问也很简单。有问题请留言。

 

分享到:
评论
6 楼 shyarhwang 2013-03-25  
请问一下user类有userid,username,userpass等字段,还有一个List<Role> roles的字段,现在通过getUser(User user)来获得一个完整的User,但是获得roles全是一些类似wsdl里面的内容,请问怎么解决
5 楼 wanghuanqiu 2012-06-07  
devilyard 写道
wanghuanqiu 写道
devilyard 写道
请问我用axis2传递xml到服务端时,为什么服务端总不拿到,总是null

你是如何访问的?

服务端是CXF发布的,客户端用axis2的RPCClient访问,传过去服务端就是拿不到参数

RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(
		"http://127.0.0.1:8080/xx/services/xxService?wsdl");
options.setTo(targetEPR);
		
String[] opAddEntryArgs = new String[] { "<request action=\"submit\"><person><personName>赵云</personName><sexCode>1</sexCode><idCard>440600196912113473</idCard></person></request>" };
Class[] classes = new Class[] { Object.class };
QName opAddEntry = new QName("http://server.xx.soft.com", "execute");
serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);


传过去的参数是new object[]{},不是String,返回类型应该是String不是object
4 楼 wanghuanqiu 2012-06-07  
devilyard 写道
wanghuanqiu 写道
devilyard 写道
请问我用axis2传递xml到服务端时,为什么服务端总不拿到,总是null

你是如何访问的?

服务端是CXF发布的,客户端用axis2的RPCClient访问,传过去服务端就是拿不到参数

RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(
		"http://127.0.0.1:8080/xx/services/xxService?wsdl");
options.setTo(targetEPR);
		
String[] opAddEntryArgs = new String[] { "<request action=\"submit\"><person><personName>赵云</personName><sexCode>1</sexCode><idCard>440600196912113473</idCard></person></request>" };
Class[] classes = new Class[] { Object.class };
QName opAddEntry = new QName("http://server.xx.soft.com", "execute");
serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);

你确定代码可以访问到服务端是吧
3 楼 devilyard 2012-06-07  
wanghuanqiu 写道
devilyard 写道
请问我用axis2传递xml到服务端时,为什么服务端总不拿到,总是null

你是如何访问的?

服务端是CXF发布的,客户端用axis2的RPCClient访问,传过去服务端就是拿不到参数

RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(
		"http://127.0.0.1:8080/xx/services/xxService?wsdl");
options.setTo(targetEPR);
		
String[] opAddEntryArgs = new String[] { "<request action=\"submit\"><person><personName>赵云</personName><sexCode>1</sexCode><idCard>440600196912113473</idCard></person></request>" };
Class[] classes = new Class[] { Object.class };
QName opAddEntry = new QName("http://server.xx.soft.com", "execute");
serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);
2 楼 wanghuanqiu 2012-05-30  
devilyard 写道
请问我用axis2传递xml到服务端时,为什么服务端总不拿到,总是null

你是如何访问的?
1 楼 devilyard 2012-05-30  
请问我用axis2传递xml到服务端时,为什么服务端总不拿到,总是null

相关推荐

    webservice axis2 cxf jar包及简单实例

    本文将深入探讨两种流行的Java Web服务框架——Axis2和CXF,并提供一个简单的实例来帮助理解它们的工作原理和使用方法。 首先,让我们了解一下`Axis2`。Axis2是Apache软件基金会开发的一个高性能、灵活且可扩展的...

    cxf与axis2区别

    CXF和Axis2是两个流行的Webservice框架,都是由现有的项目逐渐演化而来的。Axis2是由Axis1.x系列演化而来,而Apache CXF则是由Celtix和XFire项目整合而生。在本文中,我们将探讨CXF和Axis2框架的区别,以帮助开发者...

    Axis1,Axis2,Xfire,CXF区别

    Axis1, Axis2, Xfire, CXF 是四种常用的WebService框架,它们之间有着不同的特点和应用场景。本文将对这四种框架进行详细的比较和分析,以帮助开发者选择合适的框架。 XFire 是一种新一代的 WebService 平台,它...

    Axis2与CXF的对比

    Apache Axis2和CXF都是Java世界中非常知名的Web服务框架,它们主要用于构建和部署Web服务。两者各有特色,适用于不同的应用场景。以下是对这两个框架特点、区别及适用场合的详细对比,以及它们在效率上的表现。 1. ...

    Axis2,CXF版本学习笔记

    当我们谈论“Axis2,CXF版本学习笔记”时,这通常涉及到两个主要的Java Web服务框架:Apache Axis2和Apache CXF。这两个框架都用于构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)...

    搜集网上的资料总结的XFire,Axis2,CXF的对比

    本文主要对比了三种流行的Java Web服务框架:XFire、Axis2和CXF,以帮助开发者做出最佳选择。 首先,CXF是一个由Apache基金会维护的重量级SOA(面向服务架构)框架,它支持ESB(企业服务总线),并实现了Web服务、...

    cxf客户端调用axis服务端流程

    Axis1.x版本是较老的实现,而Axis2是其后续版本,提供了更好的性能和模块化设计。 ### 二、CXF客户端调用Axis服务端步骤 #### 1. 获取服务端WSDL 首先,你需要获取Axis服务端的WSDL(Web Service Definition ...

    axis2-1.8.0apache-cxf-3.4.4.rar

    标题中的"axis2-1.8.0apache-cxf-3.4.4.rar"是一个压缩包文件,其中包含了两个重要的开源项目:Apache Axis2版本1.8.0和Apache CXF版本3.4.4。这两个项目都是用于构建和部署Web服务的重要工具,主要应用于Java开发...

    myService_purpose1sv_cxf调用axis2的接口服务_接口服务_

    3. **调用服务方法**:通过生成的服务代理类实例,我们可以调用Axis2接口服务中的具体方法,传递参数并接收响应。 4. **处理结果**:收到服务响应后,根据业务需求进行数据解析和后续操作。 5. **异常处理**:添加...

    在axis1.4中传递复杂类型数组参数(ArrayMapping)

    在 Axis1.4 中传递复杂类型数组参数,涉及到的是 Web 服务中的数据绑定和消息处理。Axis 是一个开源的 SOAP 库,它允许开发者创建、部署和使用 Web 服务。在处理复杂类型数组时,ArrayMapping 是 Axis 中的一个关键...

    Axis和CXF的比较

    - **Axis2**:支持多种序列化机制,如XMLBeans、JiBX、JaxMe和JAXB等,但在与Spring框架的集成上不如CXF方便。 - **CXF**:与Spring框架有着很好的集成,能够很好地利用Spring的各种特性,如依赖注入、事务管理等...

    axis1.2、cxf框架

    在IT行业中,Axis1.2和CXF框架是两个重要的Web服务开发工具,它们主要用于构建和部署SOAP(简单对象访问协议)服务。这两个框架都基于Java语言,为开发者提供了便捷的方式来实现服务接口,并且支持WS-I(Web服务互...

    WebService Axis和XFire(CXF)的开发流程

    【WebService Axis和XFire(CXF)的开发流程】 在IT领域,WebService是一种基于XML的通信标准,用于构建分布式系统中的应用程序接口(API)。本篇主要介绍两种常用的WebService框架——Axis和XFire(现已被CXF合并)...

    关于WebService的实例及相关axis/apache-cxf的应用

    在本文中,我们将深入探讨WebService的原理以及如何利用Apache Axis和Apache CXF这两个流行的Java框架来实现和消费WebService。 首先,理解WebService的基础概念至关重要。WebService是一种通过互联网进行通信的...

    cxf+spring+axis包

    2. 创建Web服务:使用CXF的wsdl2java工具或者Axis的wsdl2java工具,从WSDL文件生成Java服务接口和服务实现。 3. 配置服务发布:在Spring配置文件中,通过CXF或Axis的配置元素,设置服务的地址和绑定信息。 4. 客户端...

    axis cxf 创建webservice

    本文介绍了如何使用Eclipse、Axis2以及Spring和CXF来创建和调用WebService。通过实际操作步骤,读者可以了解到构建WebService的基本流程和技术要点。无论是对于初学者还是有一定经验的开发者来说,都能够从中获得...

    webservice :spring 3+cxf3.4服务方,AXIS1.4请示方调用

    ### WebService技术应用:Spring 3 + CXF 3.4与Axis 1.4的交互 在现代软件开发中,Web服务作为一种重要的技术手段,被广泛应用于不同系统之间的通信。其中,Spring框架与Apache CXF是实现RESTful或SOAP风格的Web...

    axis和axis2的一些发布差异(WSDL2Java) 收藏

    通过对Axis与Axis2在使用WSDL2Java工具时的不同之处的详细探讨,我们可以看到,虽然两种工具都实现了相似的功能,但Axis2在很多方面都进行了优化和改进,尤其是在命令行参数、部署描述文件生成以及数据绑定等方面。...

    axis1.4和axis2相关jar文件

    4. **配置文件**:如axis2.xml,这是Axis2的全局配置文件,定义了服务的默认行为和运行时参数。 5. **工具和脚本**:可能包括用于生成服务或客户端代码的工具,如wsdl2java等。 了解并熟练使用Axis1.4和Axis2的相关...

Global site tag (gtag.js) - Google Analytics