通过原生的java Http请求soap发布接口
Posted 知行IT讲堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过原生的java Http请求soap发布接口相关的知识,希望对你有一定的参考价值。
package com.aiait.ivs.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.log4j.Logger; public class HttpUtil { private static final Logger logger = Logger.getLogger(HttpUtil.class); //请求soap接口用这个方法 public static String soapPostSendXml(String SOAPUrl,String parXmlInfo){ StringBuilder result = new StringBuilder(); try { String SOAPAction = "submitMs"; // Create the connection where we‘re going to send the file. URL url = new URL(SOAPUrl); URLConnection connection = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) connection; // how big it is so that we can set the HTTP Cotent-Length // property. (See complete e-mail below for more on this.) // byte[] b = bout.toByteArray(); byte[] b = parXmlInfo.getBytes("ISO-8859-1"); // Set the appropriate HTTP parameters. httpConn.setRequestProperty( "Content-Length",String.valueOf( b.length ) ); httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8"); httpConn.setRequestProperty("SOAPAction",SOAPAction); httpConn.setRequestMethod( "POST" ); httpConn.setDoOutput(true); httpConn.setDoInput(true); // Everything‘s set up; send the XML that was read in to b. OutputStream out = httpConn.getOutputStream(); out.write( b ); out.close(); // Read the response and write it to standard out. InputStreamReader isr =new InputStreamReader(httpConn.getInputStream()); BufferedReader in = new BufferedReader(isr); String inputLine; while ((inputLine = in.readLine()) != null) result.append(inputLine); in.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } logger.info("\n soap respone \n"+result); return result.toString(); } public static String readTxtFile(String filePath){ StringBuilder result = new StringBuilder(); try { String encoding="GBK"; File file=new File(filePath); if(file.isFile() && file.exists()){ //判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file),encoding);//考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt=null; while((lineTxt = bufferedReader.readLine()) != null){ result.append(lineTxt); System.out.println(lineTxt); } read.close(); }else{ System.out.println("找不到指定的文件"); } } catch (Exception e) { System.out.println("读取文件内容出错"); e.printStackTrace(); } return result.toString(); } /** * http post请求 * @param url 地址 * @param postContent post内容格式为param1=value?m2=value2?m3=value3 * @return * @throws IOException */ public static String httpPostRequest(URL url, String postContent) throws Exception{ OutputStream outputstream = null; BufferedReader in = null; try { URLConnection httpurlconnection = url.openConnection(); httpurlconnection.setConnectTimeout(10 * 1000); httpurlconnection.setDoOutput(true); httpurlconnection.setUseCaches(false); OutputStreamWriter out = new OutputStreamWriter(httpurlconnection .getOutputStream(), "UTF-8"); out.write(postContent); out.flush(); StringBuffer result = new StringBuffer(); in = new BufferedReader(new InputStreamReader(httpurlconnection .getInputStream(),"UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); } return result.toString(); } catch(Exception ex){ logger.error("post请求异常:" + ex.getMessage()); throw new Exception("post请求异常:" + ex.getMessage()); } finally { if (outputstream != null) { try { outputstream.close(); } catch (IOException e) { outputstream = null; } } if (in != null) { try { in.close(); } catch (IOException e) { in = null; } } } } /** * 通过httpClient进行post提交 * @param url 提交url地址 * @param charset 字符集 * @param keys 参数名 * @param values 参数值 * @return * @throws Exception */ public static String HttpClientPost(String url , String charset , String[] keys , String[] values) throws Exception{ HttpClient client = null; PostMethod post = null; String result = ""; int status = 200; try { client = new HttpClient(); //PostMethod对象用于存放地址 //总账户的测试方法 post = new PostMethod(url); //NameValuePair数组对象用于传入参数 post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=" + charset);//在头文件中设置转码 String key = ""; String value = ""; NameValuePair temp = null; NameValuePair[] params = new NameValuePair[keys.length]; for (int i = 0; i < keys.length; i++) { key = (String)keys[i]; value = (String)values[i]; temp = new NameValuePair(key , value); params[i] = temp; temp = null; } post.setRequestBody(params); //执行的状态 status = client.executeMethod(post); logger.info("status = " + status); if(status == 200){ result = post.getResponseBodyAsString(); } } catch (Exception ex) { // TODO: handle exception throw new Exception("通过httpClient进行post提交异常:" + ex.getMessage() + " status = " + status); } finally{ post.releaseConnection(); } return result; } /** * 字符串处理,如果输入字符串为null则返回"",否则返回本字符串去前后空格。 * @param inputStr 输入字符串 * @return string 输出字符串 */ public static String doString(String inputStr){ //如果为null返回"" if(inputStr == null || "".equals(inputStr) || "null".equals(inputStr)){ return ""; } //否则返回本字符串把前后空格去掉 return inputStr.trim(); } /** * 对象处理,如果输入对象为null返回"",否则则返回本字符对象信息,去掉前后空格 * @param object * @return */ public static String doString(Object object){ //如果为null返回"" if(object == null || "null".equals(object) || "".equals(object)){ return ""; } //否则返回本字符串把前后空格去掉 return object.toString().trim(); } }
请求的XML 案例如下
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eapp="http://www.gmw9.com"> <soapenv:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" mustUnderstand="0"> <wsse:UsernameToken> <wsse:Username>amtf</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">aaa</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <eapp:nmamtf> <eapp:amtf>041</eapp:amtf> <eapp:dzwps>77771</eapp:amtf> </eapp:nmamtf> </soapenv:Body> </soapenv:Envelope>
以上是关于通过原生的java Http请求soap发布接口的主要内容,如果未能解决你的问题,请参考以下文章