java调用webservice接口
 

webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。

我们也可以在以下网站找到许多 webservice provider列表, 你可以使用下面的URL来测试你的webservice程序。

http://www.webservicex.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) {

e.printStackTrace();

}

}

}

最新文章

  1. MongoDB学习笔记(一) MongoDB介绍及安装(摘)
  2. 用python pickle库来存储数据对象
  3. 安全稳定实现redis cluster自动化迁移
  4. 11月3日上午PHP练习《投票》
  5. js进阶
  6. 第七课 第二节,T语言流程语句(版本5.0)
  7. UIView的使用
  8. C# 常用加密处理
  9. 用户名 不在 sudoers文件中,此事将被报告。
  10. 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)
  11. Examples_08_08
  12. html_day1
  13. MongoDB学习笔记(一)
  14. jquery+ligerform三级联动下拉框
  15. 基于Quqrtz.NET 做的任务调度管理工具
  16. oracle 主键自动增长
  17. PPT自动载入图片并矩阵分布
  18. HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索
  19. POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)
  20. WinFom中经典小游戏(含源码)

热门文章

  1. C# 字典 Dictionary 转 JSON 格式遍历
  2. php 获取当前用户的IP
  3. 【C#进阶系列】13 接口
  4. Hibernate---detached entity passed to persist一个解决方法
  5. PyCharm不能自动import解决方法_PyCharm cannot auto import package troubleshooting
  6. InfluxDB学习之InfluxDB的基本操作
  7. android 设置textview跑马灯效果
  8. GJM : Unity3D - NetWork - Hight Level API ( HLAPI) [转载]
  9. JSESSIONID与SESSION
  10. JBox - 模态窗口,工具提示和消息 jQuery 插件