zoukankan      html  css  js  c++  java
  • JAVA调用.NET WebService终极方案(包含对SoapHeader的处理)

    一、前言:
         今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.net开发的,利用两天时间彻底搞定了用java来调用.net 的web service,包括对soap header的处理。
    二、解决方案
         查询了下java中对soap的支持,有几种方案,有axis和xfire等,我这里先选择的是axis的1.4版本,随即开始开发,这里面有个大坑啊。就是java对类的属性中的getXXXX方法解析后生成的xml文件的属性首字母是小写的,与.NET的生成的xml对不上,光这个问题耗费了很长的时间,最后依然决定用axis2来做,用了不到2个小时全部搞定。
    三、遇到了问题怎么办?
         在使用axis1.4的过程中,遇到这样的那样的问题,我认为最大的问题在于用axis生成的xml文件与.net的不一致,所以才会有这样那样的问题,我的办法是,安装一个wireshark进行抓包,然后比对看看哪些属性生成的不对这样再去改代码,事半功倍。关于wireshark的用法大家可以去google。
         对于用axis的方案大家直接用axis2就好了,去官方下载一个,如果不清楚包的结构,直接把lib下的所有jar包都引进去吧。免得一个一个的引。
    四、过程
         前面说到了,需要认真看.net返回的xml文件,如果某个方法存在soap:Header的话,那么在java端就需要构造header,有可能不同的方法对应不同的header,这个需要看清楚了。
         不说了,直接上过程及代码。
         1.下载axis2,这个是必须的,官方下载吧,然后解压
         2.打开命令控制台窗口,进入bin目录,执行命令:wsdl2java.bat -uri http://www.baidu.com/sample.asmx?wsdl   看到红色的参数部分了吧,这个必须有。 
         3.之后会在bin目录下生成一个src目录,将生成的两个类拷贝到项目中。
         4.然后,那就是基本上和.net引用.net的web service一样一样的了。
         OK,下面只给出一个例子,包含header头、传递复杂类型及接收返回值
            
    ServiceStub stub = new ServiceStub();  //这个是生成的类,可能你的类名和我的是不一样的
                stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
                 //加入头部验证
                  WebSoapHeadE headerE=new WebSoapHeadE();//这里的生成的类可能和你的也不同
                WebSoapHead header=new WebSoapHead();//这个header即是.net的web service的header头
                 header.set.........//这里执行一些属性赋值操作,一般包括用户名和密码之类
                headerE.setWebSoapHead(header); //需要将该头加进去
    

      

                 
             好了到这里我们的头信息就构造完毕了,这里只是构造好了,需要到下面执行某个接口方法的时候把该头传递进去。
              再看传递自定义对象
              比如我这里的这个发短信的业务,生成的方法为sendSms(自定义对象,头信息);
                好的这里我们需要构造这个自定义对象,原.net的sendSms方法的参数为一个自定义对象的数组,那么这里我们该怎么写呢?
                  axis为我们提供了一个类似ArrayOfXXXX的包装对象,构造这个对象然后将xxxx对象加进去即可。
         到这里,我们基本完成了调用.net webservice的所有工作。
              希望这篇文章能给你带来帮助。
  • 相关阅读:
    hdu 2444(二分图) The Accomodation of Students
    hdu 5532 (LIS) Almost Sorted Array
    hdu 1059 (多重背包) Dividing
    poj 2184(Cow Exhibition)
    hdu 2571 (命运) 那个配图女神
    poj 3624 && hdu 2955(背包入门)
    hdu 1257 && hdu 1789(简单DP或贪心)
    BBS(第一天)项目之 注册功能实现通过forms验证与 前端ajax请求触发查询数据库判断用户是否存在的功能实现
    Django之form模板的使用
    Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块
  • 原文地址:https://www.cnblogs.com/danyingjie/p/4112473.html
Copyright © 2011-2022 走看看