一、前言:

     今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.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的所有工作。
          希望这篇文章能给你带来帮助。

JAVA调用.NET WebService终极方案(包含对SoapHeader的处理)的更多相关文章

  1. Java调用.Net WebService参数为空解决办法 (远程)调试webservice方法 转

    Java调用.Net WebService参数为空解决办法 (远程)调试webservice方法   同事遇到一个很囧的问题,java调,netwebservice的时候,调用无参数方法成功,调用有参 ...

  2. java调用C# webService发布的接口

    java调用C# webService发布的接口 java调用C# webService方式有很多种我这里只介绍一种 首先需要引入axis的jar包 axis的maven坐标如下 <depend ...

  3. Java调用.NET webservice方法的几种方式

    最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结.下面实现的是对传喜物流系统(http://vip.cxcod.com/PodApi/GetPodStr.asmx?ws ...

  4. java调用 C# webservice接口

    java调用webservice接口方式有多种,本人很懒,测试一种满足我的需求,故为试验其他方法,仅供参考 一:工具 MyEclipse,C#编码发布的webservice接口 二:步骤 1.打开my ...

  5. java调用CXF WebService接口的两种方式

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...

  6. Java调用.Net WebService参数为空解决办法 (远程)调试webservice方法

    同事遇到一个很囧的问题,java调,netwebservice的时候,调用无参数方法成功,调用有参数的方法每次我这边的webservice日志都记录参数为空,而我自己.Net程序调用完全没有问题,后面 ...

  7. java 调用 .net webservice

    1.首先下载Axis2工具包 2.解压之后用cmd命令进入bin目录WSDL2Java.bat -uri http://192.168.20.42:9999/LoginService.asmx?wsd ...

  8. Axis2 java调用.net webservice接口的问题(郑州就维)

    这是一个古老的问题,古老到从我若干年前遇到这样的问题就是一个解决之道:反复尝试.其实标准是什么,标准就是一个束缚,一种按既定规则的束缚,错点点,你的调用就可能不成功,不成功后你要花费大量的力气查找原因 ...

  9. java调用restful webservice(转)

    一般来说,大家只会用到GET和POST方法来调用. GET方法的话,参数可以写在url里面. 比如说server的interface用的是@RequestParam或者@PathVariable,在客 ...

随机推荐

  1. iOS中sqlite3操作

    声明:下面命令我没有所有使用过, 仅用于收藏, 欢迎大家指出当中的错误 'SELECT  count(*)   FROM sqlite_master WHERE type="table&qu ...

  2. [转] Nginx + CGI/FastCGI + C/Cpp

    接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...

  3. Codeforces 245G Suggested Friends - 交集set_intersection()

    一些人互相是朋友(无向图连一条无向边),现在要添加一个推荐朋友的功能,如果对于x,有y,x与y不是朋友,但是y和x有共同的朋友,并且共同的朋友最多,那么y可以推荐给x.问对于每一个人,有多少人值得推荐 ...

  4. OD: Kernel Exploit - 2 Programming

    本节接前方,对 exploitme.sys 进行利用. exploitme.sys 存在任意地址写任意内容的内核漏洞,现在采用执行 Ring0 Shellcode 的方式进行利用. 获取 HalDis ...

  5. HTML-点击收藏功能模块

    先上效果图: 功能简单: 附上源码以及注解 <div class="info-attribute" id="collect"> <input ...

  6. css sprint 生成工具 bg2css

    今天需要改个css sprint,之前使用过一个工具蛮好使,但是就是想不起叫什么名字,网上搜了很久,才再次找到,原来是bg2css,今天记录下,以备以后不时之需. 下载地址:http://www.cs ...

  7. scn转换为十进制

  8. 关于Core Data的一些整理(四)

    关于Core Data的一些整理(四) 调用Core Data文件中的Request模板进行条件匹配 //获取ObjectModel相当于获取Core Date文件 NSManagedObjectMo ...

  9. js函数--关于toString和valueOf

    js函数--关于toString和valueOf 标签(空格分隔): JavaScript 今天看到一个试题,实现如下语法的功能: var a = add(2)(3)(4); //9 这个就是一个高阶 ...

  10. thinkphp对文件的上传,删除,下载操作

    工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人. thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php 废 ...