JAVA 调用Web Service实例

下载安装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;
}
复制代码

原文 

https://juejin.im/post/5eed85a051882565df1fe157

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » JAVA 调用Web Service实例

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址