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

2 篇文章 0 订阅
1 篇文章 0 订阅

一.准备部分

需要: 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java调用net开发的webservice实例下载 问题终于解决了,之前加上?wsdl的时候报如下错: - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect - Retrying request - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect - Retrying request - I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect - Retrying request - java.net.ConnectException: Connection timed out: connect org.codehaus.xfire.fault.XFireFault: Couldn't send message. at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89) at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:30) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79) at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114) at org.codehaus.xfire.client.Client.invoke(Client.java:336) at org.codehaus.xfire.client.Client.invoke(Client.java:368) at cn.watersoft.reportinfo.test.test.main(test.java:22) Caused by: org.codehaus.xfire.XFireException: Couldn't send message. at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:145) at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48) at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26) ... 6 more Caused by: java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:519) at java.net.Socket.connect(Socket.java:469) at java.net.Socket.(Socket.java:366) at java.net.Socket.(Socket.java:240) at org.apach
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值