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

代码:

          InputStream is = null;

      HttpClient client = new HttpClient();

PostMethod method = new PostMethod("www.xxx.com/WeatherWSS/Weather.asmx/GetCityForecastByZIP");

method.setRequestHeader("Host", "www.xxx.com");

method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

method.setParameter("ZIP", "90001");

try {

client.executeMethod(method);

is = method.getResponseBodyAsStream();

Document document = Jsoup.parse(is,"gbk","");

System.err.println(document);

} catch (Exception e) {

e.printStackTrace();

}finally{

method.releaseConnection();

try {

if(is!=null){

is.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

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

如图:

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

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

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

  需要的JAR如下:

axis-ant.jar
axis.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
wsdl4j-1.5.1.jar

代码:

          try{

        // 指出service所在URL       

        String endpoint = "http://www.xxx.com/WeatherWS/Weather.asmx";  

      String targetNamespace = "http://www.xxx.com/WeatherWS/";

         String method="GetCityForecastByZIP";

        // 创建一个服务(service)调用(call)       

        Service service = new Service();  

        Call call = (Call) service.createCall();// 通过service创建call对象       

        // 设置service所在URL       

        call.setTargetEndpointAddress(new java.net.URL(endpoint));  

        call.setOperationName(new QName(targetNamespace, method));

        call.setUseSOAPAction(true);

        call.addParameter(new QName(targetNamespace,"ZIP"), org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数

        //call.setReturnClass(org.w3c.dom.Element.class); 

        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型  

     //String path = targetNamespace + method;

//call.setSOAPActionURI(path);

        Object ret = call.invoke(new Object[] {"90001"});  

        System.out.println("xx==="+ret.toString()); 

}catch(Exception e){

e.printStackTrace();

}

我比较经常使用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. LeetCode::Remove Duplicates from Sorted List II [具体分析]

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  2. Myeclipse7.5 下载 安装 注冊 注冊码 100%成功

    myeclipse7.5启动画面 1.下载Myeclipse官方原版 官方原版:或者 http://downloads.myeclipseide.com/downloads/products/ewor ...

  3. 【GitHub-SwipeMenuListView】针对ListView item的側滑菜单

    项目地址:https://github.com/baoyongzhang/SwipeMenuListView Usage Step 1:import swipemenulistview.jar Ste ...

  4. javascript 知识点坑

    1. JavaScript事件属性 event.target 当目标事件发生span里面 当目标事件发生在main里面 e.target; // 目标节点DOM结构   e.target.id; // ...

  5. Tree( 树) 组件[4]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一.方法列表 //部分方法onClick : funct ...

  6. C# Socket传输大文件

    1.基础类TransferFiles,client和server都需要 using System; using System.Collections.Generic; using System.Tex ...

  7. 浅谈MDX处理空值NULL及格式化结果

    MDX查询结果中往往会含有"NULL"值,这是某维度下对应的的量值不存在导致的,为了让报表呈现更好的效果,在有些情况下,需要将"NULL"的切片值置换成0,这些 ...

  8. 高仿QQ即时聊天软件开发系列之二登录窗口界面

    继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因 ...

  9. java中IO递归写入

    package cn.stat.p1.file; import java.io.BufferedWriter; import java.io.File; import java.io.FileWrit ...

  10. Struts2 的国际化实现

    以前一直看见 i18N ,现在才知道原来 i18N 就是 Internationalization,因为以 i 开头,以 N 结尾,共18个字母,也就是国际化的意思.在百度搜索主页上没有看见中英文的切 ...