通过原生的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发布接口的主要内容,如果未能解决你的问题,请参考以下文章

soapUI工具使用方法简介接口测试

jmeter发送soap请求

Java通过webservice接口获取天气信息

怎么把一个java对象转换成soap

通过 Java/SOAP 的亚马逊产品广告 API

web service接口 wsdl和asmx有啥区别