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; } }
相关文章推荐
- asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- 一个封装好的Asp.Net C# HttpRequest请求类
- iphone之通过get和post方式请求asp.net webservice
- C# 以 HTTP/SSL(双向) 方式请求 Java Jersey 发布的 Restful 资源与TCPSocket客户端
- iOS开发之iPhone通过get和post方式请求asp.net webservice
- iOS开发之iPhone通过get和post方式请求asp.net webservice
- 使用C#创建webservice及三种调用方式 (ASP.NETweb编程常用到的27个函数集)
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- ASP.NET 使用Get方式请求WebService,并得到DataSet结果
- Java HttpClient 4.3.1 访问ASP.NET WebService
- 基于java 使用http-post方式请求https webservice接口
- 解决Fiddler无法捕获本地HttpWebRequest(C#.net)请求和HttpURLConnection(Java)请求
- .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
- iOS开发之iPhone通过get和post方式请求asp.net webservice
- iOS iPhone通过get和post方式请求asp.net webservice
- iOS开发之iPhone通过get和post方式请求asp.net webservice
- iOS开发之iPhone通过get和post方式请求asp.net webservice
- Java HTTP方式请求.NET WebService服务总结
- java 其他平台 请求 访问 asp.net webservice 返回 500 服务器错误