您的位置:首页 > 理论基础 > 计算机网络

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

2013-02-17 16:06 453 查看
最近,项目中用到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");)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HTTP .NET WebService