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

Java HTTP方式请求ASP.NET(C#)WebService

2013-12-09 09:27 567 查看
package com.ideamov.wap.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
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 javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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

import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

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

public static final String SERVICE_HOST = "http://127.0.0.1:8090";//目标主机地址
public static final String SERVICE_URL = "http://127.0.0.1:8090/TestService.asmx/";//WebService访问地址
/**
* 连接超时时间(单位:毫秒)
*/
public static final int TIMEOUT = 20000;
private static String serverURL;//调用WebService完整地址

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

/**
* 调用WebService服务
* @param requestMethod:请求方式:GET 或 POST
* @param getDataKeyStr:WebService中的方法名称
* @param paramString: 过滤数据条件
* @return Document DOM对象
*/
public static Document callServiceForDoc(String requestMethod,String functionName,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+functionName+"?"+paramString;
log.error("【请求WebService地址:"+serverURL+",请求方式:"+requestMethod.toUpperCase()+",请求参数:"+paramString+"】");
url = new URL(serverURL);
urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestMethod("GET");
urlConn.setRequestProperty("Host", SERVICE_HOST);
urlConn.setConnectTimeout(TIMEOUT);//(单位:毫秒)
urlConn.setReadTimeout(TIMEOUT);//(单位:毫秒)
urlConn.connect();
inputStream = urlConn.getInputStream();
document = documentBuilder.parse(inputStream);
inputStream.close();
urlConn.disconnect();
}else if("POST".equalsIgnoreCase(requestMethod)){//POST方式
serverURL = SERVICE_URL+functionName;
log.error("【请求WebService地址:"+serverURL+",请求方式:"+requestMethod.toUpperCase()+",请求参数:"+paramString+"】");
url = new URL(serverURL);
urlConn = (HttpURLConnection)url.openConnection();
urlConn.setRequestMethod("POST");
//urlConn.setRequestProperty("Content-type", "text/XML; charset=utf-8");

urlConn.setConnectTimeout(TIMEOUT);//(单位:毫秒)
urlConn.setReadTimeout(TIMEOUT);//(单位:毫秒)
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);
inputStream.close();
urlConn.disconnect();
}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;
}
docToString(document);//输出返回的XML
return document;
}

/**
* org.w3c.dom.Document 转换为 String
*
* @param org.w3c.dom.Document对象
* @return String
*/
public static String docToString(Document doc) {
String docStr = "";
if(doc!=null){
try{
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty("encoding", "UTF-8");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
transformer.transform(new DOMSource(doc), new StreamResult(outputStream));
//docStr = outputStream.toString();
docStr = outputStream.toString("UTF-8");
log.error("\n**********************     【org.w3c.dom.Document对象转XML字符串内容:】       **********************\n"+docStr);
}catch(Exception e){
log.error("org.w3c.dom.Document对象转XML字符串发生异常!异常原因:"+e.getMessage());
e.printStackTrace();
}
}
return docStr;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐