使用Java调用以WSDL形式发布的web service
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表
http://www.webservicex.net/WCF/default.aspx
这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。
下面我们来看Java如何通过WSDL文件来调用这些web service:
注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。
1,直接AXIS调用远程的web service
我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:
- import java.util.Date;
- import java.text.DateFormat;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- import javax.xml.namespace.QName;
- import java.lang.Integer;
- import javax.xml.rpc.ParameterMode;
- public class caClient {
- public static void main(String[] args) {
- try {
- String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
- //直接引用远程的wsdl文件
- //以下都是套路
- Service service = new Service();
- Call call = (Call) service.createCall();
- call.setTargetEndpointAddress(endpoint);
- call.setOperationName("addUser");//WSDL里面描述的接口名称
- call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
- javax.xml.rpc.ParameterMode.IN);//接口的参数
- call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
- String temp = "测试人员";
- String result = (String)call.invoke(new Object[]{temp});
- //给方法传递参数,并且调用方法
- System.out.println("result is "+result);
- }
- catch (Exception e) {
- System.err.println(e.toString());
- }
- }
- }
2,直接SOAP调用远程的webservice
这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来
- import org.apache.soap.util.xml.*;
- import org.apache.soap.*;
- import org.apache.soap.rpc.*;
- import java.io.*;
- import java.net.*;
- import java.util.Vector;
- public class caService{
- public static String getService(String user) {
- URL url = null;
- try {
- url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
- } catch (MalformedURLException mue) {
- return mue.getMessage();
- }
- // This is the main SOAP object
- Call soapCall = new Call();
- // Use SOAP encoding
- soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
- // This is the remote object we're asking for the price
- soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
- // This is the name of the method on the above object
- soapCall.setMethodName("getUser");
- // We need to send the ISBN number as an input parameter to the method
- Vector soapParams = new Vector();
- // name, type, value, encoding style
- Parameter isbnParam = new Parameter("userName", String.class, user, null);
- soapParams.addElement(isbnParam);
- soapCall.setParams(soapParams);
- try {
- // Invoke the remote method on the object
- Response soapResponse = soapCall.invoke(url,"");
- // Check to see if there is an error, return "N/A"
- if (soapResponse.generatedFault()) {
- Fault fault = soapResponse.getFault();
- String f = fault.getFaultString();
- return f;
- } else {
- // read result
- Parameter soapResult = soapResponse.getReturnValue ();
- // get a string from the result
- return soapResult.getValue().toString();
- }
- } catch (SOAPException se) {
- return se.getMessage();
- }
- }
- }
3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。
这是像我这种懒人最喜欢的方式,仍然以前面的global weather report为例。
首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。
那么就会出现4个文件:
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。
使用Java调用以WSDL形式发布的web service相关推荐
- Java和.NET互操作:应该放弃Web Service吗
通过Web Service混合.NET和Java技术往往很容易,但Web Service并非是.NET和Java互操作的万灵丹.Web Service在集成独立的跨网络通信的组件时非常有用,在简单的调 ...
- 如何创建和发布.asmx Web Service
创建和发布Web Service Web服务方法中可以返回一个DataSet对象 WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用.ASP.NET Web Form程序.甚 ...
- java中调用kettle作业以及生成web service 接口
第一步:(前提将kett中lib下的所有jar包拷贝到java项目lib目录)创建并连接资源库,如果只用这一个工作空间,可以将此段代码放入静态代码块,代码如下: KettleEnvironment.i ...
- html调用天气预报wsdl服务,调用天气预报Web Service
中国国家气象局天气预报接口总共提供了三个: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn 天气预 ...
- [Java] webservice soap,wsdl 例子
java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...
- [图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端
[图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端 一般开发Web Service,是选写服务端,再根据生成的WSDL文件生成客户端.看过一本SOA的书中 ...
- Web Service (二) CXF自动发布Web Service(No Spring)
Web Service实现目前流行的框架主要有两种,cxf和axis这两个框架,下面是这两个框架的优缺点,我们这个项目中使用的是cxf这个框架,首先看一下没有集成spring的时候是怎么实现远程调用的 ...
- Web Service 开发系列文章之三(一个较小的契约优先的Web Service例子,用JavaApplication发布)...
Web Service 学习第三期 1.编写纯WSDL的web服务 1.1.新建目录及WSDL文件 1.2.编写WSDL 1.2.1.编写type <wsdl:types> <xsd ...
- JAVA 调用Web Service
JAVA 调用Web Service的方法 1.使用HttpClient 用到的jar文件:commons-httpclient-3.1.jar 方法: 预先定义好Soap请求数据,可以借助于X ...
最新文章
- java 时间戳加密_加密PHP中的时间戳并用Java解密
- 五.Java IO、NIO、文件、通讯
- hdu 4907(并查集)
- Opencv中三种操作像素的方法
- 在项目中使用fastreport_如何在项目管理中使用里程碑
- 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
- 远程用power shell 管理vmware view 池用户
- web前端技术课程作业
- VS2008安装Qt4.8
- php 查看linux硬盘序列号,LINUX获取硬盘序列号
- 内存结构、地址总线、数据总线详解
- 吉他音阶训练——问题解答
- 对C标准中空白字符(空格、回车符(\r)、换行符(\n)、水平制表符(\t)、垂直制表符(\v)、换页符(\f))的理解
- dojo学习日记(6)——dojo/_base/fx的 fadeOut()方法
- Linux的10个彩蛋
- 七夕节 看到很多停止更新的blog 莫名有点淡淡的忧桑
- 【Office软件使用】Word往框里打勾
- 计蒜之道 测试赛 (BCD)
- python+minicap的使用 安卓手机投票到电脑
- 【AI周报】首款高容错通用量子计算机原型登上Nature;SIGIR 2022 | 快手联合武汉大学提出序列推荐的多粒度神经模型
热门文章
- 如何做好一条0~2岁的产品狗
- 【pmcaff】人人黑产品经理,你中招了嘛!
- 远程桌面连接出现身份验证错误。 要求的函数不受支持,这可能是由于 CredSSP 加密 Oracle 修正。...
- TokuDB在生产环境的应用场景(zabbix也可以)
- POJ3104 Drying [二分]
- 外国人无知嘲笑,中国人的回答让他们目瞪口呆!
- 数据库三范式经典实例解析
- C#关机代码实例详解
- 从C#2.0的角度看.NET 2.0类型系统
- GARFIELD@07-02-2005