一、前言:

     今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.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头、传递复杂类型及接收返回值

  1. ServiceStub stub = new ServiceStub(); //这个是生成的类,可能你的类名和我的是不一样的
  2. stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
  3. //加入头部验证
  4. WebSoapHeadE headerE=new WebSoapHeadE();//这里的生成的类可能和你的也不同
  5. WebSoapHead header=new WebSoapHead();//这个header即是.net的web service的header头
  6. header.set.........//这里执行一些属性赋值操作,一般包括用户名和密码之类
  7. 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. [译]C++如何切分字符串

    声明: 翻译仅以技术学习和交流为目的,如需转载请务必标明原帖链接. http://stackoverflow.com/questions/236129/how-to-split-a-string-in ...

  2. Python可迭代对象、迭代器和生成器

    Python可迭代对象.迭代器和生成器 python 函数 表达式 序列 count utf-8 云栖征文 python可迭代对象 python迭代器 python生成器 摘要: 8.1 可迭代对象( ...

  3. bootstrap的流式布局

    Bootstrap---Fluid layout 流布局 流布局是一种适应屏幕的做法.即不固定块的宽度,而是采用百分比作为单位来确定每一块的宽度.这种布局非常适合一次编写,然后自适应各种不同大小的屏幕 ...

  4. iOS移动端架构的那些事!(转载)

    一个app的初始阶段,必然是先满足各种业务需求.然后,经过多次版本迭代之后,先前的由于急于满足需求而导致的杂乱代码则会充斥整个项目.而此时,项目有了一定的规模,有了一定数量的开发人员,那么为了达到快速 ...

  5. JS屏蔽右键菜单,复制,粘帖xxxxx........

    //屏蔽右键菜单 document.oncontextmenu = function (event) { if (window.event) { event = window.event; } try ...

  6. 34.Spring-Aop.md

    http://blog.csdn.net/bigtree_3721/article/details/50759843 目录 [toc] --- 1.概念 1.1概念 AOP是Spring提供的关键特性 ...

  7. 【USACO 2.3.5】控制公司

    [题目描述] 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.例如,福特公司拥有马自达公司12%的股票.据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了: 公司 ...

  8. [C++] 对象地址与接口指针的故事

    刚想到一个问题,一直在思考C++中对象地址与接口指针的故事. 问题:多继承的情况下,一个具体类对象实现了多个接口,那么多该对象获取的不同接口指针是一样的吗?不是一样吗?不是对象地址吗?-- 困惑原因, ...

  9. CSS,点击去除虚线边框代码

  10. 百度分享share.js插件

    //百度分享window._bd_share_config = { common : { bdText : '分享标题', bdDesc : '分享描述', bdUrl : '分享链接', bdPic ...