一、前言:

     今日部门的产品需要用到短信功能,需要走公司统一的接口,而该短信接口是由.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. 开启.htaccess重写之前先来看看mod_rewrite(转)

    Apache的Mode Rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.在大多数情况下,它和.htaccess文件配合使用.就是说,.htaccess文件的一个主要功能 ...

  2. Web站点架构设计考虑的因素

    转自http://blog.csdn.net/moshengtan/article/details/8990052 1    Web负载均衡 1.1 - 使用商业硬件实现 最经常使用的F5 与citr ...

  3. Swift: 类与结构体

    对比类与结构体 类与结构体有许多的相同点,它们都可以: 定义属性来存储值: 定义方法来提供功能: 定义下标操作: 定义初始化函数: 扩展它的默认的实现: 遵从协议: 类有一些额外的能力,但是结构体没有 ...

  4. Content Provider Basics ——Content Provider基础

    A content provider manages access to a central repository of data. A provider is part of an Android ...

  5. vim 设定一个新的snippets

    目录 ~/.vim/bundle/vim-snippets/snippets 编辑 _.snippets 在最后添加一行自己需要的,比如想要个自己的名字,然后按tab,即出现全称,可以添加如下内容 s ...

  6. 教学项目之-通过Python实现简单的计算器

    教学项目之-通过Python实现简单的计算器   计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...

  7. sharesdk 的使用

    社交分享组件有很多 介绍一下sharesdk 的使用 官网:http://sharesdk.cn/ 1.先上效果图 2.主要代码: public class TestShare extends Act ...

  8. css居中技巧

    1    text-align: center; 只能对图片,按钮,文字等行内元素(display为inline或inline-block等)进行水平居中.在IE6.7中能对任何元素进行水平居中.另外 ...

  9. Python的基本配置

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结 ...

  10. ASP.NET MVC 几种 Filter 的执行过程源码解析

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多 人觉得平时根本不需要知道这些,会用就行了.其实阅读 ...