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;
 }
}

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐