源码
源码已上传到github
一、根据wsdl生成jave类
1.1 java环境配置
下载安装java,并将jdk和jre配置到系统环境变量中。(java 1.8, tomcat 7.0)
因为要使用wsimport
命令,所以建议使用JAVA_HOME
和CLASS_PATH
的方式配置,以确保wsimport
命令全局访问
1.2 获取wsdl文件
使用 Web服务地址 选择需要的web服务类型
以天气服务为例:天气服务wsdl文档地址
右键另存为到本地,修改wsdl文档的部分内容:将 <s:element ref="s:schema" /><s:any />
替换成 <s:any minOccurs="2" maxOccurs="2"/>
,此文档一共有三处修改,不要遗漏。
使用wsimport
命令生成jave类
wsimport -keep -d .class文件的输出目录 -s .java文件的输出目录 wsdl文档位置
运行后,在指定的输出目录可以看到生成的java文件
以上方法是针对wsdl文档由.net开发的文档,需要修改其内容,再生成java文件,对于非.net开发的,例如手机归属地查询,可以直接使用网络地址生成java文件:
wsimport -keep -d .class文件的输出目录 -s .java文件的输出目录 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
利用文件生成java文件的方式,切记不要删除.wsdl文件或更改位置,因为.wsdl文件的位置会写到java文件中,如果找不到.wsdl文件会编译不通过。
二、调用Web Service接口
在eclipse中新建web项目,并配置Tomcat服务,将第一步的java文件拷贝到项目的src
目录中。
在src
目录中新建自己的类,代码如下:
package demo;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;
@WebServlet(name = "ToolServlet", urlPatterns = "/Tool.do")
public class Select extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String func = request.getParameter("func");
String str = request.getParameter("str");
switch(func){
case "weather" :
response.getWriter().write(weather(str));
break;
}
}
public String weather(String str) {
WeatherWS factory = new WeatherWS(); // 创建一个WeatherWS工厂
WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap(); // 根据工厂创建一个WeatherWSSoap对象
ArrayOfString weatherInfo = weatherWSSoap.getWeather(str, null); // 调用WebService提供的getWeather方法
List<String> lstWeatherInfo = weatherInfo.getString();
String weather_str = lstWeatherInfo.get(4); // 返回天气信息中的某一条
return weather_str;
}
}
前端jsp页面,js代码入下:
<script type="text/javascript"> ... function f_weather(){ s_weather = document.getElementById("weather").value; t_code = document.getElementById("t-code").value; if (y_code == t_code){ $.ajax({ url:"<%=application.getContextPath()%>/Tool.do", data:{ "func":"weather", "str":s_weather }, Type:"post", success:function(res){ document.getElementById('r-main').innerHTML = res; }, error:function(err){ alert(err); } }) }else{ alert("验证码不正确"); } } </script>
注:调用Web Service接口时遇到的一些问题。
jsp页面与java类之间传递中文参数时候会乱码
(1)在eclipse中设置项目编码为UTF-8
,参考eclipse设置编码格式为utf-8
(2)在server.xml
中配置编码格式,添加URIEncoding="UTF-8"
;
<Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
(3)在java类中返回数据之前,添加response.setContentType("text/html;charset=UTF-8");
调用Web Service接口提供的方法时,报错未将参数对象实例化
比如查询火车信息的Web Service接口,将方法的第二个参数null
改为空字符串
public String train(String str) {
TrainTimeWebService factory = new TrainTimeWebService();
TrainTimeWebServiceSoap trainTimeWebServiceSoap = factory.getTrainTimeWebServiceSoap();
//ArrayOfString trainInfo = trainTimeWebServiceSoap.getStationAndTimeByTrainCode(str, null);
ArrayOfString trainInfo = trainTimeWebServiceSoap.getStationAndTimeByTrainCode(str, "");
List<String> lsttrainInfo = trainInfo.getString();
return res;
}
今天的文章JAVA 调用Web Service实例分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/19686.html