java如何调用其他系统的web service接口
2016-10-09 13:32
701 查看
1. Java调用webservice接口方法
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。我们也可以在以下网站找到许多 webservice provider列表, 你可以使用下面的URL来测试你的webservice程序。
http://www.webservicex href="http://lib.csdn.net/base/dotnet" target=_blank>.NET/ws/default.aspx
这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。
下面我们来看Java如何通过WSDL文件来调用这些web service(以 COPS WebSSO为例)
1.1 [Apache提供]直接通过AXIS调用远程的web service
我认为这种调用方式适合比较那种返回比较简单的数据的service, 比如,天气预报,这些内容肯定可以通过一个很简单的xml来返回。还有就是WebSSO,返回的就是一个字符串。这种调用方式的好处就是简单(开发简单,调用简单,只要service提供方不改动对外的方法接口,客户端都无需有代码带动),无需对web service有太深了解,只要按照套路去掉用就可以了。
直接调用模式如下:
<<LogonClientWithURL.java>>
package ws.client;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class LogonClientWithURL {
public static void main(String args[]) throws Exception {
try {
String urlname = "http://192.168.194.23:9080/Logon/services/Logon?wsdl" ;
urlname = "http://192.168.194.23:9080/Logon/services/Logon";
Service s = new Service();
Call call = (Call) s.createCall();
call.setTimeout(new Integer(5000));
call.setOperation( "getSecurityToken" );
call.setTargetEndpointAddress(urlname);
Object[] fn01 = { "john" , "john" , null ,null };
String val = (String)call.invoke(fn01);
System.out .println( "getSecurityToken(correct):" + val);
Object[] fn02 = { "john" , "john2" , null ,null };
String va2 = (String)call.invoke(fn02);
System.out .println( "getSecurityToken(wrong):" + va2);
} catch (Exception e) {
//java.io.InterruptedIOException: Read timed out
System.out.println(e.getMessage());
}
}
}
1.2 [Apache提供]使用WSDL2Java把WSDL文件转成本地类,然后像本地类一样使用。
这种方式应该可以调用所有的webService。同时这个调用方式适合那种业务比较复杂的Service (特别是企业应用, 不是外部所有人都能无限制访问那种Service),比如,这个Service返回的xml内容比较复杂,同时多个客户端系统都需要访问这个Service,在这种情况,service提供方可能会考虑返回一个java类。毕竟,每个客户端都要解析xml也够麻烦的,还不如让service提供方返回一个类。
调用模式如下:
1)使用WSDL2Java把WSDL文件转成本地类。 我这里写了bat文件:
<<WSDL2JAVA.bat>>
set Axis_Lib=.\lib
set Java_Cmd=D:\Dev\JDK\jdk1.4.2_12\bin\java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=.\src
set Package=com.ubs.ws
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% http:\\192.168.194.23:9080\Logon\services\Logon\wsdl\Logon.wsdl
Pause
运行直接生成以下java类
Logon.java
LogonService.java
LogonServiceLocator.java
LogonSoapBindingStub.java
2) <<LogonClientWithStub.java>>
package test.cis.client;
import test.cis.*;
public class LogonClientWithStub {
public static void main(String[] args) {
try {
Logon locator = new LogonServiceLocator().getLogon();
String result = locator.getSecurityToken("john" , "john" ,null , null );
System.out.println("getSecurityToken(correct): " + result);
result = locator.getSecurityToken("john" , "john2" ,null , null );
System.out.println("getSecurityToken(wrong): " + result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
1.3 [Apache提供]直接SOAP调用远程的webservice
apache的soap项目,不过如今已经被axis取代了,后者重新进行了架构设计,功能更齐全。前者已停止开发。所以建议用axis。也就是1.1 & 1.3
1.4 [XFire提供] 使用XFire调用WebService
有兴趣的可以下载XFire的jar来学习一下。
相关文章推荐
- <<< java如何调用系统程序
- Java中,如何调用“其他类的方法中生成的实例化的对象”的属性?
- 如何在JAVA程序中调用windows其他程序
- 【干货篇】调用其他系统http接口超时了,如何处理,方案汇总
- java本地方法如何调用其他程序函数,方法详解
- 调用其他系统http接口超时了,如何处理,方案汇总
- 【Java】如何调用系统命令
- java应用中,调用第三方api如何处理异常(系统异常、操作异常等等)
- Java如何调用系统打印机打印文件
- Java如何调用其他服务器接口
- java本地方法如何调用其他程序函数,方法详解2
- Java取系统时间的调用速度如何?
- 如何使用Java中取得Win2000系统当前登录帐户和主文件夹
- 如何将数据从DATASET写入XML文档,并转换成其他应用系统所需的格式!(如RSS阅读器XML文档格式)
- .net反射技术的应用—如何调用Java的COM接口
- 如何在VBScript中调用其他应用程序
- 如何在.NET(based on c#)中调用系统功能
- Java如何通过VC调用VB编写的COM
- 如何在系统中添加韩文/日文(或其他语言)输入法
- 在linux操作系统中如何截获系统调用