CXF、Axis2 怎么实现相互调用???
关于webservice的软件有很多,这里只讨论cxf、Axis2这两种。(鄙人有个疑惑,求证实:由于cxf对spring框架支持的很好,而且操作起来也最简单,所以搞java的同学都选择cxf;但是,用.Net的同学貌似偏向于Axis2。是这样么??)
进入正题。。。分别用cxf、Axis2创建服务端、客户端,正常调用我都实现了。那比如:用cxf创建好一个webservice服务端,是否可以用Axis2写一个客户端调用?反之,是否也可以呢?
cxf客户端生成的是接口interface,直接调用里面的方法就ok了;但是Axis2客户端生成的是什么Stub的类,根本不是接口,代码也比较繁琐,毫无头绪。。。。怎么实现两者互调呢,真是气人哪,还是我想多了,根本不能混为一谈,求教育!!!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
用AXIS2创建服务端,CXF直接用WSDL2JAVA命令从WSDL生成客户端代码。要注意一点,endpointadress可能需要手工指定,否则会找不到。介个我也不知道为什么。
这个是axis2调用axis2吧,两者发送的报文是不一样的,我也在纠结着怎么用axis2调用cxf
请问能不能不使用那个targetNamespace ,之前别人用的axis客户端调用没有用这个命名空间,服务端也是axis。现在是别人的axis客户端调用我的cxf服务端,我就必须要加上这个axis。因为axis调用的时候是不需要知道接口的,所以就不存在网上别人说的将服务端与客户端调用的接口报名要一样的问题了(这应该是同一种服务产品实现的才会有这样的问题吧。)
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服务端的代码。
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服务端的代码。
wsdl文件是webservice的标准,你先生成wsdl文件,再用不同的webservice框架去根据wsdl生成相应的客户端和服务端代码。