java调用.net生成的WebService(axis调用)

来源:互联网 发布:php fsockopen post 编辑:程序博客网 时间:2024/04/30 03:01

一.准备部分

需要: axis2-1.4.1-bin.zip、axis2-1.4.1-war.zip

将axis2-1.4.1-war.zip 解压。然后在解压后的文件中找到axis2.war ,将其拷贝到tomcat的webapps目录下。启动tomcat。然后在浏览器地址栏中输入:http://localhost:8080/axis2/

此时会自动安装Axi2。出现如下页面
用AXIS2 <wbr>调用.NET <wbr>webServices


如果没出现就说明没安装成功!

二.采用无配置的方式建立WebServices客户端1.解压axis2-1.4.1-bin.zip在里面找到bin\java2wsdl.bat 运行

进入DOS。CD到axis2-1.4.1-bin.zip的bin\ 目录。

再敲入:wsdl2java -uri http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl -p cn.com.WebXml -s -o stub

其中

-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。

-p参数指定了生成的Java类的包名(和你要放的包名同名),

-o参数指定了生成的一系列文件保存的根目录。

在执行完上面的命令后,就会发现在当前目录下多了个stub目录,stub目录可以找到一个.java文件(文件名和你建的WebServices的类名有关),该文件复杂调用WebService。

2.将上述产生的.java类文件拷进你的JavaProject里面。引入axis2-1.4.1-bin.zip解压后的Lib目录的所有包(其实可以全导入。但是我不知道要哪几个。没研究。哥敲的是代码,打出的是寂寞)。

然后新建一个工作类。如下:  全文转自网络 以下改成网络中可用的代码

try {
MobileCodeWSStub stub = new MobileCodeWSStub(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");// 指点ws地址
stub._getServiceClient().getOptions()
.setTimeOutInMilliSeconds(1000 * 60 * 3);// 设置超时时长 单位毫秒
MobileCodeWSStub.GetMobileCodeInfo gci = new MobileCodeWSStub.GetMobileCodeInfo();// 获得具体方法对象
gci.setMobileCode(mobile);// 设置参数
String str = stub.getMobileCodeInfo(gci)
.getGetMobileCodeInfoResult();// 获取结果
// ,以下为特殊处理,一般到此java调用.net的webService结束!
str = str.replace(":", " "); // 根据返回结果进行特殊处理
str += "\r\n";
System.out.println(str);
return str;
} catch (Exception ex) {
ex.printStackTrace();
String str = mobile + "\r\n异常\r\n异常\r\n异常\r\n";// 如果异常,返回mobile异常
return str;
}


到这里Java掉用Java的WebServices就已经完工了。

但是调用.NET的WebServices还有问题。在axis中使用的是HTTP/1.0协议,而.NET和axis2使用的是HTTP/1.1协议,后两者的区别在于.NET未使用ns1的命名空间前缀打包SOAP请求,且axis2使用了Content-Encoding:chunked头。

解决方法:修改了生成.JAVA类带(ConfigurationContext configurationContext,String targetEndpoint, boolean useSeparateListener)参数的构造方法,在最后加入一句禁止使用chunk选项,终于调用成功:_serviceClient.getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,Boolean.FALSE););如图:

用AXIS2 <wbr>调用.NET <wbr>webServices
最后特别提醒:如果使用.net创建的Web Service,在名称空间的指定上需要注意一下,指定的名称空间将作为java 创建web service client的package,如名称空间定义如下:
[WebService(Namespace = "http://longrise.com/")]

Java中的package就是:package com..longrise;

关键的两点: 上面两个必须修改,如不修改则显示read time out

原创粉丝点击