//
//package com.eactive.eai.adapter.http; 
//
//import java.net.ConnectException;
//import java.net.SocketTimeoutException;
//import java.util.Properties;
//import org.apache.commons.httpclient.HttpClient;
//import org.apache.commons.httpclient.HttpMethod;
//import org.apache.commons.httpclient.HttpMethodRetryHandler;
//import org.apache.commons.httpclient.HttpStatus;
//import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
//import org.apache.commons.httpclient.NoHttpResponseException;
//import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
//import org.apache.commons.httpclient.methods.GetMethod;
//import org.apache.commons.httpclient.methods.PostMethod;
//import org.apache.commons.httpclient.params.HttpClientParams;
//import org.apache.commons.httpclient.params.HttpMethodParams;
//
//import com.eactive.eai.adapter.WLIDefaultAdapter;
//import com.eactive.eai.common.errorcode.ErrorCodeHandler;
//import com.eactive.eai.common.exception.ExceptionUtil;
//import com.eactive.eai.common.property.PropManager;
//import com.eactive.eai.common.util.Logger;
//
//
///** 
//* 1. 기능 : EAI HTTP OutBound 용 어댑터로 수동 시스템의 HTTP 웹 컴포넌트를 
//*           GET/POST 방식으로 호출할 수 있는 기능을 제공한다.
//* 2. 처리 개요 : 
//* *     - 2009.11.24 retry 로직 제거  : 강길수차장요청
//* 3. 주의사항 
//*
//* @author  : 
//* @version : v 1.0.0
//* @see : WLIAdapterFactory.java, WLIAdapter.java, WLIDefaultAdapter.java
//* @since   : 
//
//*/
//public class HttpClientAdapter extends WLIDefaultAdapter
//{ 
//    public static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
//    
//    public static final String URL = "URL";
//    public static final String METHOD = "METHOD";
//    public static final String PARAMETER_NAME = "PARAMETER_NAME";
//    
//    // encode 추가 : 20071207
//    public static final String ENCODE = "ENCODE";
//    
//    public static final String METHOD_GET = "GET";
//    public static final String METHOD_POST = "POST";
//    
//    //-------------------------------------------------
//    // 전자무역 상태조회 : 
//    // 2009.01.09
//    public static final String METHOD_SOAP = "SOAP";
//    public static final String METHOD_SOAP_ACTION = "SOAPAction";
//    //-------------------------------------------------
//    
//    public static final String HTTP_CONNECTION_STALE_CHECKING_ENABLED = "HTTP_CONNECTION_STALE_CHECKING_ENABLED";
//    /*
//     * 호스트 마다 최대 연결 수
//     */
//    public static final String HTTP_MAX_CONNECTION_PER_HOST = "HTTP_MAX_CONNECTION_PER_HOST";
//    /*
//     * 최대 HTTP 연결 수
//     */
//    public static final String HTTP_MAX_TOTAL_CONNECTIONS = "HTTP_MAX_TOTAL_CONNECTIONS";
//    
//    static final String PARAMETER_MESSAGE = "_message_";
//    
//    private HttpClient client;
//    
//    //  2008.01.21 이동훈
//    // HttpClient 2.0 Timeout Setting
//    public static final String HTTP_TIME_OUT = "HTTP_TIME_OUT";
//    public static final int   DEFAULT_TIME_OUT = 30 *1000;
//    // HttpClient 2.0 Timeout Setting 
//    
//    /** 
//    * 1. 기능 :  HttpClientAdapter default 생성자
//    * 2. 처리 개요 : 
//    *     - property 정보를 가져와 MultiThreadedHttpConnectionManager 속성 설정
//    *     - HttpClient의 instance 생성
//    * 3. 주의사항 
//    *
//    **/
//    public HttpClientAdapter() {
//        MultiThreadedHttpConnectionManager cm = new MultiThreadedHttpConnectionManager();
//        PropManager manager = PropManager.getInstance();
//        String enabled = manager.getProperty(HTTP_CONNECTION_STALE_CHECKING_ENABLED);
//     	
//        if(enabled==null) {
//
//            enabled="true";
//            
//            String code = "RWCEAIAHA006";
//            String msg = ErrorCodeHandler.getMessage(code);
//            if(logger.isWarn()){
//                logger.warn(ExceptionUtil.make(code, msg));
//            }
//        }
//        
//        
//        try {       	  
//        	
//			cm.getParams().setStaleCheckingEnabled(new Boolean(enabled).booleanValue());	
//			
//        } catch(Exception e) {        	
//        	e.printStackTrace();
//            String errCode = ExceptionUtil.getErrorCode(e, "RECEAIAHA007");
//            throw new RuntimeException(errCode);
//        }
//
//        
//        String connPerHost = manager.getProperty(HTTP_MAX_CONNECTION_PER_HOST);
//        
//        if(connPerHost==null) {        	
//            connPerHost = "10";
//            String code = "RWCEAIAHA008";
//            String msg = ErrorCodeHandler.getMessage(code);            
//            if(logger.isWarn()){            	
//                logger.warn(ExceptionUtil.make(code, msg));
//            }
//        }
//       
//        
//        try {
//            //cm.setMaxConnectionsPerHost(new Integer(connPerHost).intValue());
//        	cm.getParams().setDefaultMaxConnectionsPerHost(new Integer(connPerHost).intValue());
//        } catch(Exception e) {
//            String errCode = ExceptionUtil.getErrorCode(e, "RECEAIAHA009");
//            throw new RuntimeException(errCode);
//        }
//        
//        
//        String totalConnections = manager.getProperty(HTTP_MAX_TOTAL_CONNECTIONS);
//        if(totalConnections==null) {
//            totalConnections = "50";
//            String code = "RWCEAIAHA010";
//            String msg = ErrorCodeHandler.getMessage(code);
//            if(logger.isWarn()){
//                logger.warn(ExceptionUtil.make(code, msg));
//            }
//        }
//     
//        
//        try {
//            //cm.setMaxTotalConnections(new Integer(totalConnections).intValue());
//            cm.getParams().setMaxTotalConnections(new Integer(totalConnections).intValue());
//        } catch(Exception e) {
//            String errCode = ExceptionUtil.getErrorCode(e, "RECEAIAHA011");
//            throw new RuntimeException(errCode);
//        }
//        
//        this.client = new HttpClient(cm);
//        
//        
//    }
//    
//    /** 
//    * 1. 기능 :  현재 사용중인 Connection 수
//    * 2. 처리 개요 : 
//    *     - 
//    * 3. 주의사항 
//    *
//    * @return int 사용중인 Connection 수
//    **/
//    public int getConnectionsInPool() {
//        MultiThreadedHttpConnectionManager mgr = (MultiThreadedHttpConnectionManager)this.client.getHttpConnectionManager();
//        return mgr.getConnectionsInPool();
//    }
//    
//    /** 
//    * 1. 기능 :  생성된 총 Connection 수
//    * 2. 처리 개요 : 
//    *     - 
//    * 3. 주의사항 
//    *
//    * @return int 총 Connection 수
//    **/
//    public int getMaxTotalConnections() {
//        MultiThreadedHttpConnectionManager mgr = (MultiThreadedHttpConnectionManager)this.client.getHttpConnectionManager();
//        return mgr.getParams().getMaxTotalConnections();
//    }
//    
//    /** 
//    * 1. 기능 :  호스트 당 할당된 총 Connection 수
//    * 2. 처리 개요 : 
//    *     - 
//    * 3. 주의사항 
//    *
//    * @return int 총 Connection 수
//    **/
//    public int getMaxConnectionsPerHost() {
//        MultiThreadedHttpConnectionManager mgr = (MultiThreadedHttpConnectionManager)this.client.getHttpConnectionManager();
//        return mgr.getParams().getDefaultMaxConnectionsPerHost();
//    }
//    
//    /** 
//    * 1. 기능 :  전문과 같은 Raw Data 통신에 사용
//    * 2. 처리 개요 : 
//    *     - 속성 정보를 설정 하고 수동 시스템 서비스를 호출 한다.
//    * 3. 주의사항 
//    *
//    * @param    prop    Http Adapter 속성 정보
//    * @param    message 송신 전문
//    * @return   반환 된 byte[] Object
//    * @exception    Exception 수동 시스템 간 통신 중 발생
//    **/
//    public Object execute(Properties prop, Object message) throws Exception
//    {
//     
//    	byte[] data = null;
//        if(message instanceof byte[]) {
//            data = (byte[])message;
//        } else if( message instanceof String) {
//            data = ((String)message).getBytes();
//        } else {
//            throw new Exception("RECEAIAHA011");
//        }
//        String url = prop.getProperty(URL);
//        String parameterName = prop.getProperty(PARAMETER_NAME);
//        String httpMethod = prop.getProperty(METHOD);
//        String encode = prop.getProperty(ENCODE);
//        String httpTimeOut = prop.getProperty(HTTP_TIME_OUT);
//        
//        String soapAction = prop.getProperty(METHOD_SOAP_ACTION);
//        
//        //-------------------------------------------
//        // trim 처리 : 2009.03.27
//        //-------------------------------------------
//        if(url != null) {
//        	url = url.trim();
//        }
//        
//        if(parameterName != null) {
//        	parameterName = parameterName.trim();
//        }
//        
//        if(httpMethod != null) {
//        	httpMethod = httpMethod.trim();
//        }
//        
//        if(encode != null) {
//        	encode = encode.trim();
//        }
//        
//        if(soapAction != null) {
//        	soapAction = soapAction.trim();
//        }
//        
//        //----------------------------------
//        // 2008.02.15 이동훈
//        // 설정값이 없을 경우 무한대로 기다리도록 
//        // 0 으로 설정하도록 함 
//        //----------------------------------
//        if(httpTimeOut == null) {
//            httpTimeOut = "0";
//        }
//        else {
//        	httpTimeOut = httpTimeOut.trim();
//        }
//
//        int timeout = -1;
//        try {
//        	timeout = new Integer(httpTimeOut).intValue();
//            if(logger.isDebug()){
//                logger.debug("HttpClientAdapter] HTTP TIMEOUT SET ["+httpTimeOut+"]");
//            }
//        } catch(Exception e) {
//        	if(logger.isWarn()){
//                logger.warn("HttpClientAdapter] HTTP TIMEOUT 설정값을 확인하세요. ["+httpTimeOut+"]");
//            }
//        }
//        
//        
//        if(logger.isDebug()){
//            logger.debug("HttpClientAdapter] Send("+httpMethod+") Data ["+new String(data)+"]");
//        }
//        
//        if(httpMethod!=null && httpMethod.equals(METHOD_POST)) {
//            return callPostService(url, parameterName, data, encode, timeout);
//        } 
//        else if(httpMethod!=null && httpMethod.equals(METHOD_SOAP)) {
//            return callSoapService(url, soapAction, data, encode, timeout);
//        }
//        else if(httpMethod!=null && httpMethod.equals("MEMO")) {
//            return callMemoService(url, data, encode, timeout);
//        }
//        else if(httpMethod!=null && httpMethod.equals("ANN")) {
//        	return callAnnounceService(url, data, encode, timeout);
//        }
//        else if(httpMethod!=null && httpMethod.equals("POPUP")) {
//        	return callPopupService(url, data, encode, timeout);
//        }
//        else if(httpMethod!=null && httpMethod.equals("CDSVC")) {
//        	return callChangeDateService(url, data, encode, timeout);
//        }
//        else {
//            return callGetService(url, parameterName, data, encode, timeout);
//        }        
//    }
//    
//    /** 
//    * 1. 기능 :  수동 시스템에 Post 방식으로 서비스 호출
//    * 2. 처리 개요 : 
//    *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//    * 3. 주의사항 
//    *
//    * @param    url 수동 시스템 웹 컴포넌트 URL
//    * @param    parameterName   URL 파리미터 이름
//    * @param    data    송신 전문
//    * @return   반환 된 byte[] Object
//    * @exception    Exception 수동 시스템 간 통신 중 발생
//    **/
//    private byte[] callPostService(String url, String parameterName, byte[] data, String encode, int timeout)
//    throws Exception {
//        PostMethod method = new PostMethod(url);
//
//        //2008.02.15 : Timeout 처리로직 변경 (0 : 무한대 설정가능하게 함)
//        if(timeout > -1) {
//        	method.getParams().setSoTimeout(timeout);
//        }
//        
//        //method.setRequestHeader("Content-Type","text/html; charset=euc-kr");
//        
//        String sendData = null;
//        HttpClient mclient = new HttpClient(new MultiThreadedHttpConnectionManager());
//    	
//        if(encode != null && encode.length() > 0) {
//            
//            if(logger.isDebug()){
//                logger.debug("HttpClientAdapter] ENCODE("+encode+") ");
//            }
//            
//            try {
//            	mclient.getParams().setContentCharset(encode);
//            	sendData = new String(data,encode);                    
//            } catch(Exception e) {
//                if(logger.isError()){
//                    logger.error("HttpClientAdapter] ENCODE("+encode+") ERROR : "+ e.toString());
//                    logger.error("HttpClientAdapter] ENCODE("+encode+") SKIP ");
//                }
//                sendData = new String(data); 
//            }
//        }
//        else {
//            //신용보증기금에 필요 분기 - 조현덕 추가(2008.11.04)
//        	if(parameterName.equals("SHINBO")){
//                ;
//        	}else{    
//        		sendData = java.net.URLEncoder.encode(new String(data));
//            }
//        }
//
//
//        if(parameterName==null || parameterName.equals("")) {
//            method.addParameter(PARAMETER_MESSAGE, sendData);
//        
//        //신용보증기금에 필요 분기 - 조현덕 추가(2008.05.06)
//        } else if(parameterName.equals("SHINBO")){
//            method.setRequestBody(sendData);
//        } else {
//            method.addParameter(parameterName, sendData);
//        }
//        
//        
//        int status = -1;
//        
//        
//        try {
//            status = mclient.executeMethod(method);
//            //----------------------------------------------------------
//            // 2008.01.23 : 응답이 깨지는 것 수정
//            //----------------------------------------------------------
//            //String responseMessage = method.getResponseBodyAsString();
//            String responseMessage = new String(method.getResponseBody());
//            //----------------------------------------------------------
//            
//            return responseMessage.getBytes();
//            
//        } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//            ste.printStackTrace();
//            System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//            throw ste;
//        } catch(ConnectException ce) {
//            ce.printStackTrace();
//            System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//            throw ce;
//        } catch(Exception e) {
//            e.printStackTrace();
//            throw e;
//        } finally {
//            method.releaseConnection();
//            if(status != HttpStatus.SC_OK) {
//                String[] msgArgs = new String[1];
//                msgArgs[0] = String.valueOf(status);
//                String resMsg = ExceptionUtil.make("RDCEAIAHA013", msgArgs);
//                if(logger.isDebug()){
//                    logger.debug(resMsg);
//                }
//            }
//        }
//    }
//    
//    /** 
//    * 1. 기능 :  수동 시스템에 Get 방식으로 서비스 호출
//    * 2. 처리 개요 : 
//    *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//    * 3. 주의사항 
//    *
//    * @param    url 수동 시스템 웹 컴포넌트 URL
//    * @param    parameterName   URL 파리미터 이름
//    * @param    data    송신 전문
//    * @return   반환 된 byte[] Object
//    * @exception    Exception 수동 시스템 간 통신 중 발생
//    **/
//    private byte[] callGetService(String url, String parameterName, byte[] data, String encode, int timeout)
//    throws Exception {
//        GetMethod method = new GetMethod(url);
//
//        //2008.02.15 : Timeout 처리로직 변경 (0 : 무한대 설정가능하게 함)
//        if(timeout > -1) {
//        	method.getParams().setSoTimeout(timeout);
//        }
//        
//        String sendData = null;
//        
//        if(logger.isDebug()){
//            logger.debug("HttpClientAdapter] GET Method URLEncoder");
//        }
//        sendData = java.net.URLEncoder.encode(new String(data));
//        
//        /*
//        if(encode != null && encode.length() > 0) {
//            if(logger.isDebug()){
//                logger.debug("HttpClientAdapter] ENCODE("+encode+") ");
//            }
//            
//            try {
//                sendData = new String(data, encode);
//            } catch(Exception e) {
//                if(logger.isError()){
//                    logger.error("HttpClientAdapter] ENCODE("+encode+") ERROR : "+ e.toString());
//                    logger.error("HttpClientAdapter] ENCODE("+encode+") SKIP ");
//                }
//                sendData = new String(data);
//            }
//        }
//        else {
//            sendData = new String(data);
//        	
//        }
//        */
//        
//        method.setQueryString(parameterName+"=" + sendData);
//        
//        int status = -1;
//        try {
//            status = client.executeMethod(method);
//            //----------------------------------------------------------
//            // 2008.01.23 : 응답이 깨지는 것 수정
//            //----------------------------------------------------------
//            //String responseMessage = method.getResponseBodyAsString();
//            String responseMessage = new String(method.getResponseBody());
//            //----------------------------------------------------------
//            return responseMessage.getBytes(); 
//        } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//            ste.printStackTrace();
//            System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//            throw ste;
//        } catch(ConnectException ce) {
//            ce.printStackTrace();
//            System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//            throw ce;
//        } catch(Exception e) {
//            e.printStackTrace();
//            throw e;
//        } finally {
//            method.releaseConnection();
//            if(status!=HttpStatus.SC_OK) {
//                String[] msgArgs = new String[1];
//                msgArgs[0] = String.valueOf(status);
//                String resMsg = ExceptionUtil.make("RDCEAIAHA014", msgArgs);
//                if(logger.isDebug()){
//                    logger.debug(resMsg);
//                }
//            }
//        }  
//    }
//    
//    /** 
//     * 1. 기능 :  수동 시스템에 SOAP 방식으로 서비스 호출
//     * 2. 처리 개요 : 
//     *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//     * 3. 주의사항 
//     *
//     * @param    url 수동 시스템 웹 컴포넌트 URL
//     * @param    soapAction   soapAction 이름
//     * @param    data    송신 전문
//     * @return   반환 된 byte[] Object
//     * @exception    Exception 수동 시스템 간 통신 중 발생
//     **/
//     private byte[] callSoapService(String url, String soapAction, byte[] data, String encode, int timeout)
//     throws Exception {
//         PostMethod method = new PostMethod(url);
//
//         if(timeout > -1) {
//         	method.getParams().setSoTimeout(timeout);
//         }
//         
//         ByteArrayRequestEntity entity = new ByteArrayRequestEntity(data);
//         
//         method.setRequestEntity(entity);
//         method.setRequestHeader("SOAPAction", soapAction);
//         
//         int status = -1;
//         
//         
//         try {
//             status = client.executeMethod(method);
//             //----------------------------------------------------------
//             // 2008.01.23 : 응답이 깨지는 것 수정
//             //----------------------------------------------------------
//             //String responseMessage = method.getResponseBodyAsString();
//             String responseMessage = new String(method.getResponseBody());
//             //----------------------------------------------------------
//             
//             return responseMessage.getBytes();
//             
//         } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//             ste.printStackTrace();
//             System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//             throw ste;
//         } catch(ConnectException ce) {
//             ce.printStackTrace();
//             System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//             throw ce;
//         } catch(Exception e) {
//             e.printStackTrace();
//             throw e;
//         } finally {
//             method.releaseConnection();
//             if(status != HttpStatus.SC_OK) {
//                 String[] msgArgs = new String[1];
//                 msgArgs[0] = String.valueOf(status);
//                 String resMsg = ExceptionUtil.make("RDCEAIAHA013", msgArgs);
//                 if(logger.isDebug()){
//                     logger.debug(resMsg);
//                 }
//             }
//         }
//     }
//     
//     /** 
//      * 1. 기능 :  수동 시스템에 Post 방식으로 메신저 연계서비스 호출
//      * 2. 처리 개요 : 
//      *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//      * 3. 주의사항 
//      *
//      * @param    url 수동 시스템 웹 컴포넌트 URL
//      * @param    data    송신 전문
//      * @return   반환 된 byte[] Object
//      * @exception    Exception 수동 시스템 간 통신 중 발생
//      **/
//      private byte[] callMemoService(String url, byte[] data, String encode, int timeout)
//      throws Exception {
//    	  if(logger.isDebug()){
//              logger.debug("HttpClientAdapter] callMemoService called ");
//          }
//    	  
//    	  PostMethod method = new PostMethod(url);
//
//          //2008.02.15 : Timeout 처리로직 변경 (0 : 무한대 설정가능하게 함)
//          if(timeout > -1) {
//          	method.getParams().setSoTimeout(timeout);
//          }
//          
//          // 2009.08.24 강길수차장 요청
//          // MEMO Data Size : 161 Bytes -> 587 (항목 및 길이가 변경됨)
//          int memoMinSize = 587;
//          
//          if(data.length >= memoMinSize) {
//        	  if(encode != null && encode.length() > 0) {
//        		  if(logger.isDebug()){
//                      logger.debug("HttpClientAdapter] callMemoService ENCODE("+encode+") ");
//                  }
//        		  method.addParameter("SRV_CODE",   new String(data,  0,  6, encode) );  
//        		  method.addParameter("SER_TYPE",   new String(data,  6,  1, encode) );  
//		          method.addParameter("RECIPIENT",  new String(data,  7,  7, encode) );  
//		          method.addParameter("SEND",       new String(data, 14,  7, encode) );  
//		          method.addParameter("TITLE",      new String(data, 21, 40, encode) );  
//		          method.addParameter("BODY",       new String(data, 61,500, encode) );  
//		          method.addParameter("URGENT",     new String(data,561,  1, encode) );  
//		          method.addParameter("SAVEOPTION", new String(data,562,  1, encode) );  
//		          method.addParameter("RCV_IP",     new String(data,563, 24, encode) );  
//        	  }
//        	  else {
//        		  method.addParameter("SRV_CODE",   new String(data,  0,  6) );
//        		  method.addParameter("SER_TYPE",   new String(data,  6,  1) );
//		          method.addParameter("RECIPIENT",  new String(data,  7,  7) );
//		          method.addParameter("SEND",       new String(data, 14,  7) );
//		          method.addParameter("TITLE",      new String(data, 21, 40) );
//		          method.addParameter("BODY",       new String(data, 61,500) );
//		          method.addParameter("URGENT",     new String(data,561,  1) );
//		          method.addParameter("SAVEOPTION", new String(data,562,  1) );
//		          method.addParameter("RCV_IP",     new String(data,563, 24) );
//        	  }
//          }
//          else {
//        	  if(logger.isError()){
//                  logger.error("HttpClientAdapter] callMemoService Invalid Data Length (" + data.length + ") < "+memoMinSize);
//              }
//        	  throw new Exception("HttpClientAdapter.callMemoService Error : MessageSize("+(data.length)+" Bytes) too small < "+memoMinSize);
//          }
//          
//          int status = -1;
//          
//          
//          try {
//        	  HttpClient mclient = new HttpClient(new MultiThreadedHttpConnectionManager());
//        	  mclient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
//        	  mclient.getParams().setContentCharset("EUC_KR");
//        	  status = mclient.executeMethod(method);
//              String responseMessage = new String(method.getResponseBody());
//              
//              return responseMessage.getBytes();
//              
//          } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//              ste.printStackTrace();
//              System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//              throw ste;
//          } catch(ConnectException ce) {
//              ce.printStackTrace();
//              System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//              throw ce;
//          } catch(Exception e) {
//              e.printStackTrace();
//              throw e;
//          } finally {
//              method.releaseConnection();
//              if(status != HttpStatus.SC_OK) {
//                  String[] msgArgs = new String[1];
//                  msgArgs[0] = String.valueOf(status);
//                  String resMsg = ExceptionUtil.make("RDCEAIAHA013", msgArgs);
//                  if(logger.isDebug()){
//                      logger.debug(resMsg);
//                  }
//              }
//          }
//      }
//      
//      /** 
//       * 1. 기능 :  수동 시스템에 Post 방식으로 메신저 연계서비스 호출
//       * 2. 처리 개요 : 
//       *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//       * 3. 주의사항 
//       *
//       * @param    url 수동 시스템 웹 컴포넌트 URL
//       * @param    data    송신 전문
//       * @return   반환 된 byte[] Object
//       * @exception    Exception 수동 시스템 간 통신 중 발생
//       **/
//       private byte[] callAnnounceService(String url, byte[] data, String encode, int timeout)
//       throws Exception {
//     	  if(logger.isDebug()){
//               logger.debug("HttpClientAdapter] callAnnounceService called ");
//           }
//     	  
//     	  PostMethod method = new PostMethod(url);
//
//           //2008.02.15 : Timeout 처리로직 변경 (0 : 무한대 설정가능하게 함)
//           if(timeout > -1) {
//           	method.getParams().setSoTimeout(timeout);
//           }
//           
//           // Announce Data Size : 113 Bytes
//           int annMinSize = 113;
//           
//           if(data.length >= annMinSize) {
//         	  if(encode != null && encode.length() > 0) {
//         		  if(logger.isDebug()){
//                       logger.debug("HttpClientAdapter] callAnnounceService ENCODE("+encode+") ");
//                   }
//         		  method.addParameter("SRV_CODE",   new String(data,  0,  6, encode) );
// 		          method.addParameter("RECIPIENT", new String(data,  6,  7, encode) );
// 		          method.addParameter("BODY",       new String(data, 13,100, encode) );
// 		          if(data.length > 153) {
// 		        	  method.addParameter("URL",    new String(data, 113, data.length-annMinSize,encode) );
// 		          }
//         	  }
//         	  else {
//         		  method.addParameter("SRV_CODE",   new String(data,  0,  6) );
// 		          method.addParameter("RECIPIENT", new String(data,  6,  7) );
// 		          method.addParameter("BODY",       new String(data, 13,100) );
// 		         if(data.length > 153) {
//		        	  method.addParameter("URL",    new String(data,113, data.length-annMinSize) );
//		          }
//         	  }
//           }
//           else {
//         	  if(logger.isError()){
//                   logger.error("HttpClientAdapter] callAnnounceService Invalid Data Length (" + data.length + ") < "+annMinSize);
//               }
//         	  throw new Exception("HttpClientAdapter.callAnnounceService Error : MessageSize("+(data.length)+" Bytes) too small < "+annMinSize);
//           }
//           
//           int status = -1;
//           
//           
//           try {
//        	   HttpClient mclient = new HttpClient(new MultiThreadedHttpConnectionManager());
//        	   mclient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
//        	   mclient.getParams().setContentCharset("EUC_KR");
//        	   status = mclient.executeMethod(method);
//               String responseMessage = new String(method.getResponseBody());
//               
//               return responseMessage.getBytes();
//               
//           } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//               ste.printStackTrace();
//               System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//               throw ste;
//           } catch(ConnectException ce) {
//               ce.printStackTrace();
//               System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//               throw ce;
//           } catch(Exception e) {
//               e.printStackTrace();
//               throw e;
//           } finally {
//               method.releaseConnection();
//               if(status != HttpStatus.SC_OK) {
//                   String[] msgArgs = new String[1];
//                   msgArgs[0] = String.valueOf(status);
//                   String resMsg = ExceptionUtil.make("RDCEAIAHA013", msgArgs);
//                   if(logger.isDebug()){
//                       logger.debug(resMsg);
//                   }
//               }
//           }
//       }
//       
//       /** 
//        * 1. 기능 :  수동 시스템에 Post 방식으로 메신저 연계서비스 호출
//        * 2. 처리 개요 : 
//        *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//        * 3. 주의사항 
//        *
//        * @param    url 수동 시스템 웹 컴포넌트 URL
//        * @param    data    송신 전문
//        * @return   반환 된 byte[] Object
//        * @exception    Exception 수동 시스템 간 통신 중 발생
//        **/
//        private byte[] callPopupService(String url, byte[] data, String encode, int timeout)
//        throws Exception {
//      	  if(logger.isDebug()){
//                logger.debug("HttpClientAdapter] callPopupService called ");
//            }
//      	  
//      	  PostMethod method = new PostMethod(url);
//
//           
//            //2008.02.15 : Timeout 처리로직 변경 (0 : 무한대 설정가능하게 함)
//            if(timeout > -1) {
//            	method.getParams().setSoTimeout(timeout);
//            }
//            
//            // Popup Data Size : 153 Bytes
//            int popupMinSize = 153;
//            
//            if(data.length >= popupMinSize) {
//          	  if(encode != null && encode.length() > 0) {
//          		  if(logger.isDebug()){
//                        logger.debug("HttpClientAdapter] callPopupService ENCODE("+encode+") ");
//                    }
//          		  method.addParameter("SRV_CODE",   new String(data,  0,  6, encode) );
//  		          method.addParameter("RECIPIENT", new String(data,  6,  7, encode) );
//  		          method.addParameter("TITLE",      new String(data, 13, 40, encode) );
//  		          method.addParameter("BODY",       new String(data, 53,100, encode) );
//          	  }
//          	  else {
//          		  method.addParameter("SRV_CODE",   new String(data,  0,  6) );
//  		          method.addParameter("RECIPIENT", new String(data,  6,  7) );
//  		          method.addParameter("TITLE",      new String(data, 13, 40) );
//  		          method.addParameter("BODY",       new String(data, 53,100) );
//          	  }
//            }
//            else {
//          	  if(logger.isError()){
//                    logger.error("HttpClientAdapter] callPopupService Invalid Data Length (" + data.length + ") < "+popupMinSize);
//                }
//          	  throw new Exception("HttpClientAdapter.callPopupService Error : MessageSize("+(data.length)+" Bytes) too small < "+popupMinSize);
//            }
//            
//            int status = -1;
//            
//            
//            try {
//            	HttpClient mclient = new HttpClient(new MultiThreadedHttpConnectionManager());
//            	mclient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
//            	mclient.getParams().setContentCharset("EUC_KR");
//            	status = mclient.executeMethod(method);
//                String responseMessage = new String(method.getResponseBody());
//                
//                return responseMessage.getBytes();
//                
//            } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//                ste.printStackTrace();
//                System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//                throw ste;
//            } catch(ConnectException ce) {
//                ce.printStackTrace();
//                System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//                throw ce;
//            } catch(Exception e) {
//                e.printStackTrace();
//                throw e;
//            } finally {
//                method.releaseConnection();
//                if(status != HttpStatus.SC_OK) {
//                    String[] msgArgs = new String[1];
//                    msgArgs[0] = String.valueOf(status);
//                    String resMsg = ExceptionUtil.make("RDCEAIAHA013", msgArgs);
//                    if(logger.isDebug()){
//                        logger.debug(resMsg);
//                    }
//                }
//            }
//        }
//        
//        /** 
//         * 1. 기능 :  수동 시스템에 Post 방식으로 일자전환이벤트 호출
//         * 2. 처리 개요 : 
//         *     - 수동 시스템에 서비스 요청 하고 결과를 리턴 한다.
//         * 3. 주의사항 
//         *
//         * @param    url 수동 시스템 웹 컴포넌트 URL
//         * @param    data    송신 전문
//         * @return   반환 된 byte[] Object
//         * @exception    Exception 수동 시스템 간 통신 중 발생
//         **/
//         private byte[] callChangeDateService(String url, byte[] data, String encode, int timeout)
//         throws Exception {
//       	  if(logger.isDebug()){
//                 logger.debug("HttpClientAdapter] callChangeDateService called ");
//             }
//       	  
//       	  	PostMethod method = new PostMethod(url);
//
//       	  	//2008.02.15 : Timeout 처리로직 변경 (0 : 무한대 설정가능하게 함)
//             if(timeout > -1) {
//             	method.getParams().setSoTimeout(timeout);
//             }
//             
//             // Data Size : 15 Bytes
//             int popupMinSize = 15;
//             
//             if(data.length >= popupMinSize) {
//           	  if(encode != null && encode.length() > 0) {
//           		  if(logger.isDebug()){
//                         logger.debug("HttpClientAdapter] callChangeDateService ENCODE("+encode+") ");
//                     }
//           		  method.addParameter("req",   new String(data,  0,  7, encode).trim() );
//   		          method.addParameter("date",  new String(data,  7,  8, encode) );
//           	  }
//           	  else {
//           		  method.addParameter("req",   new String(data,  0,  7).trim() );
//   		          method.addParameter("date",  new String(data,  7,  8) );
//           	  }
//             }
//             else {
//           	  if(logger.isError()){
//                     logger.error("HttpClientAdapter] callChangeDateService Invalid Data Length (" + data.length + ") < "+popupMinSize);
//                 }
//           	  throw new Exception("HttpClientAdapter.callChangeDateService Error : MessageSize("+(data.length)+" Bytes) too small < "+popupMinSize);
//             }
//             
//             int status = -1;
//             
//             
//             try {
//             	HttpClient mclient = new HttpClient(new MultiThreadedHttpConnectionManager());
//             	mclient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
//             	mclient.getParams().setContentCharset("EUC_KR");
//             	status = mclient.executeMethod(method);
//                 String responseMessage = new String(method.getResponseBody());
//                 
//                 return responseMessage.getBytes();
//                 
//             } catch(SocketTimeoutException ste) { // Read Timeout :: HttpClient 3.1일 경우
//                 ste.printStackTrace();
//                 System.out.println("HttpClientAdapter] SocketTimeoutException : " + ste.toString() );
//                 throw ste;
//             } catch(ConnectException ce) {
//                 ce.printStackTrace();
//                 System.out.println("HttpClientAdapter] Connection Exception : " + ce.toString() );
//                 throw ce;
//             } catch(Exception e) {
//                 e.printStackTrace();
//                 throw e;
//             } finally {
//                 method.releaseConnection();
//                 if(status != HttpStatus.SC_OK) {
//                     String[] msgArgs = new String[1];
//                     msgArgs[0] = String.valueOf(status);
//                     String resMsg = ExceptionUtil.make("RDCEAIAHA013", msgArgs);
//                     if(logger.isDebug()){
//                         logger.debug(resMsg);
//                     }
//                 }
//             }
//         }
//} 
