一、前言:

     今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.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. Ubuntu设置环境变量的几种方法

    1.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.1 永久的:需要修改配置文件,变量永久生效. 1.2 临时的:使用export命令声明即可,变量在关闭shell时失效 ...

  2. Android(java)学习笔记239:多媒体之撕衣服的案例

    1.撕衣服的案例逻辑:       是两者图片重叠在一起,上面我们看到的是美女穿衣服的图片,下面重叠(看不到的)是美女没有穿衣服的图片.当我们用手滑动画面,上面美女穿衣服的图片就会变成透明,这样的话下 ...

  3. Ubuntu上glibc CVE-2015-7547漏洞的POC验证和修复

    Ubuntu上查看Glibc版本 $ldd --version ldd (Ubuntu GLIBC 2.21-0ubuntu4) 2.21 Ubuntu上查看使用Glibc的相关程序 sudo lso ...

  4. Strust2 <c:forEach> 循环控制标签

    <c:forEach>为循环控制标签 语法:迭代一集合对象中的所有成员 <c:forEach [var="varName"] items="collec ...

  5. python环境准备

    一.环境准备. 1.安装python3.5.2(勾选环境变量),python2.7.12 2.设置环境变量 (要求命令行输入python,进入python2命令行,打python3时,进入python ...

  6. 关于C#中get和set

    在看书的时候看见了一段代码,有两个类person: public class person { public string name; } public class person { public s ...

  7. 【开源java游戏框架libgdx专题】-07-文件处理

    介绍:文件处理在不同平台的文件管理是略有差异的 Desktop(Windows,Linux,Mac OS X等等):在桌面系统中,文件系统是一个大块的内存.文件可以通过当前的工作目录或者绝对路径被引用 ...

  8. IDEA中添加各种依赖pom.xml文件内容

    刚实习的小白,今天准备进入项目,纳尼,前辈把框架什么的都搭建好了,默默的抹了一把辛酸泪,刚刚接触自学框架的时候,添加依赖的时候总是各种问题,让前辈发给我之后,才发现人家写的代码相当优美了.下面就是前辈 ...

  9. IE layout详解

    引言: Internet Explorer 中有很多奇怪的渲染问题可以给他一个”layout”得到解决,John Gallant 和 Holly Bergevin把他归类为“dimensional b ...

  10. ios 中获得应用程序名称和版本号

    IOS程序中的应用名称和版本号在 info.plist 文件中存储着,要想在程序中获得需要使用 NSBundle 对象 下面是示例代码: NSBundle *bundle = [NSBundle ma ...