读书人

应用JAVA调用.net WebService的终极解

发布时间: 2012-07-04 19:33:55 作者: rapoo

使用JAVA调用.net WebService的终极解决方案

发现自己总是闭门造车,总是疏于整理与总结。下决心改变自己,从每件小事做起吧。共勉

?

最近做WebServices 比较多,和各种企业联调弄得楼主焦头烂额。其中,最郁闷的,还是与.net平台的对接。

?

楼主本地系统是Axis2 ,分别与Axis,Axis2与.net的接口来对接。

?

刚一开始采用的方案是基于采用本地发布的wsdl作为标准,使用Axis2工具生成Stub客户端来调用各企业接口。楼主一开始想当然的认为既然是发布的服务,应该遵守SOA的规范,那么通过生成的客户端,理应可以各种接口各种调。结果,残酷的事实证明,这样是行不通的。在采取客户端,调用Axis的服务时,发现了很尴尬的问题。使用本地的Stub,调用失败。

本地生成jibx Stub客户端方法如下:

?

/** * 根据传入的参数返回拼装好的 OMElement * @param omMap * @param nameSpace * @param action * @return */public OMElement getOmElement(Map<String, String> omMap, String action) {SOAPFactory factory = OMAbstractFactory.getSOAP12Factory();OMElement child;OMElement wrapper = factory.createOMElement(action, namespace, "");Set<String> lableSet = omMap.keySet();Iterator<String> it = lableSet.iterator();while(it.hasNext()){String lable = it.next();child = factory.createOMElement(lable, namespace, "");child.setText(omMap.get(lable));wrapper.addChild(child);}return wrapper;}public String invoke(String action,OMElement wrapper) throws AxisFault {RPCServiceClient rpcClient = new RPCServiceClient();Options options = rpcClient.getOptions();EndpointReference targetEPR = new EndpointReference(endpoint);options.setTo(targetEPR);options.setAction(namespace + "/" + action);// 解决.net 调用java 调用不通时使用// options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,Boolean.FALSE);OMElement response = rpcClient.sendReceive(wrapper);Object[] objects = BeanUtil.deserialize(response, new Class[] { String.class }, new DefaultObjectSupplier());return objects[0].toString();}

?

其中,deserialize?是对response返回的消息进行反序列化,可以形成我们原来的返回消息格式

?

?经过三番五次的测试,.net和java纷纷落马~O~Ye~

?

楼主经验尚浅,说的肯定有很多不对或者不准确或者瞎掰的地方。只求将解决方案与大家共勉,希望大家不要吝啬,多提宝贵意见及问题。

读书人网 >Web前端

热点推荐