WebService是基于Web的服务,WebService使用SOAP协议实现跨编程语言和跨操作系统平台,接收和响应外部系统的某种请求,从而实现远程调用。WebService采用HTTP协议传输数据,采用XML格式封装数据,SOAP协议=HTTP协议+XML数据格式。主要解决不了不同的系统或者调用分布部署的处理数据项目返回的接口。

最近自己在项目中,调用webService接口常用到两种方法,自己觉得也比较好用,在这里记录一下。

第一种,采用httpclient 请求,这种跟我们经常用的HTTP请求一样,结果可以是返回XML格式的字符串,我们比较容易对其进行解析,取得我们想要的数据。

地址:列如 http://www.xxx.com/WeatherWS/Weather.asmx?wsdl

调用的方法是:GetCityForecastByZIP   方法参数是: ZIP

需要的JAR如下:

commons-codec-1.4.jar

commons-httpclient-3.1.jar

jsoup-1.6.2.jar

commons-logging-1.0.4.jar

代码:

  1. InputStream is = null;
  2.  
  3. HttpClient client = new HttpClient();
  4.  
  5. PostMethod method = new PostMethod("www.xxx.com/WeatherWSS/Weather.asmx/GetCityForecastByZIP");
  6.  
  7. method.setRequestHeader("Host", "www.xxx.com");
  8.  
  9. method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  10.  
  11. method.setParameter("ZIP", "90001");
  12.  
  13. try {
  14.  
  15. client.executeMethod(method);
  16.  
  17. is = method.getResponseBodyAsStream();
  18.  
  19. Document document = Jsoup.parse(is,"gbk","");
  20.  
  21. System.err.println(document);
  22.  
  23. } catch (Exception e) {
  24.  
  25. e.printStackTrace();
  26.  
  27. }finally{
  28.  
  29. method.releaseConnection();
  30.  
  31. try {
  32.  
  33. if(is!=null){
  34.  
  35. is.close();
  36.  
  37. }
  38.  
  39. } catch (IOException e) {
  40.  
  41. e.printStackTrace();
  42.  
  43. }
  44.  
  45. }

我这边 document  是返回XML格式的形式,可以对进行处理,获取我们想要的数据。

如图:

第二种:采用axis2来调用。这种 axis2通用性不好,有的web服务用axis2不好用。

  地址:列如 http://www.xxx.com/WeatherWS/Weather.asmx?wsdl

  调用的方法是:GetCityForecastByZIP   方法参数是: ZIP

  需要的JAR如下:

  1. axis-ant.jar
  2. axis.jar
  3. commons-discovery-0.2.jar
  4. commons-logging-1.0.4.jar
  5. jaxrpc.jar
  6. wsdl4j-1.5.1.jar

代码:

  1. try{
  2.  
  3. // 指出service所在URL
  4.  
  5. String endpoint = "http://www.xxx.com/WeatherWS/Weather.asmx";
  6.  
  7. String targetNamespace = "http://www.xxx.com/WeatherWS/";
  8.  
  9. String method="GetCityForecastByZIP";
  10.  
  11. // 创建一个服务(service)调用(call)
  12.  
  13. Service service = new Service();
  14.  
  15. Call call = (Call) service.createCall();// 通过service创建call对象
  16.  
  17. // 设置service所在URL
  18.  
  19. call.setTargetEndpointAddress(new java.net.URL(endpoint));
  20.  
  21. call.setOperationName(new QName(targetNamespace, method));
  22.  
  23. call.setUseSOAPAction(true);
  24.  
  25. call.addParameter(new QName(targetNamespace,"ZIP"), org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
  26.  
  27. //call.setReturnClass(org.w3c.dom.Element.class);
  28.  
  29. call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
  30.  
  31. //String path = targetNamespace + method;
  32.  
  33. //call.setSOAPActionURI(path);
  34.  
  35. Object ret = call.invoke(new Object[] {"90001"});
  36.  
  37. System.out.println("xx==="+ret.toString());
  38.  
  39. }catch(Exception e){
  40.  
  41. e.printStackTrace();
  42.  
  43. }

我比较经常使用httpclient 请求。也可以使用WSDL2JAVA把WSDL文件转为本地的服务类,然后可以直接调用。

Java 常调用的Webservice接口的方法的更多相关文章

  1. 常调用的Webservice接口 集合

    1. 查询手机:http://www.yodao.com/smartresult-xml/search.s?type=mobile&q=手机号码 2. 查询IP:http://www.yoda ...

  2. java获取https网站证书,附带调用https:webservice接口

    一.java 获取https网站证书: 1.创建一个java工程,新建InstallCert类,将以下代码复制进去 package com; import java.io.BufferedReader ...

  3. java调用CXF WebService接口的两种方式

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...

  4. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  5. java调用 C# webservice接口

    java调用webservice接口方式有多种,本人很懒,测试一种满足我的需求,故为试验其他方法,仅供参考 一:工具 MyEclipse,C#编码发布的webservice接口 二:步骤 1.打开my ...

  6. httpclient调用webservice接口的方法实例

    这几天在写webservice接口,其他的调用方式要生成客户端代码,比较麻烦,不够灵活,今天学习了一下httpclient调用ws的方式,感觉很实用,话不多说,上代码 http://testhcm.y ...

  7. WebService---Android中访问WebService接口的方法

     最近公司有个项目需要从Android平台访问WebService接口,实现向发布的函数传递对象.在网上找了一些资料,发现使用ksoap2可以调用WebService传递对象.   需要引入ksoap ...

  8. java如何调用对方http接口(II)

    java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...

  9. java父类调用被子类重写的方法

    [转][原文]  1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解jav ...

随机推荐

  1. javascript--瀑布流

    简单瀑布流代码实现 html代码例如以下 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...

  2. StringBuffer和StringBuilder使用方法比較

    StringBuffer是字符串缓冲区,是一个容器. 特点: 1,长度是可变化的. 2,能够字节操作多个数据类型. 3,终于会通过toString方法变成字符串. C create U update ...

  3. Redmine backlogs 升级

    刚装完1.0.3两天,1.0.4发布了,乘项目还没有开始,赶快升级.升级过程 1.设置环境变量: RAILS_ENV=production export RAILS_ENV 2. 获取最新代码: cd ...

  4. Java基本类型与包装类

    存储方式及位置的不同,基本类型是直接存储变量的值保存在堆栈中能高效的存取,封装类型需要通过引用指向实例,具体的实例保存在堆中   Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型) ...

  5. 内容观察者 ContentObserver 监听短信、通话记录数据库 挂断来电

    Activity public class MainActivity extends ListActivity {     private TextView tv_info;     private  ...

  6. OD: Exploit Me - Overwrite Nearby Varible

    实验代码: #include<stdio.h> #include<string.h> #define PASSWORD "1234567" int veri ...

  7. ASP.NET常用编程代码(二)

    1.绑定在DataList中的DropDownList private void dlistOrder_EditCommand(object source, System.Web.UI.WebCont ...

  8. MySQL 远程访问开启

    打开mysql客户端,直接运行以下命令:1.use mysql; 2.update user set host='%' where user='root'; 会报错:ERROR 1062 (23000 ...

  9. App轮播图

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. table-cell的手机应用场景

    前言 最近在前端观察看见了这篇老文章,看见了元素居中的5种办法,其中提到了display:table-cell这个css显示的新属性,按照当时的浏览器市场来说想必兼容性会是糟糕的一比,但是现在这坛老酒 ...