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文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:

Java代码  
  1. import java.util.Date;
  2. import java.text.DateFormat;
  3. import org.apache.axis.client.Call;
  4. import org.apache.axis.client.Service;
  5. import javax.xml.namespace.QName;
  6. import java.lang.Integer;
  7. import javax.xml.rpc.ParameterMode;
  8. public class caClient {
  9. public static void main(String[] args) {
  10. try {
  11. String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
  12. //直接引用远程的wsdl文件
  13. //以下都是套路
  14. Service service = new Service();
  15. Call call = (Call) service.createCall();
  16. call.setTargetEndpointAddress(endpoint);
  17. call.setOperationName("addUser");//WSDL里面描述的接口名称
  18. call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
  19. javax.xml.rpc.ParameterMode.IN);//接口的参数
  20. call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
  21. String temp = "测试人员";
  22. String result = (String)call.invoke(new Object[]{temp});
  23. //给方法传递参数,并且调用方法
  24. System.out.println("result is "+result);
  25. }
  26. catch (Exception e) {
  27. System.err.println(e.toString());
  28. }
  29. }
  30. }

2,直接SOAP调用远程的webservice 
这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来

Java代码  
  1. import org.apache.soap.util.xml.*;
  2. import org.apache.soap.*;
  3. import org.apache.soap.rpc.*;
  4. import java.io.*;
  5. import java.net.*;
  6. import java.util.Vector;
  7. public class caService{
  8. public static String getService(String user) {
  9. URL url = null;
  10. try {
  11. url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
  12. } catch (MalformedURLException mue) {
  13. return mue.getMessage();
  14. }
  15. // This is the main SOAP object
  16. Call soapCall = new Call();
  17. // Use SOAP encoding
  18. soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
  19. // This is the remote object we're asking for the price
  20. soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
  21. // This is the name of the method on the above object
  22. soapCall.setMethodName("getUser");
  23. // We need to send the ISBN number as an input parameter to the method
  24. Vector soapParams = new Vector();
  25. // name, type, value, encoding style
  26. Parameter isbnParam = new Parameter("userName", String.class, user, null);
  27. soapParams.addElement(isbnParam);
  28. soapCall.setParams(soapParams);
  29. try {
  30. // Invoke the remote method on the object
  31. Response soapResponse = soapCall.invoke(url,"");
  32. // Check to see if there is an error, return "N/A"
  33. if (soapResponse.generatedFault()) {
  34. Fault fault = soapResponse.getFault();
  35. String f = fault.getFaultString();
  36. return f;
  37. } else {
  38. // read result
  39. Parameter soapResult = soapResponse.getReturnValue ();
  40. // get a string from the result
  41. return soapResult.getValue().toString();
  42. }
  43. } catch (SOAPException se) {
  44. return se.getMessage();
  45. }
  46. }
  47. }

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相关推荐

  1. Java和.NET互操作:应该放弃Web Service吗

    通过Web Service混合.NET和Java技术往往很容易,但Web Service并非是.NET和Java互操作的万灵丹.Web Service在集成独立的跨网络通信的组件时非常有用,在简单的调 ...

  2. 如何创建和发布.asmx Web Service

    创建和发布Web Service Web服务方法中可以返回一个DataSet对象 WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用.ASP.NET Web Form程序.甚 ...

  3. java中调用kettle作业以及生成web service 接口

    第一步:(前提将kett中lib下的所有jar包拷贝到java项目lib目录)创建并连接资源库,如果只用这一个工作空间,可以将此段代码放入静态代码块,代码如下: KettleEnvironment.i ...

  4. html调用天气预报wsdl服务,调用天气预报Web Service

    中国国家气象局天气预报接口总共提供了三个: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn 天气预 ...

  5. [Java] webservice soap,wsdl 例子

    java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...

  6. [图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端

    [图解教程]Axis2与Eclipse整合开发Web Service之二:WSDL逆向生成服务端 一般开发Web Service,是选写服务端,再根据生成的WSDL文件生成客户端.看过一本SOA的书中 ...

  7. Web Service (二) CXF自动发布Web Service(No Spring)

    Web Service实现目前流行的框架主要有两种,cxf和axis这两个框架,下面是这两个框架的优缺点,我们这个项目中使用的是cxf这个框架,首先看一下没有集成spring的时候是怎么实现远程调用的 ...

  8. Web Service 开发系列文章之三(一个较小的契约优先的Web Service例子,用JavaApplication发布)...

    Web Service 学习第三期 1.编写纯WSDL的web服务 1.1.新建目录及WSDL文件 1.2.编写WSDL 1.2.1.编写type <wsdl:types> <xsd ...

  9. JAVA 调用Web Service

    JAVA 调用Web Service的方法 1.使用HttpClient  用到的jar文件:commons-httpclient-3.1.jar  方法:  预先定义好Soap请求数据,可以借助于X ...

最新文章

  1. java 时间戳加密_加密PHP中的时间戳并用Java解密
  2. 五.Java IO、NIO、文件、通讯
  3. hdu 4907(并查集)
  4. Opencv中三种操作像素的方法
  5. 在项目中使用fastreport_如何在项目管理中使用里程碑
  6. 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
  7. 远程用power shell 管理vmware view 池用户
  8. web前端技术课程作业
  9. VS2008安装Qt4.8
  10. php 查看linux硬盘序列号,LINUX获取硬盘序列号
  11. 内存结构、地址总线、数据总线详解
  12. 吉他音阶训练——问题解答
  13. 对C标准中空白字符(空格、回车符(\r)、换行符(\n)、水平制表符(\t)、垂直制表符(\v)、换页符(\f))的理解
  14. dojo学习日记(6)——dojo/_base/fx的 fadeOut()方法
  15. Linux的10个彩蛋
  16. 七夕节 看到很多停止更新的blog 莫名有点淡淡的忧桑
  17. 【Office软件使用】Word往框里打勾
  18. 计蒜之道 测试赛 (BCD)
  19. python+minicap的使用 安卓手机投票到电脑
  20. 【AI周报】首款高容错通用量子计算机原型登上Nature;SIGIR 2022 | 快手联合武汉大学提出序列推荐的多粒度神经模型

热门文章

  1. 如何做好一条0~2岁的产品狗
  2. 【pmcaff】人人黑产品经理,你中招了嘛!
  3. 远程桌面连接出现身份验证错误。 要求的函数不受支持,这可能是由于 CredSSP 加密 Oracle 修正。...
  4. TokuDB在生产环境的应用场景(zabbix也可以)
  5. POJ3104 Drying [二分]
  6. 外国人无知嘲笑,中国人的回答让他们目瞪口呆!
  7. 数据库三范式经典实例解析
  8. C#关机代码实例详解
  9. 从C#2.0的角度看.NET 2.0类型系统
  10. GARFIELD@07-02-2005