Java HTTP方式请求.NET WebService服务总结
2013-02-17 16:06
453 查看
最近,项目中用到WebService,需要调用外部Web服务(.NET)接口进行相关操作,于是简单了解了一下Java的WebService,感觉很是繁琐,由于时间关系,最后采用了HTTP请求的方式调用WebService。现在总结一下,以备今后使用,同时希望对有需要的朋友有所帮助。
代码如下:
PS:如果paramString参数包含中文,请注意对参数进行编码(java.net.URLEncoder.encode(paramString,"UTF-8");)。
代码如下:
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");)。
相关文章推荐
- Java HTTP方式请求ASP.NET(C#)WebService
- 基于java 使用http-post方式请求https webservice接口
- Java调用.NET webservice方法的几种方式
- 解决:Java调用.net的webService产生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误
- mark java发起http请求的方式
- java发送post和get请求(1)---HttpClient 方式
- 提供webService服务的框架的各种配置方式总结
- Java 以post请求方式通过json格式调用Webservice接口
- 通过URL的方式请求WebService服务
- Java调用.Net WebService 发生异常:服务器未能识别 HTTP 头 SOAPAction 的值
- java发送http get请求的两种方式
- Java调用.NET webservice方法的几种方式
- java调用.NET的webservice实例的二种方法soap方式axis模式
- java发送http get请求的两种方式
- [z]Java调用.NET webservice方法的几种方式
- [厉害了,我的JAVA基础](八)HTTP请求的GET与POST方式的区别
- 并发编程学习总结(一) :java 创建线程的三种方式的优缺点和实例(转载自:http://blog.csdn.net/u011784767/article/details/51315007)
- Java调用.Net写的WebService报异常:服务器未能识别 HTTP 头 SOAPAction 的值
- java中httpclent以post方式提交请求时,http返回码是302重定向时,不自动跳转的处理
- JAVA调用.NET的webservice异常服务器未能识别 HTTP头SOAPAction 的值