Webservice的几种调用方式

第一种:客户端方式wsimport 【掌握】
案例:手机号码归属地查询WEB服务
案例:天气查询WEB服务
第二种:Service方式 【了解】
案例:天气查询WEB服务
第三种:HTTPURLConnection方式【代码自己发送http请求-掌握】
案例:手机号码归属地查询WEB服务
第四种:Ajax调用方式【不要求掌握,原理与第三种一样,只不过是用js写】
n种:IOS:AFN……

一、第一种:客户端方式wsimport(重要

案例一:手机号码归属地查询WEB服务
案例二:天气查询WEB服务
	(这里提供一个公网服务地址:http://www.webxml.com.cn/zh_cn/index.aspx)不过一般般直接在百度查也能找到很多接口。

案例一:手机归属地查询
手机归属地Web服务:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
第一步:wsimport生成客户端代码【此命令放在你在工程src目录下执行】
创建项目并在控制台中,打开源代码src目录,输入以下命令:
wsimport -p com.gyf.mobile.ws -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
第二步:阅读使用说明书,使用生成客户端代码调用服务器
第三部:获取指定电话号码的归属地信息,代码如下
在这里插入图片描述

案例二:天气查询WEB服务
天气Web服务 http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

第一步:wsimport生成客户端代码
wsimport -p com.gyf.weather.ws -s . http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
使用上面的命令时会出现失败,出现『则很可能需要更改 ‘s:schema’ 的前缀』错误
在这里插入图片描述
解决办法是,将wsdl另存为一个xml文件,然后打开文件,把s:schema内容删除
在这里插入图片描述
是把整个s:element标签删除
在终端执行下面命令wsimport -p com.gyf.weather.ws -s . +xml文件路径
如果是window,路径写 file://c:/…
如果是linux/mac 直接写 根路径/…
第二步:阅读使用说明书,使用生成客户端代码调用服务端
首先查看看服务视图查看各个服务端点
在这里插入图片描述
然后根据提供的服务端点来查看服务的描述
在这里插入图片描述
最后通过服务端点来选择相应的方法
在这里插入图片描述

第三步: 根据城市获取天气信息在这里插入图片描述
随便填的号码
在这里插入图片描述

一、第三种:HTTPURLConnection方式(重要

案例:手机号码归属地查询WEB服务
根据http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo说明的soap1.1请求格式来实现即可
使用java.net.HttpURLConnection发送POST网络请求

注意事项:1、设置post请求方式时,post一定要大写
				  2、默认HttpURLConnection是没有权限写数据,需要设置setDoOutput(true)
				  

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;

public class Main2 {

    public static void main(String[] args) throws IOException {

        //发布webservice的网络基于soap网络请求
        /*
               HttpURLConnection
         */

        //1、创建URL【访问路径】
        URL url = new URL("http://127.0.0.1:11111/weather");
        //2、创建连接
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        //3、设置请求头
        httpConn.setRequestMethod("POST");
        httpConn.setRequestProperty("content-type","text/xml; charset=utf-8");
        //4、设置请求参数
        httpConn.setDoOutput(true);  //可以写数据
        OutputStream os = httpConn.getOutputStream();
        os.write(parameterStri("广州").getBytes());
        //5、接收服务器响应数据
        InputStream is = httpConn.getInputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = is.read(buf)) != -1){
            //把字节转换成字符串
            System.out.println(new String(buf,0,len,"utf-8"));
        }
        //6、关流
        is.close();
        os.close();
    }

    public static String parameterStri(String cityName){
        return  "<?xml version=\"1.0\" ?>\n" +
                "\t<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
                "\t\t<S:Body>\n" +
                "\t\t\t<ns2:queryWeather xmlns:ns2=\"http://weather.ykd.com/\">\n" +
                "\t\t\t\t<arg0>"+cityName+"</arg0>\n" +
                "\t\t\t</ns2:queryWeather>\n" +
                "\t\t</S:Body>\n" +
                "\t</S:Envelope>";
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41984282/article/details/88393259
今日推荐