Java HTTP方式请求.NET WebService服务总结

本文介绍了一种通过HTTP请求的方式调用外部.NET WebService接口的方法,并提供了完整的Java代码示例,包括GET和POST请求方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近,项目中用到WebService,需要调用外部Web服务(.NET)接口进行相关操作,于是简单了解了一下Java的WebService,感觉很是繁琐,由于时间关系,最后采用了HTTP请求的方式调用WebService。现在总结一下,以备今后使用,同时希望对有需要的朋友有所帮助。

代码如下:

 

package com.project.ws;

import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

/**
 * @date 2013-01-17
 * @author Administrator
 * @category 远程访问WebService获取数据并转化返回为XML
 */
public class WSClient {

	private static final String SERVICE_HOST = "http://100.100.100.1";
	private static final String SERVICE_URL = "http://100.100.100.1:8080/Test.asmx/GetData";// WebService访问路径头部分
	private static String serverURL;// 调用WebService完整地址

	static Logger log = Logger.getLogger(WSClient.class.getClass());// 日志记录对象

	/**
	 * 调用WebService服务
	 * @param requestMethod:请求方式:GET 或 POST
	 * @param paramString:请求参数
	 * @return Document DOM 对象
	 */
	public static Document callServiceForDoc(String requestMethod,String paramString) {
		InputStream inputStream = null;
		Document document = null;
		URL url = null;
		HttpURLConnection urlConn = null;
		DocumentBuilderFactory documentBuilderFactory = null;
		DocumentBuilder documentBuilder = null;
		
		try {
			documentBuilderFactory = DocumentBuilderFactory.newInstance();
			documentBuilderFactory.setNamespaceAware(true);
			documentBuilder = documentBuilderFactory.newDocumentBuilder();
			if ("GET".equalsIgnoreCase(requestMethod)) {// GET方式
				serverURL = SERVICE_URL + "?" + paramString;
				log.error("【请求WebService地址:" + serverURL + ",请求方式:" + requestMethod.toUpperCase() + "】");
				url = new URL(serverURL);
				urlConn = (HttpURLConnection) url.openConnection();
				urlConn.setRequestMethod("GET");
				urlConn.setRequestProperty("Host", SERVICE_HOST);
				urlConn.setConnectTimeout(10000);// (单位:毫秒)
				urlConn.setReadTimeout(10000);// (单位:毫秒)
				urlConn.connect();
				inputStream = urlConn.getInputStream();
				document = documentBuilder.parse(inputStream);
				inputStream.close();
				urlConn.disconnect();
			} else if ("POST".equalsIgnoreCase(requestMethod)) {// POST方式
				log.error("【请求WebService地址:" + serverURL + ",请求方式:" + requestMethod.toUpperCase() + "】");
				url = new URL(serverURL);
				urlConn = (HttpURLConnection) url.openConnection();
				urlConn.setRequestMethod("POST");

				urlConn.setConnectTimeout(10000);// (单位:毫秒)
				urlConn.setReadTimeout(10000);// (单位:毫秒)
				urlConn.setDoOutput(true);
				byte[] byteArray = paramString.getBytes();
				urlConn.getOutputStream().write(byteArray, 0, byteArray.length);
				urlConn.getOutputStream().flush();
				urlConn.getOutputStream().close();
				inputStream = urlConn.getInputStream();
				document = documentBuilder.parse(inputStream);
			} else {
				log.error(">>>>WebService请求方式错误!");
			}
		} catch (ParserConfigurationException e) {
			log.error("请求Webservice异常:解析配置文件异常!" + e.getMessage());
			e.printStackTrace();
			document = null;
		} catch (MalformedURLException e) {
			log.error("请求Webservice异常:URL协议错误!" + e.getMessage());
			e.printStackTrace();
			document = null;
		} catch (ConnectException e) {
			log.error("请求WebService连接超时!" + e.getMessage());
			e.printStackTrace();
			document = null;
		} catch (SocketTimeoutException e) {
			log.error("请求WebService连接超时!" + e.getMessage());
			e.printStackTrace();
			document = null;
		} catch (IOException e) {
			if (urlConn != null) {
				try {
					int errorCode = urlConn.getResponseCode();
					String errorMessage = "请求Webservice异常!服务器返回状态码:";
					switch (errorCode) {
					case 400:
						log.error(errorMessage + "400,错误的请求!");
						break;
					case 403:
						log.error(errorMessage + "403,服务器拒绝访问!");
						break;
					case 404:
						log.error(errorMessage + "404,请求地址不存在!");
						break;
					case 500:
						log.error(errorMessage + "500,WebService服务器内部错误!");
						break;
					case 503:
						log.error(errorMessage + "503,WebService服务不可用!");
						break;
					default:
						log.error(errorMessage + errorCode);
						break;
					}
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			document = null;
		} catch (SAXException e) {
			log.error("请求Webservice异常:SAXException!" + e.getMessage());
			e.printStackTrace();
			document = null;
		}finally{
			inputStream.close();
			urlConn.disconnect();
		}
		return document;
	}
}

 PS:如果paramString参数包含中文,请注意对参数进行编码(java.net.URLEncoder.encode(paramString,"UTF-8");)。

转载于:https://my.oschina.net/4k9LCGA/blog/108675

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值