浏览 3315 次
锁定老帖子 主题:axis调用CFX框架服务端
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-12-26
/** * 连接 webservice 服务器,调用指定方法。 * * @param namespace * @param endpoint * @param function * 接口方法名称 * @return boolean 是否连接成功 */ private boolean connect(String namespace, String endpoint, String function, List<String> paramNames) { try { // 连接WS服务器 call = (Call) service.createCall(); // 设置调用方法 call.setOperationName(new QName(namespace, function)); /**************************调用CFX框架时,这些代码是必须的****************************************/ for (String param : paramNames) { call.addParameter(param, org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 操作的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型 } call.setUseSOAPAction(true); /**************************调用CFX框架时,这些代码是必须的****************************************/ // call.setOperationName(function); // 设置服务器地址 call.setTargetEndpointAddress(endpoint); } catch (ServiceException ex) { LOG.error("连接服务器(" + endpoint + ")失败", ex); return false; } return true; } .... //连接服务端 this.connect(Config.server_namespace, Config.server_endpoint, Commons.SERVICE_FUNC_NAME_GET, Arrays .asList(new String[] { "arg0" }));//若对端服务端代码没有声明参数的名称,则默认名称是arg0,arg1... 注意上面的"调用CFX框架时,这些代码是必须的"代码块,因为同是Axis框架的客户端和服务端在通信时,很多默认的设置是相同的,所以无需对Call对象做多余的设置,而在调用.NET或CFX等框架时,就需要根据服务端框架的设置做相应的设置。 其实,既然SOAP协议是与技术框架无关的,那么可以直接通过wsdl就可以知道接口方法的参数返回值等等信息,然后定制相应的客户端。但是我的水平还有限,对SOAP的理解还不够深刻,希望有这方面经验的朋友指点一二。 如果上面的阐述不够清楚可以参考另一篇博文:http://t22011787.iteye.com/blog/1144662 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-12-31
这两天也在用axis 代码call CXF 发布的service, 你例子,方法参数和返回值都是string(简单类型),我遇到的问题是我方法的参数是一个java类.e.g
class Person{ private Address[] addresses; private String name; } 当我call方法 savePersion(Persion person), 发现我传给server端的persion对象不为空,但person的fields全为空,addresses == null, name == null too! Can you tell me why? 有遇到此种问题的达人请帮忙,如果没人帮,我就只能不用CXF框架发布service,而是用spring 把后台发布出一个rmi接口来了 |
|
返回顶楼 | |