CXF、Axis2 怎么实现相互调用???

追风少年8090 发布于 2013/01/09 23:02
阅读 9K+
收藏 2

关于webservice的软件有很多,这里只讨论cxf、Axis2这两种。(鄙人有个疑惑,求证实:由于cxf对spring框架支持的很好,而且操作起来也最简单,所以搞java的同学都选择cxf;但是,用.Net的同学貌似偏向于Axis2。是这样么??)

进入正题。。。分别用cxf、Axis2创建服务端、客户端,正常调用我都实现了。那比如:用cxf创建好一个webservice服务端,是否可以用Axis2写一个客户端调用?反之,是否也可以呢?

cxf客户端生成的是接口interface,直接调用里面的方法就ok了;但是Axis2客户端生成的是什么Stub的类,根本不是接口,代码也比较繁琐,毫无头绪。。。。怎么实现两者互调呢,真是气人哪,还是我想多了,根本不能混为一谈,求教育!!!!!

加载中
0
冷血
冷血
wsdl文件是webservice的标准,你先生成wsdl文件,再用不同的webservice框架去根据wsdl生成相应的客户端和服务端代码。
0
小翔
小翔
Axis2 的请求输入输出参数不知道怎么改,感觉和cxf调要坑爹
0
菊花小小
菊花小小

axis调调客户端一般是动态调用,也就是说不用根据服务端去生成客户端代码,有时候开发起来还是比较方便的:

  try {
   RPCServiceClient client = new RPCServiceClient();
   Options options = client.getOptions();  
   String address = "http://127.0.0.1:8888/epms/services/gx4aUserAddOrgServices?wsdl";
   EndpointReference epf = new EndpointReference(address); 
   options.setTo(epf);
   QName qname = new QName("http://wc.boco.com", "addOrgInfo");
   String par = "<orgs><org><orgId>0001</orgId><name>测试1</name><parentOrgId></parentOrgId><initials>测试1</initials></org></orgs>";
   Object[] result = client.invokeBlocking(qname, new Object[] { par }, new Class[] { String.class });
   System.out.println(result[0]);
  } catch (AxisFault e) {
   e.printStackTrace();
  }

这段就是掉axis调cxf服务端的代码。

 

0
五亩良田
五亩良田

引用来自“伍佳灵”的答案

axis调调客户端一般是动态调用,也就是说不用根据服务端去生成客户端代码,有时候开发起来还是比较方便的:

  try {
   RPCServiceClient client = new RPCServiceClient();
   Options options = client.getOptions();  
   String address = "http://127.0.0.1:8888/epms/services/gx4aUserAddOrgServices?wsdl";
   EndpointReference epf = new EndpointReference(address); 
   options.setTo(epf);
   QName qname = new QName("http://wc.boco.com", "addOrgInfo");
   String par = "<orgs><org><orgId>0001</orgId><name>测试1</name><parentOrgId></parentOrgId><initials>测试1</initials></org></orgs>";
   Object[] result = client.invokeBlocking(qname, new Object[] { par }, new Class[] { String.class });
   System.out.println(result[0]);
  } catch (AxisFault e) {
   e.printStackTrace();
  }

这段就是掉axis调cxf服务端的代码。

 

我按你这种方式实现之后,运行总是报这个错误的: org.apache.axis2.AxisFault: Transport out has not been set,不知道是怎么回事的
盲人摸象
盲人摸象
请问能不能不使用那个targetNamespace ,之前别人用的axis客户端调用没有用这个命名空间,服务端也是axis。现在是别人的axis客户端调用我的cxf服务端,我就必须要加上这个axis。因为axis调用的时候是不需要知道接口的,所以就不存在网上别人说的将服务端与客户端调用的接口报名要一样的问题了(这应该是同一种服务产品实现的才会有这样的问题吧。)
木鱼神佑
木鱼神佑
这个是axis2调用axis2吧,两者发送的报文是不一样的,我也在纠结着怎么用axis2调用cxf
0
魏曼奇
魏曼奇
用AXIS2创建服务端,CXF直接用WSDL2JAVA命令从WSDL生成客户端代码。要注意一点,endpointadress可能需要手工指定,否则会找不到。介个我也不知道为什么。
返回顶部
顶部