编写一个天气客户端调用<webxml>网站的天气服务端应用
<webxml>是一个提供webservice服务端模块应用的网站,用户可以自己编写一个客户端来请求该网站的应用,例如:请求天气预报应用
先做一个测试:打开myeclipse,找到这个图标

并打开,点击这里

切换到wsdl界面
输入网址,点击Go

点击:

这样就可以获取的指定地区的天气情况,可以搜索到县级

现在要写一个客户端,来调用该网站的服务端的天气预报应用模块,然后打印出天气预报的信息
1.创建一个Java工程 weather_client
(1)获取该网站的天气预报应用模块的服务端接口代码,并生成到src目录下
在src目录下打开dos,输入:wsimport -keep http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,回车报错:


解决方法:
在项目下创建一个wsdl文件,weather.wsdl,在浏览器中输入:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,回车,右键查看页面源代码,全部拷贝粘贴到weather.wsdl中
移到文件头部,按住Ctrl+F,输入:<s:element ref="s:schema" />,把所有的下面两行替换成:<s:any minOccurs="2" maxOccurs="2"/>,记住:要全文替换,然后保存文件。

重新回到dos,输入:wsimport -keep weather.wsdl的文件全路径(输入wsimport -keep 然后直接把weather.wsdl文件拖进来即可),按回车,生成服务器端代码:

-------------------------------------------------
编写一个测试类:
package com.lvshitech.webservice.weather_client.test;
import java.util.List;
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;
public class ClientTest {
public static void main(String[] args) {
// 获取ws生产类
WeatherWS weatherWS = new WeatherWS();
// 获取天气接口
WeatherWSSoap weatherWSSoap = weatherWS.getWeatherWSSoap();
// 获取天气,第一个参数:地区,第二参数:可为空
ArrayOfString weather = weatherWSSoap.getWeather("徐闻", null);
// 得到天气List
List<String> weatherList = weather.getString();
// 输出
System.out.println(weatherList);
}
}

得到的是一个k-v字符串,需要进一步解析之后才能显示
用同样的方法也可以得到其他的模块信息,比如获取手机归属地
新建web工程:

在src目录下打开dos,输入:wsimport -keep http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,回车,生成服务端代码
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>获取手机归属地</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<form action="seachPhonenumber" method="post">
请输入手机号码:<input type="text" name="phonenumber"
value="<%=(request.getAttribute("phonenumberRet")==null ? "" : request.getAttribute("phonenumberRet")) %>"/>
<input type="submit" value="搜索"/>
</form>
<h3>查询结果:</h3>
<div>
1. 手机号:<%=(request.getAttribute("phonenumberRet")==null ? "" : request.getAttribute("phonenumberRet")) %>
<br/>
<br/>
2. 归属地:<%=(request.getAttribute("phoneAddr")==null ? "" : request.getAttribute("phoneAddr")) %>
</div>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>seachPhonenumber</servlet-name> <servlet-class>com.lvshitech.phone.client.PhoneSeach</servlet-class> </servlet> <servlet-mapping> <servlet-name>seachPhonenumber</servlet-name> <url-pattern>/seachPhonenumber</url-pattern> </servlet-mapping> </web-app>
PhoneSeach.java
package com.lvshitech.phone.client;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.com.webxml.MobileCodeWS;
import cn.com.webxml.MobileCodeWSSoap;
@SuppressWarnings("serial")
public class PhoneSeach extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取前台手机号
String phonenumber = req.getParameter("phonenumber");
// 获取手机信息
String phoneInfo = getPhoneInfo(phonenumber);
int index = phoneInfo.indexOf(":");
String phonenumberRet = phoneInfo.substring(0, index);
String phoneAddr = phoneInfo.substring(index+1, phoneInfo.length());
// 返回信息
req.setAttribute("phonenumberRet", phonenumberRet);
req.setAttribute("phoneAddr", phoneAddr);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
public static String getPhoneInfo(String phonenumber) {
// 获取生产类
MobileCodeWS mobileCodeWS = new MobileCodeWS();
// 获取手机信息模块接口
MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getMobileCodeWSSoap();
// 获取指定号码归属地信息
String mobileCodeInfo = mobileCodeWSSoap.getMobileCodeInfo(phonenumber, null);
// 返回手机信息
return mobileCodeInfo;
}
/*public static void main(String[] args) {
String str = "15989622055:广东 湛江 广东移动全球通卡";
int index = str.indexOf(":");
String phonenumberRet = str.substring(0, index);
String phoneAddr = str.substring(index+1, str.length());
System.out.println(phonenumberRet);
System.out.println(phoneAddr);
}*/
}
执行:


浙公网安备 33010602011771号