package com.eactive.eai.flowcontroller;
//package com.eactive.eai.flowcontroller; 
//
//import com.bea.control.ServiceBrokerControl;
//import com.bea.jpd.JpdContext;
//import com.bea.data.RawData;
//import com.bea.wli.control.broker.MessageBroker;
//import com.bea.wli.jpd.Callback;
//import com.bea.wli.jpd.CallbackInterface;
//import com.bea.xml.XmlObjectList;
//import org.apache.beehive.controls.api.bean.Control;
//import org.apache.beehive.controls.api.events.EventHandler;
//import org.apache.xmlbeans.XmlObject;
//import com.eactive.eai.adapter.AdapterGroupVO;
//import com.eactive.eai.adapter.AdapterManager;
//import com.eactive.eai.adapter.AdapterVO;
//import com.eactive.eai.common.EAIKeys;
//import com.eactive.eai.common.exception.ExceptionUtil;
//import com.eactive.eai.common.message.*;
//import com.eactive.eai.common.property.PropManager;
//import com.eactive.eai.common.routing.IFRouter;
//import com.eactive.eai.common.routing.RoutingVO;
//import com.eactive.eai.common.util.Logger;
//import com.eactive.eai.common.util.MessageUtil;
//import com.eactive.eai.util.JpdExceptionUtil; 
//import com.eactive.eai.adapter.Keys;
//import com.eactive.eai.common.EAITable;
//import com.eactive.eai.common.exception.ExceptionHandler;
//import com.eactive.eai.common.kesa.KESAMessage;
//import com.eactive.eai.common.routing.RoutingManager;
//import com.eactive.eai.transformer.function.util.CodeConversion;
//import com.eactive.eai.transformer.transform.TransformManager;
//import java.util.HashMap;
//import java.util.Iterator;
//import com.bea.wli.common.Protocol;
//import com.eactive.eai.control.LogSender;
//import com.eactive.eai.control.Transform;
//import com.eactive.eai.common.kbmessage.*;
//import com.eactive.eai.common.bpa.RuleManager;
//
///**
// * @jpd:process process::
// * <process name="CompRRFCProcess">
// *   <clientRequest name="복합거래-RR-프로세스" method="callService" returnMethod="clientReturn">
// *     <onException name="OnException" executeOnRollback="true">
// *       <perform name="에러처리" method="printExceptionMessage"/>
// *       <finish name="Finish"/>
// *     </onException>
// *     <decision name="WarmUp">
// *       <if name="isRealCall" conditionMethod="isRealCall"/>
// *       <default name="Default">
// *         <finish name="Finish"/>
// *       </default>
// *     </decision>
// *     <perform name="초기화" method="init"/>
// *     <whileDo name="호출할 다음 메시지 유무 판단" conditionMethod="existNextSvc">
// *       <decision name="서비스메시지순서 판단">
// *         <if name="1번서비스 메시지" conditionMethod="isFirstSvcMsg"/>
// *         <default name="Default">
// *           <controlSend name="getNextServiceSeq" method="ruleManagerCtrlGetNextServiceSeq"/>
// *           <decision name="요청메시지와 결과 메시지 병합 여부 판단">
// *             <if name="FC타입" conditionMethod="isFCType">
// *               <controlSend name="다음 요청 메세지  변환" method="transformCtrlTransformComp"/>
// *             </if>
// *             <default name="Default"/>
// *           </decision>
// *         </default>
// *       </decision>
// *       <decision name="마지막 서비스메시지의 타입 판단">
// *         <if name="FC타입" conditionMethod="isFinalFCType"/>
// *         <default name="Default">
// *           <controlSend name="Outbound 호출" method="ifRouterProcess3"/>
// *           <perform name="보상거래 확인" method="setCompList"/>
// *         </default>
// *       </decision>
// *     </whileDo>
// *     <decision name="보상거래처리여부">
// *       <if name="정상처리" conditionMethod="isNonError">
// *         <perform name="정상응답메시지설정" method="setResponseMessage"/>
// *       </if>
// *       <if name="보상거래처리" conditionMethod="isCompensation">
// *         <whileDo name="보상거래처리" conditionMethod="existNextCom">
// *           <controlSend name="보상거래처리" method="ifRouterProcess4"/>
// *           <perform name="보상처리응답메시지설정" method="setCompensationResult"/>
// *         </whileDo>
// *       </if>
// *       <default name="오류처리">
// *         <perform name="오류응답메시지설정" method="setErrorMessage"/>
// *       </default>
// *     </decision>
// *   </clientRequest>
// * </process>::
// */
//
//@Protocol(httpSoap=false)
//@com.bea.wli.jpd.Process(process = "<process name=\"CompRRFCProcess\"> "+"  <clientRequest name=\"복합거래-RR-프로세스\" method=\"callService\" returnMethod=\"clientReturn\"> "+"    <onException name=\"OnException\" executeOnRollback=\"true\"> "+"      <perform name=\"에러처리\" method=\"printExceptionMessage\"/> "+"      <finish name=\"Finish\"/> "+"    </onException> "+"    <decision name=\"WarmUp\"> "+"      <if name=\"isRealCall\" conditionMethod=\"isRealCall\"/> "+"      <default name=\"Default\"> "+"        <finish name=\"Finish\"/> "+"      </default> "+"    </decision> "+"    <perform name=\"초기화\" method=\"init\"/> "+"    <whileDo name=\"호출할 다음 메시지 유무 판단\" conditionMethod=\"existNextSvc\"> "+"      <decision name=\"서비스메시지순서 판단\"> "+"        <if name=\"1번서비스 메시지\" conditionMethod=\"isFirstSvcMsg\"/> "+"        <default name=\"Default\"> "+"          <controlSend name=\"getNextServiceSeq\" method=\"ruleManagerCtrlGetNextServiceSeq\"/> "+"          <decision name=\"요청메시지와 결과 메시지 병합 여부 판단\"> "+"            <if name=\"FC타입\" conditionMethod=\"isFCType\"> "+"              <controlSend name=\"다음 요청 메세지  변환\" method=\"transformCtrlTransformComp\"/> "+"            </if> "+"            <default name=\"Default\"/> "+"          </decision> "+"        </default> "+"      </decision> "+"      <decision name=\"마지막 서비스메시지의 타입 판단\"> "+"        <if name=\"FC타입\" conditionMethod=\"isFinalFCType\"/> "+"        <default name=\"Default\"> "+"          <controlSend name=\"Outbound 호출\" method=\"ifRouterProcess3\"/> "+"          <perform name=\"보상거래 확인\" method=\"setCompList\"/> "+"        </default> "+"      </decision> "+"    </whileDo> "+"    <decision name=\"보상거래처리여부\"> "+"      <if name=\"정상처리\" conditionMethod=\"isNonError\"> "+"        <perform name=\"정상응답메시지설정\" method=\"setResponseMessage\"/> "+"      </if> "+"      <if name=\"보상거래처리\" conditionMethod=\"isCompensation\"> "+"        <whileDo name=\"보상거래처리\" conditionMethod=\"existNextCom\"> "+"          <controlSend name=\"보상거래처리\" method=\"ifRouterProcess4\"/> "+"          <perform name=\"보상처리응답메시지설정\" method=\"setCompensationResult\"/> "+"        </whileDo> "+"      </if> "+"      <default name=\"오류처리\"> "+"        <perform name=\"오류응답메시지설정\" method=\"setErrorMessage\"/> "+"      </default> "+"    </decision> "+"  </clientRequest> "+"</process>")
//public class CompRRFCProcess implements com.bea.jpd.ProcessDefinition
//{
//    public java.lang.String[] layerNames;
//
//    public int nextSvcSeq;
//
//    public String tranName;
//
//    public java.lang.Object outObject;
//
//    public java.lang.Object[] scrObjects;
//
//    public java.lang.String comTranName;
//
//    public java.lang.String kesaCd;
//
//    public int logPssSeq;
//
//    static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
//    
//    public java.util.Properties callProp;
//
//    public EAIMessage resEaiMsg;
//    
//    public EAIMessage compEaiMsg;       //보상거래 요청 메시지
//    
//    public EAIMessage compResEaiMsg;    //보상거래 응답 메시지
//    
//    public Object[] orgBizData;     //보상거래시 요청할 원기동 메시지
//
//    public com.eactive.eai.common.message.EAIMessage reqEaiMsg;
//        
//    //public java.lang.String nextSvcScr;
//    
//    public boolean isFistSvcMsg;
//    
//    public boolean existNextSvcMsg;    //다음 서비스 메시지 유무
//   
//    public int svcMsgSize;              //서비스 메시지 수
//    
////    public int[] calledSvcMsgSeq;       //수행되었던 서비스메시지 처리번호
//    
//    public int callCount;               //보상거래 등록 카운트
//    
//    public int count;               //보상처리 거래 카운트
//    
//    public String reqUUID;
//    
//    public int[] compList ;         //보상거래가 필요한 서비스메시지 처리번호 목록
//    
//    public String keyMgtMsgVl ;   
//    
//    public boolean isFinalFC;    //마지막 서비스 메시지가 FC인지 설정하는 플래그
//    
//    public boolean isFC;    
//    
//    private final static String OUTBOUND_FC_TYPE = "F";
//    
//    public boolean nonNextSvcMsg;
//    
//    //public int sourceCount;
//    
//    //public java.lang.Object[] transSourceMsg;   //실제 호출된 Outbound 수 만큼의 소스 메시지를 저장하기 위한 리스트
//    
//    //public java.lang.String[] transLayoutNames;
//    
//    public int resultCount;
//    
//    /**
//     * for Server Log Level - by kscheon 
//     * start
//     */
//    static Logger esbLogger = Logger.getLogger(Logger.LOGGER_ESBFW);  
//    private int svrLogLevel;                                        
//    private static ThreadLocal local = new ThreadLocal();   //경과시간 동기화를 위한 ThreadLocal
//    /**
//     * for Server Log Level - by kscheon 
//     * end
//     */
//
//    static final long serialVersionUID = 1L;
//    
//	@com.bea.wli.jpd.Callback()
//    public Callback callback;
//    
//    /*
//     * 이 주석 위의 영역에는 디자인 뷰에서 만든 변수 선언이 포함되어 있습니다.
//     * 이 주석 아래의 영역에는 디자인 뷰에서 만든 컨트롤 선언이 포함되어 있습니다.
//     * 
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     * 
//     * 이 코드 영역에서는 양방향 편집이 완전히 지원됩니다.
//     * 경고: 애플리케이션에서 이미 사용하고 있는 프로세스 변수와 컨트롤 선언을 변경하는
//     * 경우 사용 중인 모든 위치에서 해당 선언을 업데이트하지 않으면 애플리케이션에서
//     * 오류가 발생할 수 있습니다.
//     */
//    
//    
//    /**
//     * @common:context
//     */
//	@com.bea.wli.jpd.Context()
//    JpdContext context; //(..컨트롤 삽입 표식 - 이 라인을 수정하지 마십시오.)
//    
//    /*
//     * 이 주석 아래의 영역에는 프로세스 언어의 통신 노드에서 참조하는 java 메소드가 포함되어 있습니다.
//     *
//     * 이 영역의 코드는 자동으로 생성됩니다.
//     *
//     * 이 코드 영역에서는 양방향 편집이 부분적으로 지원됩니다.
//     * 경고: 메소드 본문에 코드를 추가할 수 있지만 보호 섹션 블록 주석의 외부
//     * 합니다. 이 주석 내의 코드를 수정하면 이 코드를 생성한 디자인 뷰 빌더에서
//     * 정보를 볼 수 없습니다.
//     */
//
//
//    public EAIMessage clientReturn()
//    {
//    
//    		/**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * start
//         */ 
//        if(svrLogLevel >= 1) {
//            try{
//                long msgSndTm = System.currentTimeMillis();
//            
//                Long threadData = (Long)local.get();
//                long processTm =  msgSndTm - threadData.longValue();    
//                if (esbLogger.isInfo()) esbLogger.info("CompRRFCProcess]  End... - 경과시간 : " + processTm + "(ms) - EAI Server Log Level is INFO");
//            } catch (Exception e) {
//            }
//        }
//        /**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * end
//         */ 
//         
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // return
//        return resEaiMsg;
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//    }
//
//
//
//
//    public void callService(com.eactive.eai.common.message.EAIMessage reqEaiMsg, java.util.Properties callProp)
//    {        
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // parameter assignment
//        this.reqEaiMsg = reqEaiMsg;
//        this.callProp = callProp;
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//    
//    	if(this.reqEaiMsg == null) return;
//        /**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * start
//         */ 
//        svrLogLevel = this.reqEaiMsg.getSvrLogLvl();
//        
//        
//        if(svrLogLevel >= 1) {
//            try{
//                long msgRcvTm = System.currentTimeMillis();
//                local.set(new Long(msgRcvTm)); 
//            
//                if (esbLogger.isInfo()) esbLogger.info("CompRRFCProcess]  started... - EAI Server Log Level is INFO");
//            }catch(Exception e){
//            }
//        }
//        /**
//         * ServerLog Level이 info인경우 로깅 - by kscheon
//         * end
//         */ 
//    
//    }
//
//    public void ifRouterProcess4() throws Exception
//    {
//        logger.debug("CompRRFCProcess] 보상거래를 호출합니다");
//        String compEaisvcCd = this.reqEaiMsg.getCurrentSvcMsg().getCpnsSvcPssCd();
//        if (compEaisvcCd !=null) {
//            try {
//                compEaiMsg = EAIMessageManager.getInstance().getEAIMessage(compEaisvcCd);
//                compEaiMsg.setSvcOgNo(reqUUID);
//                compEaiMsg.setBizMsg(orgBizData);
//                compEaiMsg.getCurrentSvcMsg().setKeyMgtMsgVl(keyMgtMsgVl);
//                
//                compEaiMsg = MessageUtil.makeCompEAIMessage(compEaiMsg, reqEaiMsg);
//                
//                compResEaiMsg = compEaiMsg;
//                callProp.setProperty(EAIKeys.CALL_COMP_KEY, EAIKeys.CALL_COMP_VALUE);   //보상거래 프로퍼티 설정
//                callProp.setProperty(EAIKeys.CALL_COMP_SVC_SEQ, ""+this.reqEaiMsg.getSvcPssSeq());
//            }catch (Exception e) {
//                String[] msgArgs = new String[1];
//                msgArgs[0] = this.reqEaiMsg.getEAISvcCd();          
//                String rspErrorCode = "RECEAIFRR004";
//                String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//                if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//                e.printStackTrace();
//                //this.resEaiMsg.setRspErrCd(rspErrorCode);
//               // this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//               // throw new RuntimeException(rspErrorCode);
//            }
//        } else {
//            String[] msgArgs = new String[2];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();   
//            msgArgs[1] = ""+this.reqEaiMsg.getSvcPssSeq();        
//            String rspErrorCode = "RECEAIFRR005";
//            String rspErrorMsg = ExceptionUtil.make(rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//           // this.resEaiMsg.setRspErrCd(rspErrorCode);
//           // this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//           // throw new RuntimeException(rspErrorCode);
//        }
//        try {
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.compResEaiMsg = IFRouter.process(this.compEaiMsg, this.callProp);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        } catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();       
//            String rspErrorCode = "RECEAIFRR006";
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.compResEaiMsg.setRspErrCd(rspErrorCode);
//            this.compResEaiMsg.setRspErrMsg(rspErrorMsg);
//           // throw new RuntimeException(rspErrorCode);
//           
//        }
//        
//        logger.debug("CompRRFCProcess] 보상거래를 호출을 마칩니다.");        
//    }
//
//
//    public void ruleManagerCtrlGetNextServiceSeq() throws Exception
//    {
//        logger.debug("CompRRFCProcess] 다음서비스메시지를 추출합니다.");
//        
//        Object[] objs = new Object[1];
//        objs[0] = this.resEaiMsg.getBizMsg()[0];
//        this.reqEaiMsg.setBizMsg(objs);
//                
//        try{
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.nextSvcSeq = RuleManager.getNextServieSeq(this.reqEaiMsg);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        }catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFRR003";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//       //     throw new RuntimeException(rspErrorCode);
//           
//            existNextSvcMsg = false; //다음 서비스메시지 추출에서 오류가 발생하면 반복 루틴을 종료하도록 한다.
//        }
//        
//        if (this.nextSvcSeq > 0) {
//            
//            this.reqEaiMsg.setSvcPssSeq(this.nextSvcSeq);
//            this.reqEaiMsg.getCurrentSvcMsg().setKeyMgtMsgVl(keyMgtMsgVl);
//            existNextSvcMsg = true;
//        } else if (this.nextSvcSeq == -1){
//            if ( this.reqEaiMsg.getCurrentSvcMsg().getNxtSvcPssSeq() > 0) {
//                this.reqEaiMsg.setSvcPssSeq(this.reqEaiMsg.getCurrentSvcMsg().getNxtSvcPssSeq());
//                this.reqEaiMsg.getCurrentSvcMsg().setKeyMgtMsgVl(keyMgtMsgVl);
//                existNextSvcMsg = true;
//            } else {
//                existNextSvcMsg = false;    
//            }
//        } else {
//            existNextSvcMsg = false;
//        }  
//        logger.debug("CompRRFCProcess] 다음서비스메시지를 추출 했습니다. - "  + existNextSvcMsg);        
//    }
//
//
//    public void transformCtrlTransformComp() throws Exception
//    {
//        logger.debug("CompRRFCProcess] FC 타입에 대한 다음메시지 변환을 수행합니다. ");
//        try {
//        if (this.reqEaiMsg.getCurrentSvcMsg().getNxtSvcPssSeq() == 0 ){
//            logger.debug("CompRRFCProcess] 마지막 결과 메시지 변환을 위한 FC 입니다.");
//            
//            this.isFinalFC = true;   
//            this.nonNextSvcMsg = true; 
//            
//            tranName = this.reqEaiMsg.getCurrentSvcMsg().getBsRspCnvMsgID();
//        } else {
//            tranName = this.reqEaiMsg.getCurrentSvcMsg().getCnvMsgID(); 
//        }
//                    
//        TransformManager manager = TransformManager.getManager();
//        com.eactive.eai.transformer.transform.Transform transform = manager.getTransform(tranName);
//        String sourceLayout = "";
//        
//        String resTransform = getLayoutName(this.resEaiMsg.getCurrentSvcMsg().getBsRspCnvMsgID());
//        
//        if (transform == null) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = tranName;
//            String rspErrorCode = "RECEAIFRR008";
//            String rspErrorMsg = ExceptionUtil.make(rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] " +rspErrorMsg);
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//        } else {
//            int sourceCount = transform.getSourceLayoutCount();
//            
//            Object obj = scrObjects[0];
//            String reqlayoutName = layerNames[0];
//            
//            scrObjects = new Object[sourceCount];
//            layerNames = new String[sourceCount];
//            
//            for (int i=0; i<sourceCount; i++) {
//                sourceLayout = transform.getSourceLayout(i).getName();
//                
//                resultCount = 0;
//                        
//                //결과 변환규칙에 요청메시지의 레이아웃이 존재하면
//                if (sourceLayout.equals(reqlayoutName)) {
//                    scrObjects[resultCount] = obj;
//                    layerNames[resultCount] = reqlayoutName;
//                    resultCount++;
//                }
//                
//                if (sourceLayout.equals(resTransform)) {
//                    scrObjects[resultCount] = this.resEaiMsg.getBizMsg()[0];
//                    layerNames[resultCount] = resTransform;
//                    resultCount++;
//                }
//            }   
//        }
//        } catch(Exception e) {
//            e.printStackTrace();
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();       
//            String rspErrorCode = "RECEAIFRR008";
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//        }    
//            
//     /*       
//        } else {
//            tranName = this.reqEaiMsg.getCurrentSvcMsg().getCnvMsgID(); 
//            
//            scrObjects[1] = this.resEaiMsg.getBizMsg()[0];
//            //layerNames[0]의 데이터는 이전 처리된 서비스메시지의 변환에서 추출함 - init  메소드에서 설정 했음
//        
//            try{
//                layerNames[1] = getLayoutName (this.resEaiMsg.getCurrentSvcMsg().getBsRspCnvMsgID());
//            }catch (Exception e) {
//                String[] msgArgs = new String[1];
//                msgArgs[0] = this.reqEaiMsg.getEAISvcCd();       
//                String rspErrorCode = "RECEAIFRR008";
//                String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//                if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//                e.printStackTrace();
//                this.resEaiMsg.setRspErrCd(rspErrorCode);
//                this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            }   
//        }
//    */
//        try {
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.outObject = Transform.transformComp(this.kesaCd, true, this.tranName, this.scrObjects, this.layerNames);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        }catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();       
//            String rspErrorCode = "RECEAIFRR007";
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//        }
//        
//        logger.debug("CompRRFCProcess] FC 타입에 대한 다음메시지 변환을  수행을  마칩니다. ");        
//    }
//
//
//    public void ifRouterProcess3() throws Exception
//    {
//        //첫번째 서비스 메시지가 아니면 이전 아웃바운드 결과데이터를 요청메시지의 요청 데이터로 설정
//
//        logger.debug("CompRRFCProcess] 아웃바운드를 호출합니다.  - " +this.reqEaiMsg.getCurrentSvcMsg().getOutbRtnNm());
//        this.reqEaiMsg.setRspErrCd(EAIMessageKeys.EAI_DEFAULT_CODE); 
//        
//        try{
//        //#START: CODE GENERATED - PROTECTED SECTION - you can safely add code above this comment in this method. #//
//        // input transform
//        // return method call
//        this.resEaiMsg = IFRouter.process(this.reqEaiMsg, this.callProp);
//        // output transform
//        // output assignments
//        //#END  : CODE GENERATED - PROTECTED SECTION - you can safely add code below this comment in this method. #//
//        }catch (Exception e) {
//                String[] msgArgs = new String[2];
//                msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//                msgArgs[1] = ""+this.reqEaiMsg.getSvcPssSeq();
//                String rspErrorCode = "RECEAIFRR002";            
//                String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//                if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//                e.printStackTrace();
//                this.resEaiMsg.setRspErrCd(rspErrorCode);
//                this.resEaiMsg.setRspErrMsg(rspErrorMsg);
////                throw new RuntimeException(rspErrorCode);      
//        }
//            
//            logger.debug("CompRRFCProcess] 아웃바운드를 호출 수행을 마칩니다..");    
//    }
//
//	@CallbackInterface()
//    public interface Callback extends ServiceBrokerControl //(..영역 끝 표식 - 이 라인을 수정하지 마십시오.)
//    {
//    }
//    
//    /*
//     * 이 주석 아래에 삽입한 코드는 디자인 뷰에서 만든 수행 또는 조건 노드에 해당하는
//     * 메소드용입니다.
//     *
//     * 여기에서 코드를 수정하거나 새로 추가하십시오.
//     */
//    
//
//
//    public boolean checkServiceMsgSize()
//    {
//		// Outbound Error일 경우
//        if( MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd()) &&
//            reqEaiMsg.getSvcMsgs().size() > 1 ) {
//            return true;
//        }
//        else {
//            return false;
//        }
//	}
//
//
//    public boolean isOutboundCall()
//    {
//		return true;
//	}
//
//
//    public void init() throws Exception
//    {
//        this.resEaiMsg = this.reqEaiMsg;
//        existNextSvcMsg = true;
//        isFinalFC = false;
//        isFC = false;
//        nonNextSvcMsg = false;
//        isFistSvcMsg = true;
//        
//        callCount = 0;
//        count = 0;
//        resultCount = 0;
//        
//        this.reqUUID = this.reqEaiMsg.getSvcOgNo();     //보상거래에 원래의 UUID 설정을 위해 저장
//        //-----------------------------------------------
//        // KBMessage 표준으로 변경함 2008.05.08
//        //-----------------------------------------------
//        //this.kesaCd = this.reqEaiMsg.getKesaMsg().getCService();
//        this.kesaCd = this.reqEaiMsg.getKbMsg().getKBCommon().getTelgmRecvTranCd();
//        //-----------------------------------------------
//        
//        this.orgBizData = new Object[1];
//        orgBizData[0] = this.reqEaiMsg.getBizMsg()[0];               //보상거래의 요청메시지에 원기동의 요청메시지를 설정
//        
//        scrObjects = new Object[2];                                 //요청메시지와 응답메시지 변환을 위한 소스 오브젝트
//        
//        this.keyMgtMsgVl = this.reqEaiMsg.getCurrentSvcMsg().getKeyMgtMsgVl();
//    
//        try {
//            this.svcMsgSize = this.reqEaiMsg.getSvcMsgs().size();
//        }catch (Exception e) {
//            logger.error ("CompRRFCProcess] 요청 메시지에서 서비스메시지를 가져올 수 없습니다.");   
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFRR001";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//           
//        }
//        
//        try{
//            TransformManager manager = TransformManager.getManager();
//            com.eactive.eai.transformer.transform.Transform transform = manager.getTransform(this.reqEaiMsg.getCurrentSvcMsg().getCnvMsgID());
//            layerNames = new String[2];                                  //요청메시지와 응답메시지 변환을 위한 소스 레이아웃
//        
//            layerNames[0] = transform.getSourceLayout(0).getName();
//            scrObjects[0] = this.reqEaiMsg.getBizMsg()[0];
//        }catch (Exception e) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//            String rspErrorCode = "RECEAIFRR008";            
//            String rspErrorMsg = ExceptionUtil.make(e, rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] "+rspErrorMsg);
//            e.printStackTrace();
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//        }
//    }
//
//    public void printExceptionMessage() throws Exception
//    {        
//        Exception e = this.context.getExceptionInfo().getException();
//        if (logger.isError()) logger.error("CompRRFCProcess] ExceptionPath : "+e.getMessage());
//        
//        
//    }
//
//    public boolean isSourceAsync()
//    {
//		if(EAIMessageKeys.ASYNC_SVC.equals(this.reqEaiMsg.getSvcTsmtUsgTp()) ) {
//            return true;
//        } 
//        else {
//            return false;
//        }
//	
//    }
//
//    public boolean isRealCall()
//    {
//		if(this.callProp != null) {
//            String mode = this.callProp.getProperty(EAIKeys.CALL_MODE_KEY);
//            if(mode != null && EAIKeys.CALL_MODE_WARMUP.equals(mode)) {
//                logger.debug("CompRRFCProcess] Warming Up Called");
//                return false;
//            }
//            else {
//                return true;
//            }
//        }
//        else {
//            return true;
//        }
//	}
//
//
//    public boolean isCompensation()
//    {
//		//------------------------------
//        // TO-DO
//        // 보상거래가 등록된 서비스메시지가 하나라도 있으면 수행
//        //------------------------------
//        logger.debug("CompRRFCProcess] 보상거래 유무를 확인합니다");
//        
//        if (this.compList != null ) { //보상거래가 등록된 서비스가 하나라도 있으면
//            logger.debug("CompRRFCProcess] 보상거래가 등록되어 있습니다.");
//            return true;
//         }
//         else {
//             return false;
//         }
//	}
//
//
//    public boolean existNextCom()
//    {
//        //------------------------------
//        // TO-DO
//        // 보상거래 서비스코드가 등록된 경우만 실행
//        //------------------------------
//        logger.debug("CompRRFCProcess] 실행할 보상거래가 있는지  확인합니다.");
//        if (callCount > 0 ) {
//            if (callCount == count) {
//                return false;    
//            }
//            else if (this.compList[count] >0) { //보상거래 처리가 등록된 서비스 메시지 이면 보상거래 처리
//                logger.debug("CompRRFCProcess] 실행할 보상거래가 있습니다. [ "  +count+" ] -  "+ this.compList[count]);
//                this.reqEaiMsg.setSvcPssSeq(this.compList[count]);   //보상거래를 위해 처리된 순서대로 서비스메시지를 설정
//                count++;
//                return true;   
//            }
//            else {
//                return false;   
//            }
//                    
//        } 
//        else {
//            return false;   
//        }
//	}
//
//
//    public boolean isNonError()
//    {
//		// 업무오류와 정상코드가 동일하므로 제거해야함 : 2008.06.03
//        //if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd()) || EAIMessageKeys.BWK_ERRMSG_CODE.equals(resEaiMsg.getRspErrCd())){
//    	if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd())){
//            return false;
//        } else {
//            return true;   
//        }
//	}
//
//    public boolean isFirstSvcMsg()
//    {
//		if (this.svcMsgSize <= 0){
//            logger.error("CompRRFCProcess] 해당 복합거래에 대한 ServiceMessage가 없습니다.- "+reqEaiMsg.getEAISvcCd());
//        }
//        if (isFistSvcMsg){
//            isFistSvcMsg = false;
//            logger.debug("CompRRFCProcess] 첫번째 서비스 메시지 입니다.");
//            return true;    
//        } else {
//            logger.debug("CompRRFCProcess] 첫번째 이후 서비스 메시지 입니다.");
//            return false;   
//        }
//	
//    }
//
//    public boolean existNextSvc()
//    {
//		return existNextSvcMsg;
//	}
//
//
//    public void setErrorMessage() throws Exception
//    { 
//        logger.debug("CompRRFCProcess ] 오류 응답 메시지를  수신했습니다. "+ this.resEaiMsg.getBizMsg()[0].toString());
//    }
//
//    public void setResponseMessage() throws Exception
//    {
//        logger.debug("CompRRFCProcess ] 정상 응답 메시지를  수신했습니다. "+ this.resEaiMsg.getBizMsg()[0].toString());
//    
//    }
//
//    public void setCompensationResult() throws Exception
//    {
//        //보강거래 처리에서 오류가 발생한경우에 대한 처리절차 추가 필요
//        if(!MessageUtil.checkRspErrCd(this.compResEaiMsg.getRspErrCd())) {  //보상거래 처리시 오류가 발생한 경우
//            logger.error("CompRRFCProcess ] 보상거래 처리시  오류가 발생했습니다  -  " + this.compResEaiMsg.getRspErrCd() +" - " + this.compResEaiMsg.getRspErrMsg());
//        } else {
//            logger.info ( "CompRRFCProcess ] 보상거래 처리가 정상적으로 처리되었습니다. -  [   "+ this.compEaiMsg.getEAISvcCd()+" ] ");
//        }   
//        
//    }
//
//    public boolean isFCType()
//    {
//        if(existNextSvcMsg){
//            logger.debug("CompRRFCProcess ] 다음 서비스 메시지가 FC타입인지 확인합니다.");
//            String outName = this.reqEaiMsg.getCurrentSvcMsg().getOutbRtnNm();
//            RoutingManager rm = RoutingManager.getInstance();
//            RoutingVO vo = rm.getRoutingVO(outName);
//            String layerDstcd = vo.getLayerDstcd();
//            
//            if (OUTBOUND_FC_TYPE.equals(layerDstcd) ) {
//                if (outName.equals(this.reqEaiMsg.getFlwCntlRtnNm())){  //자기 자신의 FC와 동일한지 확인
//                    logger.debug("CompRRFCProcess ] 다음 서비스 메시지가 FC타입입니다..");
//                    isFC = true;
//                    return true;
//                }
//                else {
//                    String[] msgArgs = new String[2];
//                    msgArgs[0] = this.reqEaiMsg.getEAISvcCd();
//                    msgArgs[1] = ""+this.reqEaiMsg.getSvcPssSeq();
//                    String rspErrorCode = "RECEAIFRR009";
//                    String rspErrorMsg = ExceptionUtil.make(rspErrorCode, msgArgs);
//                    if (logger.isError()) logger.error("CompRRFCProcess] " +rspErrorMsg);
//                    this.resEaiMsg.setRspErrCd(rspErrorCode);
//                    this.resEaiMsg.setRspErrMsg(rspErrorMsg);  
//                    logger.error("CompRRFCProcess ] FC 설정이 잘못 되었습니다.");
//                    return false;
//                }
//            }
//            else {
//                logger.debug("CompRRFCProcess ] 다음 서비스 메시지가 FC타입이 아닙니다.");
//                return false;   
//            }
//        } else {
//             this.nonNextSvcMsg = true;
//             return false;
//        }
//	}
//
//    private String getLayoutName (String transformName) throws Exception{
//        TransformManager manager = TransformManager.getManager();
//        com.eactive.eai.transformer.transform.Transform transform = manager.getTransform(transformName);
//        String layoutName = "";
//        if (transform == null) {
//            String[] msgArgs = new String[1];
//            msgArgs[0] = transformName;
//            String rspErrorCode = "RECEAIFRR008";
//            String rspErrorMsg = ExceptionUtil.make(rspErrorCode, msgArgs);
//            if (logger.isError()) logger.error("CompRRFCProcess] " +rspErrorMsg);
//            this.resEaiMsg.setRspErrCd(rspErrorCode);
//            this.resEaiMsg.setRspErrMsg(rspErrorMsg);
//            throw new RuntimeException(rspErrorCode);
//        } else {
//            layoutName = transform.getTargetLayout().getName();    
//        }
//            
//        return layoutName;
//       
//    }
//    /*
//    private void makeTransformSource() throws Exception {
//        
//        String outName = this.reqEaiMsg.getCurrentSvcMsg().getOutbRtnNm();
//        RoutingManager rm = RoutingManager.getInstance();
//        RoutingVO vo = rm.getRoutingVO(outName);
//        String layerDstcd = vo.getLayerDstcd();
//        
//        if (OUTBOUND_FC_TYPE.equals(layerDstcd) ) {
//            String resultTransform = this.reqEaiMsg.getCurrentSvcMsg().getBsRspCnvMsgID();
//            TransformManager manager = TransformManager.getManager();
//            Transform transform = manager.getTransform(resultTransform);
//            
//            String reslayout =getLayoutName (this.resEaiMsg.getCurrentSvcMsg().getBsRspCnvMsgID());
//            
//            if (transform == null) {
//                String[] msgArgs = new String[1];
//                msgArgs[0] = resultTransform;
//                String rspErrorCode = "RECEAIFRR010";
//                String rspErrorMsg = ExceptionUtil.make(rspErrorCode, msgArgs);
//                if (logger.isError()) logger.error("CompRRFCProcess] " +rspErrorMsg);
//                this.resEaiMsg.setRspErrCd(rspErrorCode);
//                this.resEaiMsg.setRspErrMsg(rspErrorMsg);
////                throw new RuntimeException(rspErrorCode);
//            } else {
//                sourceCount = transform.getSourceLayoutCount();
//                transSourceMsg = new Object[sourceCount];
//                transLayoutNames = new String[sourceCount];
//                
//                String scrName = "";
//                
//                for (int i=0; i<sourceCount; i++) {
//                    scrName = transform.getSourceLayout(i).getName();
//                    //결과 변환규칙에 요청메시지의 레이아웃이 존재하면
//                    if (scrName.equals(layerNames[0])) {
//                        transSourceMsg[resultCount] = scrObjects[0] ;
//                        transLayoutNames[resultCount] = layerNames[0];
//                        resultCount++;
//                    }
//                    if (reslayout.equals(layerNames[0])) {
//                        transSourceMsg[resultCount] = this.resEaiMsg.getBizMsg()[0] ;
//                        transLayoutNames[resultCount] = reslayout;
//                        resultCount++;
//                    }
//                }   
//            }
//        }
//
//    }
//*/
//
//    public boolean isFinalFCType()
//    {
////		if (this.isFinalFC){
//        if (this.nonNextSvcMsg) {
//            if (this.isFinalFC){
//                Object obj[] = new Object[1];
//                obj[0] = outObject;
//                
//                this.resEaiMsg.getCurrentSvcMsg().setKeyMgtMsgVl(keyMgtMsgVl);   
//                this.resEaiMsg.setBizMsg(obj);
//            }
//            existNextSvcMsg =  false;
//            return true;
//        } else {
//            if (isFC) {
//                // 업무오류와 정상코드가 동일하므로 제거해야함 : 2008.06.03
//	            //if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd()) || EAIMessageKeys.BWK_ERRMSG_CODE.equals(resEaiMsg.getRspErrCd())){
//	            if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd())){
//                    logger.debug("compRRFCProcess ] 다음 요청메시지 변환 중 오류가 발생했습니다. ");
//                    existNextSvcMsg =  false;
//                    return true;
//                }
//                else {
//                    logger.debug("compRRFCProcess ] 다음 요청메시지 변환이 정상 적으로 수행 되었습니다.");
//                    Object obj[] = new Object[1];
//                    obj[0] = outObject;
//                    this.reqEaiMsg.setBizMsg(obj);
//                    
//                    this.reqEaiMsg.setSvcPssSeq(this.reqEaiMsg.getCurrentSvcMsg().getNxtSvcPssSeq());
//                    this.reqEaiMsg.getCurrentSvcMsg().setKeyMgtMsgVl(keyMgtMsgVl);    
//                    
//                    logger.debug("CompRRFCProcess] 다음 서비스 메시지 처리 순서는 [  " +this.reqEaiMsg.getSvcPssSeq()+" ] 입니다.");            
//        
//                    isFC = false;
//                    return false;
//                }  
//            } else {
//                
//                if (!isFistSvcMsg) {
//                    this.reqEaiMsg.setBizMsg(this.resEaiMsg.getBizMsg());
//                }
//                return false;   
//            } 
//        }
//	
//    }
//
//    public void setCompList() throws Exception
//    {
// 
//        logger.debug("CompRRFCProcess] 오류응답 여부를 확인합니다. ");
//        // 업무오류와 정상코드가 동일하므로 제거해야함 : 2008.06.03
//        //if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd()) || EAIMessageKeys.BWK_ERRMSG_CODE.equals(resEaiMsg.getRspErrCd())){
//        if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd())){
//            existNextSvcMsg =  false;
//            logger.debug("CompRRFCProcess] 오류 응답을 수신했습니다 " );
//        
//            //String tranClassify = this.resEaiMsg.getKesaMsg().getCTranClassify();
//            String telgmDmndDstcd = this.resEaiMsg.getKbMsg().getKBHeader().getTelgmDmndDstcd();
//            if (!MessageUtil.checkRspErrCd(this.resEaiMsg.getRspErrCd())) {
//                //if (EAIKeys.TR_RES.equals(tranClassify) || EAIKeys.TR_CANCEL_RES.equals(tranClassify) || EAIKeys.TR_NET_RES.equals(tranClassify) || EAIKeys.TR_SYSTEMINFO_RES.equals(tranClassify)){
//                if(KBMessageKeys.TELGMDMNDDSTCD_RECV.equals(telgmDmndDstcd)) {
//                    if (this.reqEaiMsg.getCurrentSvcMsg().getCpnsSvcPssCd() != null && this.reqEaiMsg.getCurrentSvcMsg().getCpnsSvcPssCd().length() > 0) {
//                        if (this.compList == null ){
//                            this.compList = new int[svcMsgSize];
//                        }
//                        this.compList[callCount] = this.reqEaiMsg.getCurrentSvcMsg().getSvcPssSeq();
//                        logger.debug("CompRRFCProcess] 보상거래를 등록 합니다. -  " + this.compList[callCount]);
//                        callCount++;       
//                    }
//                }
//            }
//        } else {
//            if (this.reqEaiMsg.getCurrentSvcMsg().getCpnsSvcPssCd() != null && this.reqEaiMsg.getCurrentSvcMsg().getCpnsSvcPssCd().length() > 0) {
//                if (this.compList == null ){
//                    this.compList = new int[svcMsgSize];
//                }
//                this.compList[callCount] = this.reqEaiMsg.getCurrentSvcMsg().getSvcPssSeq();
//                logger.debug("CompRRFCProcess] 보상거래를 등록 합니다. -  " + this.compList[callCount]);
//                callCount++;       
//            }
//        }
//    }
//} 
//
