/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKLcsRenkeiUtil
*   ソースファイル名：JCKLcsRenkeiUtil.java
*   作成者          ：富士通
*   日付            ：2011年07月01日
*＜機能概要＞
*   LCS連携(AxM,CCMG)にかかる通信機能を提供する。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/01   FJ）眞方    新規作成
*   v28.00.00   2016/09/30   FJ）澤田    【ANK-3032-00-00】AxM再構築対応
*   v28.01.00   2016/11/04   FJ）澤田    【IT1-2016-0000156】削除連携時の指示書テーブル処理内容変更
*   v28.01.01   2016/11/22   FJ)舘山     【ST-2016-0000042】自動ロックの設定値誤り
*   v28.01.02   2016/11/25   FJ)舘山     【ST-2016-0000047】更新年月日時分秒編集漏れ対応
*   v28.01.03   2016/11/31   FJ)舘山     【ST-2016-0000047】ログへ出力へのパスワードマスク化対応
*   v47.00.00   2019/11/12   FJ) 三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*   v47.00.01   2019/12/25   FJ) 三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*   v47.00.02   2020/01/14   FJ) 三原    【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*	v48.00.00	2020/02/25	 FJ)張本     【ANK-3771-00-00】ソーシャルIDログイン機能導入対応
*	v53.00.00	2021/05/07	 FJ）星野	【ANK-4009-00-00】CX戦略WG方針対応
*   v53.00.01	2021/04/30	 GDC)ジョバニー 	【ANK-4009-00-00】CX戦略WG方針対応（異動シェア分・API）
*   v53.00.02	2021/05/29	 FJ）星野 	  ST-2021-0000007
*	v60.00.00	2022/08/03	 FJ)北村	 【ANK-4236-00-00】【eo】生体認証パスワードレス認証導入対応
*	v60.00.01	2022/09/28	 FJ)北村	 【ANK-4236-02-00】【eo】生体認証パスワードレス認証導入対応(仕変2)
*	v60.00.02	2022/09/30	 FJ)北川	 【ANK-4236-02-00】【eo】生体認証パスワードレス認証導入対応(仕変2)
*	v62.00.00	2022/10/17	 FJ)北村	 【ANK-4355-00-00】【eo】ユーザー更新API連続実行解消対応
**********************************************************************/

package eo.ejb.common;

import static eo.common.constant.JCKStrConst.*;
import static eo.common.util.JCKLcsCommonUtil.*;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import eo.common.util.JCKLcsCommonUtil;
import eo.common.util.JCKLcsDataConverter;
import eo.ejb.common.JCCModelCommon;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.apache.commons.httpclient.params.HttpMethodParams;

import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * <p>旧LCSの連携処理にかかる各種機能を提供する。</p>
 * <BR>
 * @ author 富士通
 */
public class JCKLcsRenkeiUtil
{
	/**
	 * AxM更新対象データを保持するマップキー名
	 * （当部品、及び 当部品を使用する処理からしか利用しない為、定数クラスには定義しない。）
	 **/
	public static final String COL_PROC_DIV          = "COL_PROC_DIV";
	public static final String COL_EOID              = "COL_EOID";
	public static final String COL_SYSID             = "COL_SYSID";
	public static final String COL_PASSWORD          = "COL_PASSWORD";
	public static final String COL_NICKNAME          = "COL_NICKNAME";
	public static final String COL_MEMBER_SBT        = "COL_MEMBER_SBT";
	public static final String COL_RRK_MAIL          = "COL_RRK_MAIL";
	public static final String COL_AGE_FLG           = "COL_AGE_FLG";
	public static final String COL_SEX_CD            = "COL_SEX_CD";
	public static final String COL_TOUROKU_FLG       = "COL_TOUROKU_FLG";
	public static final String COL_ISP_TEISHI_FLG    = "COL_ISP_TEISHI_FLG";
	public static final String COL_DOUI_FLG          = "COL_DOUI_FLG";
	public static final String COL_TEST_ID_FLG       = "COL_TEST_ID_FLG";
	public static final String COL_ADMIN_FLG1        = "COL_ADMIN_FLG1";
	public static final String COL_ADMIN_FLG2        = "COL_ADMIN_FLG2";
	public static final String COL_ADMIN_FLG3        = "COL_ADMIN_FLG3";
	public static final String COL_MEMBER_STAT       = "COL_MEMBER_STAT";
	public static final String COL_SBT_TOKUTEI_FLG   = "COL_SBT_TOKUTEI_FLG";
	public static final String COL_UPDATE_DTM        = "COL_UPDATE_DTM";
	public static final String COL_PROC_DIV2         = "COL_PROC_DIV2";
	// ANK-3706-00-00 ADD START
	public static final String COL_AUTHENTICATION_LEVEL = "COL_AUTHENTICATION_LEVEL";
	public static final String COL_ONETIMEKEY_DESTINATION = "COL_ONETIMEKEY_DESTINATION";
	public static final String COL_MOBILE_NUMBER     = "COL_MOBILE_NUMBER";
	
	// SMS送信可マップ
	private static final String [] SMS_SEND_KA_MAP = {"090", "080", "070"};
	// SMS送信不可マップ
	private static final String [] SMS_SEND_HUKA_MAP = {"0800"};
	// ANK-3706-00-00 ADD END
	// ANK-4009-00-00 ADD START
	public static final String COL_HASHED_LOGIN_PASSWORD = "COL_HASHED_LOGIN_PASSWORD";
	public static final String COL_SUB_GOOGLE = "COL_SUB_GOOGLE";
	public static final String COL_SUB_YAHOO = "COL_SUB_YAHOO";
	public static final String COL_SUB_FACEBOOK = "COL_SUB_FACEBOOK";
	public static final String COL_SUB_APPLE = "COL_SUB_APPLE";
	// ANK-4009-00-00 ADD END

	/**
	 * AxMのAdminAPIに対して更新要求を送信します。
	 * @param sjishoNo 指示書番号
	 * @param sjishoNaiyoSeq 指示書内容枝番
	 * @param tranTrgtSysid 処理対象SYSID
	 * @param params パラメータ
	 * @return 処理結果コード ※1:成功、2:成功(パスワード更新APIの呼出も必要)、-1:失敗
	 * @throws Exception
	 */
	public static int requestAxmAdminApi(String sjishoNo, String sjishoNaiyoSeq, String tranTrgtSysid, String[] params) throws Exception
	{
		// ANK-3032-00-00 2016/09/30 DEL START
//		// デバッグログ出力
//		printDebugLog("JCKLcsRenkeiUtil.requestAxmAdminApi AxM連携(AdminAPI) - START -");
//		printDebugLog("JCKLcsRenkeiUtil.requestAxmAdminApi 入力パラメータ( params=" + convert2String(params) +  " )");
//
//		// パラメータ変換(String[] → Map)
//		Map<String, Object> paramMap = makeParamAdminApi(sjishoNo, sjishoNaiyoSeq, tranTrgtSysid, params);
//
//		int result = 0;
//
//		// テストモードに応じて通信する/しないを切り替える
//		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_AXM_ADMIN_API_TEST_MODE")))
//		{
//			printStubLog(LCS_RENKEI_STUB_FILE_AXM_ADMIN_API, paramMap);
//			result = getStubResult(LCS_RENKEI_STUB_FILE_AXM_ADMIN_API, tranTrgtSysid, 1);
//		}
//		else
//		{
//			String procDiv = (String) paramMap.get(COL_PROC_DIV);
//			String sysId = (String) paramMap.get(COL_SYSID);
//			String eoId = (String) paramMap.get(COL_EOID);
//			String password = (String) paramMap.get(COL_PASSWORD);
//
//			// AdminAPIのオブジェクト操作時にタイムアウトにする時間(ミリ秒)
//			Integer apiTimeout = Integer.parseInt(JCCModelCommon.getApplicationConst("ADMIN_API_METHOD_TIMEOUT"));
//
//			try
//			{
//				// 認証サーバ接続
//				APIServerProxy proxy = axmAdminApiConnect();
//
//				if (ADMIN_SJISHO_PARAM1_NEW.equals(procDiv))
//				{
//					// 既に登録のある場合は更新、無い場合は登録
//					if (getAxmUser(proxy, sysId) == null)
//					{
//						// 処理区分 ｢C｣:新規登録
//						setParamProcDiv2(params, paramMap, ADMIN_SJISHO_PARAM1_NEW);
//						registAxmUser(paramMap, proxy, apiTimeout);
//					}
//					else
//					{
//						// 処理区分 ｢U｣:更新
//						setParamProcDiv2(params, paramMap, ADMIN_SJISHO_PARAM1_UPD);
//						updateAxmUser(paramMap, proxy, apiTimeout);
//					}
//				}
//				else if (ADMIN_SJISHO_PARAM1_UPD.equals(procDiv))
//				{
//					// 処理区分 ｢U｣:更新
//					setParamProcDiv2(params, paramMap, procDiv);
//					updateAxmUser(paramMap, proxy, apiTimeout);
//				}
//				else if (ADMIN_SJISHO_PARAM1_DEL.equals(procDiv))
//				{
//					// 処理区分 ｢D｣:削除
//					setParamProcDiv2(params, paramMap, procDiv);
//					deleteAxmUser(paramMap, proxy, apiTimeout);
//				}
//				else if (ADMIN_SJISHO_PARAM1_UPD_PART.equals(procDiv))
//				{
//					// 処理区分 ｢PU｣:部分更新(指定された項目を更新)
//					setParamProcDiv2(params, paramMap, procDiv);
//					updateAxmUser(paramMap, proxy, apiTimeout);
//				}
//				else if (ADMIN_SJISHO_PARAM1_STOP_AUTH.equals(procDiv))
//				{
//					// 処理区分 ｢AL｣:認証停止
//					setParamProcDiv2(params, paramMap, procDiv);
//					accountLockAxmUser(paramMap, proxy, apiTimeout);
//				}
//				else if (ADMIN_SJISHO_PARAM1_RESUME_AUTH.equals(procDiv))
//				{
//					// 処理区分 ｢AR｣:認証停止解除
//					setParamProcDiv2(params, paramMap, procDiv);
//					accountLockAxmUser(paramMap, proxy, apiTimeout);
//				}
//				else if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//				{
//					// 処理区分 ｢CL｣:クリア（指定された項目をクリア)
//					setParamProcDiv2(params, paramMap, procDiv);
//					updateAxmUser(paramMap, proxy, apiTimeout);
//				}
//
//				// パスワード更新APIの実行要否を設定
//				String procDiv2 = (String) paramMap.get(COL_PROC_DIV2);
//				if ((ADMIN_SJISHO_PARAM1_NEW.equals(procDiv2))
//						|| (ADMIN_SJISHO_PARAM1_DEL.equals(procDiv2))
//						|| (ADMIN_SJISHO_PARAM1_UPD_PART.equals(procDiv2) && (password != null && (!"".equals(password))))
//						|| (ADMIN_SJISHO_PARAM1_UPD_PART.equals(procDiv2) && (eoId != null && (!"".equals(eoId))) || ((ADMIN_SJISHO_PARAM1_NEW
//								.equals(procDiv)) && (ADMIN_SJISHO_PARAM1_UPD.equals(procDiv2)))))
//				{
//					// 正常終了(パスワード更新APIの実行要)をセット
//					result = 2;
//				}
//				else
//				{
//					// 正常終了(パスワード更新APIの実行不要)をセット
//					result = 1;
//				}
//
//			}
//			catch (DuplicateObjectException doe)
//			{
//				result = -1;
//				printErrorLog("JCKLcsRenkeiUtil.requestAxmAdminApi [重複データあり SYSID:" + sysId + " eoID:" + eoId + "]");
//			}
//			catch (ObjectNotFoundException onfe)
//			{
//				if (ADMIN_SJISHO_PARAM1_DEL.equals(procDiv))
//				{
//					result = 1;
//					printErrorLog("JCKLcsRenkeiUtil.requestAxmAdminApi [更新データなし SYSID:" + sysId + " eoID:" + eoId + "]");
//				}
//				else
//				{
//					result = -1;
//					printErrorLog("JCKLcsRenkeiUtil.requestAxmAdminApi [更新データなし SYSID:" + sysId + " eoID:" + eoId + "]");
//				}
//			}
//			catch (Exception e)
//			{
//				result = -1;
//				printErrorLog(e, "JCKLcsRenkeiUtil.requestAxmAdminApi [システムエラー SYSID:" + sysId + " eoID:" + eoId + "]");
//			}
//			finally
//			{
//			}
//		}
//
//		printDebugLog("JCKLcsRenkeiUtil.requestAxmAdminApi result=" + result);
//		printDebugLog("JCKLcsRenkeiUtil.requestAxmAdminApi AxM連携(AdminAPI) -  END  -");
//		
//		return result;
		// ANK-3032-00-00 2016/09/30 DEL END
		// ANK-3032-00-00 2016/09/30 ADD START
		//AxMのAdminAPIからiDA WebAPIに変更
		return requestIdaWebApi(sjishoNo, sjishoNaiyoSeq, tranTrgtSysid, params);
		// ANK-3032-00-00 2016/09/30 ADD END
	}


	/**
	 * AxMのパスワード更新APIに対して更新要求を送信します。
	 * @param pgId 呼び出し元プログラムID
	 * @param tranTrgtSysid 処理対象SYSID
	 * @param params パラメータ文字列配列
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static int requestAxmPwdApi(String pgId, String tranTrgtSysid, String[] params) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi AxM連携(パスワード更新API) - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi 入力パラメータ( pgId=" + pgId + ",params=" + convert2String(params) + ")");
		// ANK-3032-00-00 2016/09/30 DEL START	
//		// パラメータ作成
//		Map<String, Object> paramMap = makeParamPwdApi(pgId, tranTrgtSysid, params);
//
//		// リクエスト送信先の取得
//		String url = JCCModelCommon.getApplicationConst("AXM_API_URL");
//		String apiName = JCCModelCommon.getApplicationConst("AXM_API_UPD_PWD");
//		String proxyHost   = JCCModelCommon.getApplicationConst("AXM_API_PROXY_HOST");
//		String proxyPortStr  = JCCModelCommon.getApplicationConst("AXM_API_PROXY_PORT");
//		Integer proxyPort  = ((proxyPortStr != null) && (!"".equals(proxyPortStr))) ? new Integer(proxyPortStr) : null;
//		Long timeout       = new Long(JCCModelCommon.getApplicationConst("AXM_API_TIMEOUT"));
//		int retryCnt       = Integer.parseInt(JCCModelCommon.getApplicationConst("AXM_API_RETRY_CNT"));
//		int retryInterval  = Integer.parseInt(JCCModelCommon.getApplicationConst("AXM_API_RETRY_INTERVAL"));;
//		String methodType  = AXM_PWD_UPD_API_REQUEST_METHOD;
//		String encoding    = AXM_PWD_UPD_API_REQUEST_ENCODING;
//
//		// テストモードに応じて通信する/しないを切り替える
//		String resultCd = null;
//		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_AXM_PWDUPD_API_TEST_MODE")))
//		{
//			String configFileName = LCS_RENKEI_STUB_FILE_AXM_PWDUPD_API;
//			resultCd = getStubResult(configFileName, tranTrgtSysid, "00");
//			printStubLog(configFileName, paramMap);
//		}
//		else
//		{
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi - パラメータ -------------------------------");
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi url   :" + url + apiName);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi param :" + paramMap);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi --------------------------------------------");
//
//			// リクエスト送信
//			String[] response = sendHttpRequest(url+apiName, proxyHost, 
//					proxyPort, timeout, retryCnt, retryInterval, methodType, encoding, paramMap);
//
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi - レスポンス -------------------------------");
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi httpStatus   : " + response[0]);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi httpResponse : " + response[1]);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi --------------------------------------------");
//
//			// 処理結果の取得
//			String httpStatus   = response[0];
//			String responseText = response[1];
//			resultCd = getAxmPwdResultCd(httpStatus, responseText);
//		}
//
		// ANK-3032-00-00 2016/09/30 DEL END
		// ANK-3032-00-00 2016/09/30 ADD START
		//常に正常（00）で設定
		String resultCd = "00";
		// ANK-3032-00-00 2016/09/30 ADD END	
		printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi resultCd=" + resultCd);
		printDebugLog("JCKLcsRenkeiUtil.requestAxmPwdApi AxM連携(パスワード更新API) -  END  -");
		
		
		// 結果に応じて結果コードを返却
		return (("0".equals(resultCd) || "00".equals(resultCd))) ? 1 : -1;
	}

	/**
	 * AxMのレプリカ更新APIに対して更新要求を送信します。
	 * @param sjishoNo 指示書No
	 * @param sjishoNaiyoSeq 指示書枝番
	 * @param trgtTableId 処理対象テーブルID
	 * @param param パラメータs
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static int requestAxmReplicaApi(String sysid, String sjishoNo, String sjishoNaiyoSeq, String trgtTableId, String[] params) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi AxM連携(レプリカ更新API) - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi 入力パラメータ( sjishoNo=" + sjishoNo + ",sjishoNaiyoSeq=", sjishoNaiyoSeq ,
				",trgtTableId=" + trgtTableId + ",params=" + convert2String(params) + " )");
		// ANK-3032-00-00 2016/09/30 DEL START	
//		// パラメータ作成
//		Map<String, Object> paramMap = makeParamReplicaApi(sjishoNo, sjishoNaiyoSeq, trgtTableId, params);
//
//		// リクエスト送信先の取得
//		String url = JCCModelCommon.getApplicationConst("AXM_API_URL");
//		String apiName = JCCModelCommon.getApplicationConst("AXM_API_UPD_REPLICA");
//		String proxyHost   = null;
//		Integer proxyPort  = null;
//		Long timeout       = new Long(JCCModelCommon.getApplicationConst("AXM_API_TIMEOUT"));
//		int retryCnt       = Integer.parseInt(JCCModelCommon.getApplicationConst("AXM_API_RETRY_CNT"));
//		int retryInterval  = Integer.parseInt(JCCModelCommon.getApplicationConst("AXM_API_RETRY_INTERVAL"));;
//		String methodType  = AXM_REP_UPD_API_REQUEST_METHOD;
//		String encoding    = AXM_REP_UPD_API_REQUEST_ENCODING;
//		
//		// テストモードに応じて通信する/しないを切り替える
//		String resultCd = null;
//		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_AXM_REPUPD_API_TEST_MODE")))
//		{
//			String configFileName = LCS_RENKEI_STUB_FILE_AXM_REPUPD_API;
//			resultCd = getStubResult(configFileName, sysid, "00");
//			printStubLog(configFileName, paramMap);
//		}
//		else
//		{
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi - パラメータ -------------------------------");
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi url   :" + url + apiName);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi param :" + paramMap);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi --------------------------------------------");
//
//			// リクエスト送信
//			String[] response = sendHttpRequest(url+apiName, proxyHost, 
//					proxyPort, timeout, retryCnt, retryInterval, methodType, encoding, paramMap);
//
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi - レスポンス -------------------------------");
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi httpStatus   : " + response[0]);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi httpResponse : " + response[1]);
//			printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi --------------------------------------------");
//
//			// 処理結果を取得
//			String httpStatus   = response[0];
//			String responseText = response[1];
//			resultCd = getAxmReplicaResultCd(httpStatus, responseText);
//		}
		// ANK-3032-00-00 2016/09/30 DEL END
		// ANK-3032-00-00 2016/09/30 ADD START
		//常に正常（00）で設定
		String resultCd = "00";
		// ANK-3032-00-00 2016/09/30 ADD END
		printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi resultCd=" + resultCd);
		printDebugLog("JCKLcsRenkeiUtil.requestAxmReplicaApi AxM連携(レプリカ更新API) -  END  -");

		// 結果に応じて結果コードを返却
		return (("0".equals(resultCd) || "00".equals(resultCd))) ? 1 : -1;
	}

	// ANK-3032-00-00 2016/09/30 DEL START
//	/**
//	 * AxMのAdminAPIに渡すパラメータを作成する。
//	 * @param sjishoNo 指示書番号
//	 * @param sjishoNaiyoSeq 指示書内容枝番
//	 * @param tranTrgtSysid 処理対象SYSID
//	 * @param params パラメータ(文字列配列)
//	 * @return パラメータ(マップオブジェクト)
//	 */
//	private static Map<String, Object> makeParamAdminApi(String sjishoNo, String sjishoNaiyoSeq, String tranTrgtSysid, String[] params)
//	{
//		Map<String, Object> paramMap = new HashMap<String, Object>();
//		paramMap.put(JCKLcsRenkeiUtil.COL_PROC_DIV, params[0]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_EOID, params[1]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_SYSID, tranTrgtSysid);
//		paramMap.put(JCKLcsRenkeiUtil.COL_PASSWORD, params[3]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_NICKNAME, params[4]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_MEMBER_SBT, params[5]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_RRK_MAIL, params[6]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_AGE_FLG, params[7]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_SEX_CD, params[8]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_TOUROKU_FLG, params[9]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_ISP_TEISHI_FLG, params[10]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_DOUI_FLG, params[11]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_TEST_ID_FLG, params[12]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_ADMIN_FLG1, params[13]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_ADMIN_FLG2, params[14]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_ADMIN_FLG3, params[15]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_MEMBER_STAT, params[16]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_SBT_TOKUTEI_FLG, params[17]);
//		paramMap.put(JCKLcsRenkeiUtil.COL_UPDATE_DTM, JCKLcsCommonUtil.formatDtm4AxmAdminApi(params[18]));
//
//		return paramMap;
//	}
//
//	/**
//	 * 実際に実行された処理区分(パラメータ51番目)をパラメータオブジェクトにセットする。
//	 * @param params パラメータ(文字配列)
//	 * @param paramMap パラメータ(Mapオブジェクト)
//	 * @param value 実際に実行された処理区分
//	 */
//	private static void setParamProcDiv2(String[] params, Map<String, Object> paramMap, String value){
//
//		params[50] = value;
//		paramMap.put(COL_PROC_DIV2, value);
//	}
//
//	/**
//	 * パスワードAPI呼出用のパラメータを作成する。
//	 * @param pgId プログラムID
//	 * @param tranTrgtSysid 処理対象SYSID
//	 * @param params パラメータ(文字配列)
//	 * @return パラメータ(Mapオブジェクト)
//	 */
//	private static Map<String, Object> makeParamPwdApi(String pgId, String tranTrgtSysid, String[] params)
//	{
//		Map<String, Object> paramPwd = new HashMap<String, Object>();
//
//		String procDiv  = params[0];
//		String procDiv2 = params[50];
//		String sysId    = tranTrgtSysid;
//		String eoId     = (params[1] != null) ? params[1] : "";
//		String pwd      = (params[3] != null) ? params[3] : "";
//
//		if (ADMIN_SJISHO_PARAM1_NEW.equals(procDiv2)) {
//			paramPwd.put("syrKbn", ADMIN_SJISHO_PARAM1_NEW);				// 処理区分(登録)
//		} else if(ADMIN_SJISHO_PARAM1_UPD_PART.equals(procDiv2)) {
//			paramPwd.put("syrKbn", ADMIN_SJISHO_PARAM1_UPD);				// 処理区分(更新)
//		} else if(ADMIN_SJISHO_PARAM1_DEL.equals(procDiv2)) {
//			paramPwd.put("syrKbn", ADMIN_SJISHO_PARAM1_DEL);				// 処理区分(削除)
//		} else if(ADMIN_SJISHO_PARAM1_NEW.equals(procDiv) && ADMIN_SJISHO_PARAM1_UPD.equals(procDiv2)) {
//			paramPwd.put("syrKbn", ADMIN_SJISHO_PARAM1_UPD);				// 処理区分(重複有りで登録を実行)
//		}
//
//		paramPwd.put("sysid", sysId);			// ＳＹＳＩＤ
//		paramPwd.put("eoid", eoId);				// eoID
//		paramPwd.put("passWord", pwd);			// パスワード
//		paramPwd.put("tntusyCd", pgId);			// 担当者コード
//		paramPwd.put("rsaFlg", "L");			// RSA更新無効フラグ
//
//		return paramPwd;
//	}
//
//	/**
//	 * AxMのレプリカ更新APIに渡すパラメータを作成する。
//	 * @param sjishoNo 指示書No
//	 * @param sjishoNaiyoSeq 指示書枝番
//	 * @param trgtTableId 処理対象テーブルID
//	 * @return パラメータ(Mapオブジェクト)
//	 */
//	private static Map<String, Object> makeParamReplicaApi(String sjishoNo, String sjishoNaiyoSeq, String trgtTableId, String[] params)
//	{
//		Map<String, Object> param = new HashMap<String, Object>();
//		param.put("shijiPara", makeShijiParaAxmReplica(sjishoNo, sjishoNaiyoSeq, trgtTableId, params));
//
//		return param;
//	}
//
//	/**
//	 * AxMのレプリカ更新APIに渡すパラメータ文字列(shijiPara)を作成する。
//	 * @param sjishoNo 指示書No
//	 * @param sjishoNaiyoSeq 指示書枝番
//	 * @param trgtTableId 処理対象テーブルID
//	 * @return パラメータ文字列
//	 */
//	private static String makeShijiParaAxmReplica(String sjishoNo, String sjishoNaiyoSeq, String trgtTableId, String[] params)
//	{
//		trgtTableId = (trgtTableId != null) ? trgtTableId.trim() : "";
//
//		// 登録・更新日時の形式をレプリカ連携用に変換する
//		params = formatDtmForAxmReplica(trgtTableId, params);
//
//		String param1 = params[0];
//		String param2 = params[1];
//		String param3 = params[2];
//		String param4 = params[3];
//		String param5 = params[4];
//		String param6 = params[5];
//		String param7 = params[6];
//		String param8 = params[7];
//		String param9 = params[8];
//		String param10 = params[9];
//		String param11 = params[10];
//		String param12 = params[11];
//		String param13 = params[12];
//		String param14 = params[13];
//		String param15 = params[14];
//		String param16 = params[15];
//		String param17 = params[16];
//		String param18 = params[17];
//		String param19 = params[18];
//		String param20 = params[19];
//		String param21 = params[20];
//		String param22 = params[21];
//		String param23 = params[22];
//
//		String dataList = "";
//
//		dataList  = sjishoNo;       // 指示書No
//		dataList += ",";
//		dataList += sjishoNaiyoSeq; // 指示書内容枝番
//		dataList += ",";
//		dataList += trgtTableId;    // 対象テーブルID
//		dataList += ",";
//		if ((param1 != null) && (!"".equals(param1)))
//		{
//			dataList += param1; // para1
//		}
//		dataList += ",";
//		if ((param2 != null) && (!"".equals(param2)))
//		{
//			dataList += param2; // para2
//		}
//		dataList += ",";
//		if ((param3 != null) && (!"".equals(param3)))
//		{
//			dataList += param3; // para3
//		}
//		dataList += ",";
//		if ((param4 != null) && (!"".equals(param4)))
//		{
//			dataList += param4; // para4
//		}
//		dataList += ",";
//		if ((param5 != null) && (!"".equals(param5)))
//		{
//			dataList += param5; // para5
//		}
//		dataList += ",";
//		if ((param6 != null) && (!"".equals(param6)))
//		{
//			dataList += param6; // para6
//		}
//		dataList += ",";
//		if ((param7 != null) && (!"".equals(param7)))
//		{
//			dataList += param7; // para7
//		}
//		if ("TNM00070".equals(trgtTableId))
//		{
//			return dataList + "\r\n";
//		}
//		if ("TNM00020_A".equals(trgtTableId))
//		{
//			return dataList + "\r\n";
//		}
//		dataList += ",";
//		if ((param8 != null) && (!"".equals(param8)))
//		{
//			dataList += param8; // para8
//		}
//		dataList += ",";
//		if ((param9 != null) && (!"".equals(param9)))
//		{
//			dataList += param9; // para9
//		}
//		dataList += ",";
//		if ((param10 != null) && (!"".equals(param10)))
//		{
//			dataList += param10; // para10
//		}
//		if (("TNM00030".equals(trgtTableId)) || ("TNM00030_D".equals(trgtTableId)))
//		{
//			return dataList + "\r\n";
//		}
//		dataList += ",";
//		if ((param11 != null) && (!"".equals(param11)))
//		{
//			dataList += param11; // param11
//		}
//		dataList += ",";
//		if ((param12 != null) && (!"".equals(param12)))
//		{
//			dataList += param12; // param12
//		}
//		dataList += ",";
//		if ((param13 != null) && (!"".equals(param13)))
//		{
//			dataList += param13; // param13
//		}
//		if (("TNM00040".equals(trgtTableId)) || ("TNM00040_D".equals(trgtTableId)))
//		{
//			return dataList + "\r\n";
//		}
//		if (("TNM00060".equals(trgtTableId)) || ("TNM00060_D".equals(trgtTableId)))
//		{
//			return dataList + "\r\n";
//		}
//		dataList += ",";
//		if ((param14 != null) && (!"".equals(param14)))
//		{
//			dataList += param14; // param14
//		}
//		if (("TNM00050".equals(trgtTableId)) || ("TNM00050_D".equals(trgtTableId)))
//		{
//			return dataList + "\r\n";
//		}
//		dataList += ",";
//		if ((param15 != null) && (!"".equals(param15)))
//		{
//			dataList += param15; // param15
//		}
//		dataList += ",";
//		if ((param16 != null) && (!"".equals(param16)))
//		{
//			dataList += param16; // param16
//		}
//		dataList += ",";
//		if ((param17 != null) && (!"".equals(param17)))
//		{
//			dataList += param17; // param17
//		}
//		dataList += ",";
//		if ((param18 != null) && (!"".equals(param18)))
//		{
//			dataList += param18; // param18
//		}
//		dataList += ",";
//		if ((param19 != null) && (!"".equals(param19)))
//		{
//			dataList += param19; // param19
//		}
//		dataList += ",";
//		if ((param20 != null) && (!"".equals(param20)))
//		{
//			dataList += param20; // param20
//		}
//		dataList += ",";
//		if ((param21 != null) && (!"".equals(param21)))
//		{
//			dataList += param21; // param21
//		}
//		dataList += ",";
//		if ((param22 != null) && (!"".equals(param22)))
//		{
//			dataList += param22; // param22
//		}
//		dataList += ",";
//		dataList += param23; // param23
//
//		return dataList + "\r\n";
//	}
//
//	/**
//	 * 登録・更新日時形式変換(レプリカ連携用)。<br />
//	 * ※登録・更新日時の形式をレプリカ連携用に変換する。<br />
//	 * @param trgtTableId 対象テーブルID
//	 * @param params 指示書パラメータ
//	 * @return 指示書パラメータ
//	 */
//	private static String[] formatDtmForAxmReplica(String trgtTableId, String[] params)
//	{
//
//		if ("TNM00020".equals(trgtTableId))
//		{
//			params[16] = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[16]);//パラメータ17（登録日時）
//			params[19] = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[19]);//パラメータ20（更新日時）
//			params[18] = PGID_FOR_AXM_REP_UPD_API;                             //パラメータ19（登録PGID）
//			params[21] = PGID_FOR_AXM_REP_UPD_API;                             //パラメータ22（更新PGID）
//		}
//		else if ("TNM00020_A".equals(trgtTableId))
//		{
//			params[4]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[4]);//パラメータ5（更新日時）
//			params[6]  = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ7（更新PGID）
//		}
//		else if (JCKLcsCommonUtil.inArray(trgtTableId, "TNM00030", "TNM00030_D"))
//		{
//			params[4]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[4]);//パラメータ5（登録日時）
//			params[7]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[7]);//パラメータ8（更新日時）
//			params[6]  = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ7（登録PGID）
//			params[9]  = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ10（更新PGID）
//		}
//		else if (JCKLcsCommonUtil.inArray(trgtTableId, "TNM00040", "TNM00040_D"))
//		{
//			params[5]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[5]);//パラメータ6（登録日時）
//			params[8]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[8]);//パラメータ9（更新日時）
//			params[7]  = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ8（登録PGID）
//			params[10] = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ11（更新PGID）
//		}
//		else if (JCKLcsCommonUtil.inArray(trgtTableId, "TNM00050", "TNM00050_D"))
//		{
//			params[8]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[8]); //パラメータ9（登録日時）
//			params[11] = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[11]);//パラメータ12（更新日時）
//			params[10] = PGID_FOR_AXM_REP_UPD_API;                             //パラメータ11（登録PGID）
//			params[13] = PGID_FOR_AXM_REP_UPD_API;                             //パラメータ14（更新PGID）
//		}
//		else if (JCKLcsCommonUtil.inArray(trgtTableId, "TNM00060", "TNM00060_D"))
//		{
//			params[6]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[6]);//パラメータ7（登録日時）
//			params[9]  = JCKLcsCommonUtil.formatDtm4AxmReplicaApi(params[9]);//パラメータ10（更新日時）
//			params[8]  = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ9（登録PGID）
//			params[11] = PGID_FOR_AXM_REP_UPD_API;                            //パラメータ12（更新PGID）
//		}
//		return params;
//	}
//
//	/**
//	 * 認証サーバ接続
//	 * @return APIServerProxy
//	 * @throws IOException
//	 * @throws APIException
//	 */
//	private static APIServerProxy axmAdminApiConnect() throws Exception
//	{
//		printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA open  * start ------------------------------");
//
//		String adminApiHost1 = JCCModelCommon.getApplicationConst("ADMIN_API_HOST1");				// AdminAPIホスト名(1)
//		String adminApiPort1 = JCCModelCommon.getApplicationConst("ADMIN_API_PORT1");				// AdminAPIポート番号(1)
//		String adminApiHost2 = JCCModelCommon.getApplicationConst("ADMIN_API_HOST2");				// AdminAPIホスト名(2)
//		String adminApiPort2 = JCCModelCommon.getApplicationConst("ADMIN_API_PORT2");				// AdminAPIポート番号(2)
//		String adminApiAccount = JCCModelCommon.getApplicationConst("ADMIN_API_ACCOUNT");			// AdminAPI管理者アカウント
//		String adminApiPassWord = JCCModelCommon.getApplicationConst("ADMIN_API_PASSWORD");			// AdminAPI管理者パスワード
//		String adminApiGroup = JCCModelCommon.getApplicationConst("ADMIN_API_GROUP");				// AdminAPI管理者グループ
//		String adminApiRole = JCCModelCommon.getApplicationConst("ADMIN_API_USER_ROLE");			// AdminAPI管理者ロール
//		String adminApiRetry = JCCModelCommon.getApplicationConst("ADMIN_API_RETRY_CNT");			// AdminAPI接続リトライ回数
//		String adminApiTimeOut = JCCModelCommon.getApplicationConst("ADMIN_API_TIMEOUT");			// AdminAPI接続タイムアウト時間
//		String adminApiInterval = JCCModelCommon.getApplicationConst("ADMIN_API_RETRY_INTERVAL");	// AdminAPI接続リトライインターバル(S)
//
//		// パスワードを復元
//		adminApiPassWord = JCCModelCommon.getDecryptResultPassword(adminApiPassWord);
//
//		// 最初に１のホスト・ポートに接続を行い、リトライ回数処理が失敗した場合は、２のホスト・ポートに接続を行う
//		APIServerProxy proxy = null;
//		boolean fConnect = false;
//		Exception lastException = null;
//
//		int retry  = Integer.valueOf(adminApiRetry);
//		int tiomeOut = Integer.valueOf(adminApiTimeOut);
//		int interval = Integer.valueOf(adminApiInterval);
//		for (int k = 0; k < 2; k++)
//		{
//			if (fConnect == false)
//			{
//				String port = "";
//				String host = "";
//				if (k == 0)
//				{
//					port = adminApiPort1;
//					host = adminApiHost1;
//				}
//				else
//				{
//					port = adminApiPort2;
//					host = adminApiHost2;
//				}
//
//				int portNo = Integer.valueOf(port);
//				printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA ConnectionDescriptor  * start ------------------------------");
//				ConnectionDescriptor eserver = new ConnectionDescriptor(host, portNo, ConnectionDescriptor.SSL_ANON, tiomeOut);
//				printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA ConnectionDescriptor  * end ------------------------------");
//
//				printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA APIServerProxy  * start ------------------------------");
//				proxy = new APIServerProxy(eserver);
//				printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA APIServerProxy  * end ------------------------------");
//
//				// 接続失敗時は、リトライ回数分処理を繰り返す
//				for (int l = 0; l < retry; l++)
//				{
//					fConnect = true;
//					try
//					{
//						printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA connect  * start ------------------------------");
//						proxy.connect(adminApiAccount, adminApiPassWord, adminApiGroup, adminApiRole);
//						printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA connect  * end ------------------------------");
//					}
//					catch (Exception e)
//					{
//						fConnect = false;
//						lastException = e;
//						e.printStackTrace();
//						Thread.sleep(interval);
//					}
//
//					if (fConnect == true)
//					{
//						break;
//					}
//				}
//			}
//			else
//			{
//				break;
//			}
//		}
//
//		// ２箇所の接続に失敗した場合は、最後の例外をスロー。
//		if (fConnect == false)
//		{
//			printErrorLog(lastException, "JCKLcsRenkeiUtil.axmAdminApiConnect 接続エラー");
//			throw lastException;
//		}
//
//		printDebugLog("JCKLcsRenkeiUtil.axmAdminApiConnect --------------------------- RSA open  * end ------------------------------");
//
//		return proxy;
//	}
//
//	/**
//	 * AxMのAPIを利用してユーザ情報を取得する。
//	 * @param apiServerProxy
//	 * @param sysId
//	 * @return IUserオブジェクト
//	 * @throws BadArgumentException
//	 * @throws ObjectNotFoundException
//	 * @throws TransportException
//	 * @throws IOException
//	 */
//	private static IUser getAxmUser(APIServerProxy apiServerProxy, String sysId)
//	         throws BadArgumentException, TransportException, IOException
//	{
//		// 最初のユーザを取得
//		IUser iUser = null;
//		try
//		{
//			// ユーザプロパティ｢SYSID｣をキーとして検索を行う
//			IUserSearch userSearch = apiServerProxy.searchUserObjects();
//			StringCriterion stringCriterion = new StringCriterion(StringCriterion.EQUALS, sysId);
//			UserPropertyCriterion userPropertyCriterion = new UserPropertyCriterion("sysid", stringCriterion);
//			userSearch.putUserPropertyCriterion(userPropertyCriterion);
//			ISparseData isParseData = userSearch.search();
//			iUser = (IUser) isParseData.getByIndex(0);
//		}
//		catch (ObjectNotFoundException e)
//		{
//			// ユーザが存在しない場合は何もしない(nullを返却)
//		}
//
//		return iUser;
//	}
//
//	/**
//	 * AxMのAPIを利用してユーザ情報を登録します。
//	 * @param apiBean
//	 * @param proxy
//	 * @param timeout
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private static void registAxmUser(Map updData, APIServerProxy proxy, int timeout) throws Exception
//	{
//		String eoId     = (String)updData.get(COL_EOID);
//		String password = (String)updData.get(COL_PASSWORD);
//
//		// ユーザー登録
//		String adminApiRole = JCCModelCommon.getApplicationConst("ADMIN_API_USER_GROUP");   // ユーザグループ
//		String aName = eoId;                                                                // ユーザID
//		boolean isPublic = false;                                                         // 可視性
//		Date startDate = new Date();                                                       // アカウント開始日
//		Date endDate = new SimpleDateFormat("yyyyMMddHHmmss").parse(AXM_USER_EXP_DATE);    // アカウント有効期限
//		String firstName = "";                                                             // 名
//		String lastName = eoId;                                                            // 姓 
//		String emailAddr = "";                                                             // メールアドレス
//		boolean isLockedOut = false;                                                     // ロックアウト
//
//		IUser user = proxy.createUser(aName, isPublic, startDate, endDate, firstName,
//		                              lastName, emailAddr, password, isLockedOut);
//		// プロパティ設定
//		setPropertiesAxmUser(user, updData);
//
//		// ユーザ登録
//		//user.save();
//		if (!JCKLcsAxmObjectAccess.apiSave(user, timeout)){
//
//			// タイムアウト時は、ユーザを削除
//			try
//			{
//				JCKLcsAxmObjectAccess.apiDelete(user, timeout);
//			}
//			catch (Exception e)
//			{
//			}
//			throw new RuntimeException("AxM連携タイムアウト（ユーザ登録）");
//		}
//
//		// ユーザグループ設定
//		try
//		{
//			// グループ設定
//			ISparseData sparseData = proxy.getGroups();
//			IGroup group = (IGroup) sparseData.getByName(adminApiRole);
//			group.addChild(user);
//
//			// グループ登録
//			//group.save();
//			if (!JCKLcsAxmObjectAccess.apiSave(group, timeout))
//			{
//				// タイムアウト時は、グループを削除
//				try
//				{
//					JCKLcsAxmObjectAccess.apiDelete(group, timeout);
//				}
//				catch (Exception e)
//				{
//				}
//
//				// グループ登録のタイムアウト時はユーザも削除
//				//user.delete();
//				try
//				{
//					JCKLcsAxmObjectAccess.apiDelete(user, timeout);
//				}
//				catch (Exception e)
//				{
//				}
//				throw new RuntimeException("AxM連携タイムアウト（グループ登録）");
//			}
//		}
//		catch (Exception e)
//		{
//			// グループ設定の失敗時は、ユーザも削除
//			//user.delete();
//			try
//			{
//				JCKLcsAxmObjectAccess.apiDelete(user, timeout);
//			}
//			catch (Exception e2)
//			{
//			}
//			throw e;
//		}
//	}
//
//	/**
//	 * AxMのAPIを利用してユーザ情報を更新します。
//	 * @param apiBean
//	 * @param proxy
//	 * @param timeout
//	 * @throws Exception 
//	 */
//	@SuppressWarnings("unchecked")
//	private static void updateAxmUser(Map updData, APIServerProxy proxy, int timeout) throws Exception
//	{
//		// ユーザ取得
//		IUser user = getAxmUser(proxy, (String) updData.get(COL_SYSID));
//		// 変更
//		setPropertiesAxmUser(user, updData);
//		// ユーザセーブ
//		//user.save();
//		adminApiSaveWithTimeout(user, timeout);
//	}
//
//	/**
//	 * AxMのAPIを利用してユーザ情報を削除します。
//	 * @param apiBean
//	 * @param proxy
//	 * @param timeout
//	 * @throws APIException 
//	 * @throws IOException 
//	 */
//	@SuppressWarnings("unchecked")
//	private static void deleteAxmUser(Map apiBean, APIServerProxy proxy, int timeout) throws IOException, APIException
//	{
//		// ユーザ取得
//		IUser user = getAxmUser(proxy, (String)apiBean.get(COL_SYSID));
//
//		// ユーザー削除
//		//user.delete();
//		adminApiDeleteWithTimeout(user, timeout);
//	}
//
//	/**
//	 * AxMのAPIを利用してユーザ情報をアカウントロックします。
//	 * @param apiBean
//	 * @param proxy
//	 * @param timeout
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private static void accountLockAxmUser(Map apiBean, APIServerProxy proxy, int timeout) throws Exception
//	{
//		// ユーザ取得
//		IUser user = getAxmUser(proxy, (String)apiBean.get(COL_SYSID));
//
//		// アカウントロック設定
//		if (ADMIN_SJISHO_PARAM1_STOP_AUTH.equals(apiBean.get(COL_PROC_DIV)))
//		{
//			// 処理区分 ｢AL｣:認証停止
//			user.setAdminLockedout(true);
//			// セーブ
//			//user.save();
//			adminApiSaveWithTimeout(user, timeout);
//		}
//		else if (ADMIN_SJISHO_PARAM1_RESUME_AUTH.equals(apiBean.get(COL_PROC_DIV)))
//		{
//			// 処理区分 ｢AR｣:認証停止解除
//			user.setAdminLockedout(false);
//			// セーブ
//			//user.save();
//			adminApiSaveWithTimeout(user, timeout);
//		}
//	}
//
//	/**
//	 * AxMのAPIを利用してユーザのプロパティ情報追加します。
//	 * @param user
//	 * @param apiBean
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private static void setPropertiesAxmUser(IUser user, Map updData) throws Exception
//	{
//		String procDiv       = (String)updData.get(COL_PROC_DIV);
//		String eoId          = (String)updData.get(COL_EOID);
//		String sysId         = (String)updData.get(COL_SYSID);
//		String pwd           = (String)updData.get(COL_PASSWORD);
//		String nickName      = (String)updData.get(COL_NICKNAME);
//		String memberSbt     = (String)updData.get(COL_MEMBER_SBT);
//		String rrkMail       = (String)updData.get(COL_RRK_MAIL);
//		String nenreiFlg     = (String)updData.get(COL_AGE_FLG);
//		String sexCd         = (String)updData.get(COL_SEX_CD);
//		String tuorokuFlg    = (String)updData.get(COL_TOUROKU_FLG);
//		String ispStopFlg    = (String)updData.get(COL_ISP_TEISHI_FLG);
//		String douiFlg       = (String)updData.get(COL_DOUI_FLG);
//		String testIdFlg     = (String)updData.get(COL_TEST_ID_FLG);
//		String adminFlg1     = (String)updData.get(COL_ADMIN_FLG1);
//		String adminFlg2     = (String)updData.get(COL_ADMIN_FLG2);
//		String adminFlg3     = (String)updData.get(COL_ADMIN_FLG3);
//		String memberStat    = (String)updData.get(COL_MEMBER_STAT);
//		String sbtTokuteiFlg = (String)updData.get(COL_SBT_TOKUTEI_FLG);
//		String updateDtm     = (String)updData.get(COL_UPDATE_DTM);
//
//		// ユーザID(eoID) & 姓
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			// ユーザID(eoID)はクリア対象外項目
//		}
//		else
//		{
//			if ((eoId != null) && (!"".equals(eoId)))
//			{
//				user.setName(eoId);
//				user.setLastName(eoId);
//			}
//		}
//
//		// sysid
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			// sysidはクリア対象外項目
//		}
//		else
//		{
//			if ((sysId != null) && (!"".equals(sysId)))
//			{
//				user.setUserProperty("sysid", sysId);
//			}
//		}
//
//		// パスワード
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			// パスワードはクリア対象外項目
//		}
//		else
//		{
//			if ((pwd != null) && (!"".equals(pwd)))
//			{
//				user.setPassword(pwd);
//			}
//		}
//
//		// ニックネーム
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((nickName != null) && (!"".equals(nickName)) && (SJISHO_PARAM_CLEAR_FIELD.equals(nickName)))
//			{
//				user.removeUserProperty("nk_nm");
//			}
//		}
//		else
//		{
//			if ((nickName != null) && (!"".equals(nickName)))
//			{
//				user.setUserProperty("nk_nm", nickName);
//			}
//		}
//
//		// 会員種別
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((memberSbt != null) && (!"".equals(memberSbt)) && (SJISHO_PARAM_CLEAR_FIELD.equals(memberSbt)))
//			{
//				user.removeUserProperty("kiin_shubt");
//			}
//		}
//		else
//		{
//			if ((memberSbt != null) && (!"".equals(memberSbt)))
//			{
//				user.setUserProperty("kiin_shubt", memberSbt);
//			}
//		}
//
//		// 連絡先ﾒｰﾙｱﾄﾞﾚｽ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((rrkMail != null) && (!"".equals(rrkMail)) && (SJISHO_PARAM_CLEAR_FIELD.equals(rrkMail)))
//			{
//				user.removeUserProperty("rnrksk_mr");
//			}
//		}
//		else
//		{
//			if ((rrkMail != null) && (!"".equals(rrkMail)))
//			{
//				user.setUserProperty("rnrksk_mr", rrkMail);
//			}
//		}
//
//		// 年齢フラグ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((nenreiFlg != null) && (!"".equals(nenreiFlg)) && (SJISHO_PARAM_CLEAR_FIELD.equals(nenreiFlg)))
//			{
//				user.removeUserProperty("age_flg");
//			}
//		}
//		else
//		{
//			if ((nenreiFlg != null) && (!"".equals(nenreiFlg)))
//			{
//				user.setUserProperty("age_flg", nenreiFlg);
//			}
//		}
//		// 性別
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((sexCd != null) && (!"".equals(sexCd)) && (SJISHO_PARAM_CLEAR_FIELD.equals(sexCd)))
//			{
//				user.removeUserProperty("sibt");
//			}
//		}
//		else
//		{
//			if ((sexCd != null) && (!"".equals(sexCd)))
//			{
//				user.setUserProperty("sibt", sexCd);
//			}
//		}
//
//		// 登録フラグ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((tuorokuFlg != null) && (!"".equals(tuorokuFlg)) && (SJISHO_PARAM_CLEAR_FIELD.equals(tuorokuFlg)))
//			{
//				user.removeUserProperty("turk_flg");
//			}
//		}
//		else
//		{
//			if ((tuorokuFlg != null) && (!"".equals(tuorokuFlg)))
//			{
//				user.setUserProperty("turk_flg", tuorokuFlg);
//			}
//		}
//
//		// ISP利用停止フラグ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((ispStopFlg != null) && (!"".equals(ispStopFlg)) && (SJISHO_PARAM_CLEAR_FIELD.equals(ispStopFlg)))
//			{
//				user.removeUserProperty("isp_ryu_tis_flg");
//			}
//		}
//		else
//		{
//			if ((ispStopFlg != null) && (!"".equals(ispStopFlg)))
//			{
//				user.setUserProperty("isp_ryu_tis_flg", ispStopFlg);
//			}
//		}
//
//		// 標準ｺﾝﾃﾝﾂ規約同意ﾌﾗｸﾞ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((douiFlg != null) && (!"".equals(douiFlg)) && (SJISHO_PARAM_CLEAR_FIELD.equals(douiFlg)))
//			{
//				user.removeUserProperty("hyojun_kntnt_dui_flg");
//			}
//		}
//		else
//		{
//			if ((douiFlg != null) && (!"".equals(douiFlg)))
//			{
//				user.setUserProperty("hyojun_kntnt_dui_flg", douiFlg);
//			}
//		}
//
//		// テスト用ＩＤフラグ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((testIdFlg != null) && (!"".equals(testIdFlg)) && (SJISHO_PARAM_CLEAR_FIELD.equals(testIdFlg)))
//			{
//				user.removeUserProperty("tst_id_flg");
//			}
//		}
//		else
//		{
//			if ((testIdFlg != null) && (!"".equals(testIdFlg)))
//			{
//				user.setUserProperty("tst_id_flg", testIdFlg);
//			}
//		}
//
//		// 管理者用フラグ(1)
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((adminFlg1 != null) && (!"".equals(adminFlg1)) && (SJISHO_PARAM_CLEAR_FIELD.equals(adminFlg1)))
//			{
//				user.removeUserProperty("admin_flg1");
//			}
//		}
//		else
//		{
//			if ((adminFlg1 != null) && (!"".equals(adminFlg1)))
//			{
//				user.setUserProperty("admin_flg1", adminFlg1);
//			}
//		}
//
//		// 管理者用フラグ(2)
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((adminFlg2 != null) && (!"".equals(adminFlg2)) && (SJISHO_PARAM_CLEAR_FIELD.equals(adminFlg2)))
//			{
//				user.removeUserProperty("admin_flg2");
//			}
//		}
//		else
//		{
//			if ((adminFlg2 != null) && (!"".equals(adminFlg2)))
//			{
//				user.setUserProperty("admin_flg2", adminFlg2);
//			}
//		}
//
//		// 管理者用フラグ(3)
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((adminFlg3 != null) && (!"".equals(adminFlg3)) && (SJISHO_PARAM_CLEAR_FIELD.equals(adminFlg3)))
//			{
//				user.removeUserProperty("admin_flg3");
//			}
//		}
//		else
//		{
//			if ((adminFlg3 != null) && (!"".equals(adminFlg3)))
//			{
//				user.setUserProperty("admin_flg3", adminFlg3);
//			}
//		}
//
//		// 会員状態
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((memberStat != null) && (!"".equals(memberStat)) && (SJISHO_PARAM_CLEAR_FIELD.equals(memberStat)))
//			{
//				user.removeUserProperty("jyoutai");
//			}
//		}
//		else
//		{
//			if ((memberStat != null) && (!"".equals(memberStat)))
//			{
//				user.setUserProperty("jyoutai", memberStat);
//			}
//		}
//
//		// 会員種別特定フラグ
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((sbtTokuteiFlg != null) && (!"".equals(sbtTokuteiFlg)) && (SJISHO_PARAM_CLEAR_FIELD.equals(sbtTokuteiFlg)))
//			{
//				user.removeUserProperty("kiin_tokutei");
//			}
//		}
//		else
//		{
//			if ((sbtTokuteiFlg != null) && (!"".equals(sbtTokuteiFlg)))
//			{
//				user.setUserProperty("kiin_tokutei", sbtTokuteiFlg);
//			}
//		}
//
//		// 更新年月日時分秒
//		if (ADMIN_SJISHO_PARAM1_CLEAR.equals(procDiv))
//		{
//			if ((updateDtm != null) && (!"".equals(updateDtm)) && (SJISHO_PARAM_CLEAR_FIELD.equals(updateDtm)))
//			{
//				user.removeUserProperty("u_date");
//			}
//		}
//		else
//		{
//			if ((updateDtm != null) && (!"".equals(updateDtm)))
//			{
//				user.setUserProperty("u_date", updateDtm);
//			}
//		}
//	}
//
//	/**
//	 * AdminApiオブジェクトのsaveメソッドを実行する。<br />
//	 * ※タイムアウト時はRuntimeExceptionが発生する。
//	 * @param object AdminApiオブジェクト
//	 * @param timeout タイムアウトにする時間(ミリ秒)
//	 * @throws IOException
//	 * @throws APIException
//	 */
//	private static void adminApiSaveWithTimeout(ICreatable object, int timeout) throws IOException, APIException
//	{
//		if (!JCKLcsAxmObjectAccess.apiSave(object, timeout))
//		{
//			throw new RuntimeException("AxM連携でタイムアウト発生");
//		}
//	}
//
//	/**
//	 * AdminApiオブジェクトのdeleteメソッドを実行する。<br />
//	 * ※タイムアウト時はRuntimeExceptionが発生する。
//	 * @param object AdminApiオブジェクト
//	 * @param timeout タイムアウトにする時間(ミリ秒)
//	 * @throws IOException
//	 * @throws APIException
//	 */
//	private static void adminApiDeleteWithTimeout(ICreatable object, int timeout) throws IOException, APIException
//	{
//		if (!JCKLcsAxmObjectAccess.apiDelete(object, timeout))
//		{
//			throw new RuntimeException("AxM連携でタイムアウト発生");
//		}
//	}
//
//	/**
//	 * AxMのパスワード更新APIのレスポンス文字列(XML)から処理結果を取得する。
//	 * @param httpStatus HTTPステータス
//	 * @param responseXml HTTPレスポンスボディ(文字列)
//	 * @return 処理結果コード
//	 */
//	private static String getAxmPwdResultCd(String httpStatus, String responseXml)
//	{
//		String resultCd = null;
//
//		if ("200".equals(httpStatus))
//		{
//			int cnt = responseXml.indexOf("<RETURN_CODE>");
//			resultCd = responseXml.substring(cnt + 13, cnt + 15);
//		}
//
//		return resultCd;
//	}
//
//	/**
//	 * AxMのレプリカ更新APIのレスポンス文字列(XML)から処理結果を取得する。
//	 * @param httpStatus HTTPステータス
//	 * @param responseText HTTPレスポンスボディ(文字列)
//	 * @return 処理結果コード
//	 */
//	@SuppressWarnings("unchecked")
//	private static String getAxmReplicaResultCd(String httpStatus, String responseXml)
//	{
//		String resultCd = null;
//
//		if ("200".equals(httpStatus))
//		{
//
//			try
//			{
//				Map<String, Object> map = JCKLcsDataConverter.parseXml(responseXml, "UTF-8");
//
//				printDebugLog("JCKLcsRenkeiUtil.getAxmReplicaResultCd ----- AxM連携(レプリカ更新API)結果(Map) START -----");
//				printDebugLog("JCKLcsRenkeiUtil.getAxmReplicaResultCd " + map.toString());
//				printDebugLog("JCKLcsRenkeiUtil.getAxmReplicaResultCd ----- AxM連携(レプリカ更新API)結果(Map)  END  -----");
//
//				Map rootElement = (Map) map.get("NGB04010_SEND");
//				Map shijishoList = (Map) rootElement.get("SHIJISYO_LIST");
//				Object shijishoInfos = shijishoList.get("SHIJISYO_INFO");
//				if (shijishoInfos instanceof List)
//				{
//					List shijishoInfoList = (List) shijishoInfos;
//					// 複数件の結果がある場合、1件でもエラーがある場合はエラーとして呼び出し元に通知する。
//					// （当ユーティリティを使用してAPI呼び出しを行っている場合は、基本的に複数件は無いはずだが。）
//					for (int i = 0; i < shijishoInfoList.size(); i++)
//					{
//						Map shijishoInfo = (Map) shijishoInfoList.get(i);
//						String nextResultCd = (String) shijishoInfo.get("RESULT_CD");
//						resultCd = ((resultCd != null) && (!"00".equals(resultCd))) ? resultCd : nextResultCd;
//					}
//				}
//				else
//				{
//					Map shijishoInfoMap = (Map) shijishoInfos;
//					resultCd = (String) shijishoInfoMap.get("RESULT_CD");
//				}
//			}
//			catch (Exception e)
//			{
//			}
//		}
//
//		return resultCd;
//	}
	// ANK-3032-00-00 2016/09/30 DEL END

	/**
	 * CCMGのコンテンツ全解約APIを呼び出します。<br />
	 * @param sysid SYSID
	 * @param updId 更新者ID
	 * @param updNm 更新者名
	 * @return 連携結果
	 */
	@SuppressWarnings("unchecked")
	public static Map callContSvcAllDsl(String sysid, String updId, String updNm)
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.callContSvcAllDsl CCMG連携(コンテンツ全解約API) - START -");
		printDebugLog("JCKLcsRenkeiUtil.callContSvcAllDsl 入力パラメータ( sysid=" + sysid + ",updId=" + updId + ",updNm=" + updNm + " )");

		Map resMap = null;
		Map reqData = new HashMap();
		try
		{
			// リクエストデータ設定
			reqData.put("INIT_SYS_ID", sysid);
			reqData.put("UPDATE_ID", updId);
			reqData.put("UPDATE_NAME", updNm);

			// CCMGへのAPIリクエスト実行
			resMap = requestCcmgApi("1", reqData);
		}
		catch (Exception e)
		{
			String errMsg = "JCKLcsRenkeiUtil.callContSvcAllDsl CCMG連携(コンテンツ全解約API)でエラー発生!! 入力データ:" + reqData;
			printErrorLog(e, errMsg);
		}

		printDebugLog("JCKLcsRenkeiUtil.callContSvcAllDsl CCMG連携(コンテンツ全解約API) -  END  -");

		return resMap;
	}

	/**
	 * CCMGの会員種別変更解約APIを呼び出します。<br />
	 * @param sysid SYSID
	 * @param mmbSbtBf 変更前会員種別
	 * @param mmbSbtAf 変更後会員種別
	 * @param updId 更新者ID
	 * @param updNm 更新者名
	 * @return 連携結果
	 */
	@SuppressWarnings("unchecked")
	public static Map callMbTypeChgeDslApi(String sysid, String mmbSbtBf, String mmbSbtAf, String updId, String updNm)
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.callMbTypeChgeDslApi CCMG連携(会員種別変更解約API) - START -");
		printDebugLog("JCKLcsRenkeiUtil.callMbTypeChgeDslApi 入力パラメータ( sysid=" + sysid + ",mmbSbtBf=" + mmbSbtBf + ",mmbSbtAf=" + mmbSbtAf + ",updId=",
				updId, ",updNm=" + updNm + " )");

		Map resMap = null;
		Map reqData = new HashMap();
		try
		{
			// リクエストデータ設定
			reqData.put("SYS_ID", sysid);
			reqData.put("MEMBER_CLASS_BEFORE", mmbSbtBf);
			reqData.put("MEMBER_CLASS_AFTER", mmbSbtAf);
			reqData.put("UPDATE_ID", updId);
			reqData.put("UPDATE_NAME", updNm);

			// CCMGへのAPIリクエスト実行
			resMap = requestCcmgApi("2", reqData);
		}
		catch (Exception e)
		{
			String errMsg = "JCKLcsRenkeiUtil.callMbTypeChgeDslApi CCMG連携(会員種別変更解約API)でエラー発生!! 入力データ:" + reqData;
			printErrorLog(e, errMsg);
		}

		printDebugLog("JCKLcsRenkeiUtil.callMbTypeChgeDslApi resMap=" + resMap);
		printDebugLog("JCKLcsRenkeiUtil.callMbTypeChgeDslApi CCMG連携(会員種別変更解約API) -  END  -");

		return resMap;
	}

	/**
	 * ISP決済方法変更APIを呼び出します。<br />
	 * @param sysid SYSID
	 * @param svcKeiNo サービス契約番号
	 * @param updId 更新者ID
	 * @param updNm 更新者名
	 * @return 連携結果
	 */
	@SuppressWarnings("unchecked")
	public static Map callIspksWayChgeApi(String sysid, String svcKeiNo, String updId, String updNm)
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.callIspksWayChgeApi CCMG連携(ISP決済方法変更API) - START -");
		printDebugLog("JCKLcsRenkeiUtil.callIspksWayChgeApi 入力パラメータ( sysid=" + sysid + ",svcKeiNo="+ svcKeiNo + ",updId=" + updId + ",updNm=" + updNm + " )");

		Map resMap = null;
		Map reqData = new HashMap();
		try
		{
			// リクエストデータ設定
			reqData.put("SYS_ID", sysid);
			reqData.put("SETTLEMENT_WAY_ID", svcKeiNo);
			reqData.put("UPDATE_ID", updId);
			reqData.put("UPDATE_NAME", updNm);

			// CCMGへのAPIリクエスト実行
			resMap = requestCcmgApi("3", reqData);
		}
		catch (Exception e)
		{
			String errMsg = "JCKLcsRenkeiUtil.callIspksWayChgeApi CCMG連携(ISP決済方法変更API)でエラー発生!! 入力データ:" + reqData;
			printErrorLog(e, errMsg);
		}

		printDebugLog("JCKLcsRenkeiUtil.callIspksWayChgeApi resMap=" + resMap);
		printDebugLog("JCKLcsRenkeiUtil.callIspksWayChgeApi CCMG連携(ISP決済方法変更API) -  END  -");

		return resMap;
	}

	/**
	 * ISP決済強制解約予告APIを呼び出します。<br />
	 * @param sysid SYSID
	 * @param updId 更新者ID
	 * @param updNm 更新者名
	 * @return 連携結果
	 */
	@SuppressWarnings("unchecked")
	public static Map callIspksDslYkkApi(String sysid, String updId, String updNm)
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.callIspksDslYkkApi CCMG連携(ISP決済強制解約予告API) - START -");
		printDebugLog("JCKLcsRenkeiUtil.callIspksDslYkkApi 入力パラメータ( sysid=" + sysid + ",updId=" + updId + ",updNm=" + updNm + " )");

		Map resMap = null;
		Map reqData = new HashMap();
		try
		{
			// リクエストデータ設定
			reqData.put("SYS_ID", sysid);
			reqData.put("UPDATE_ID", updId);
			reqData.put("UPDATE_NAME", updNm);

			// CCMGへのAPIリクエスト実行
			resMap = requestCcmgApi("4", reqData);
		}
		catch (Exception e)
		{
			String errMsg = "JCKLcsRenkeiUtil.callIspksDslYkkApi CCMG連携(ISP決済強制解約予告API)でエラー発生!! 入力データ:" + reqData;
			printErrorLog(e, errMsg);
		}

		printDebugLog("JCKLcsRenkeiUtil.callIspksDslYkkApi resMap=" + resMap);
		printDebugLog("JCKLcsRenkeiUtil.callIspksDslYkkApi CCMG連携(ISP決済強制解約予告API) -  END  -");

		return resMap;
	}

	/**
	 * リクエスト送信先サーバ情報取得。<br />
	 * @param funcCd 機能コード
	 * @return リクエスト送信先サーバ情報
	 */
	private static String[] getTargetServerInfo(String funcCd)
	{
		String apiName = null;
		
		if ("1".equals(funcCd))
		{
			apiName = JCCModelCommon.getApplicationConst("CCMG_API_ALL_DSL"); // コンテンツ全解約API
		}
		else if ("2".equals(funcCd))
		{
			apiName = JCCModelCommon.getApplicationConst("CCMG_API_UPD_MMB_SBT"); // 会員種別変更解約API
		}
		else if ("3".equals(funcCd))
		{
			apiName = JCCModelCommon.getApplicationConst("CCMG_API_UPD_ISP_PAYWAY"); // ISP決済方法変更API
		}
		else if ("4".equals(funcCd))
		{
			apiName = JCCModelCommon.getApplicationConst("CCMG_API_DSL_ISP_PAYWAY"); // ISP決済強制解約予告API
		}

		String[] serverInfo = new String[7];
		serverInfo[0] = JCCModelCommon.getApplicationConst("CCMG_API_URL");               // URL
		serverInfo[1] = apiName;                                                          // API名
		serverInfo[2] = JCCModelCommon.getApplicationConst("CCMG_API_PROXY_HOST");        // プロキシホスト
		serverInfo[3] = JCCModelCommon.getApplicationConst("CCMG_API_PROXY_PORT");        // プロキシポート
		serverInfo[4] = JCCModelCommon.getApplicationConst("CCMG_API_TIMEOUT");           // タイムアウト
		serverInfo[5] = JCCModelCommon.getApplicationConst("CCMG_API_RETRY_CNT");         // リトライ回数
		serverInfo[6] = JCCModelCommon.getApplicationConst("CCMG_API_RETRY_INTERVAL");    // リトライ間隔
		return serverInfo;
	}

	/**
	 * CCMGに対してHTTPリクエストを発行し結果を取得します。<br />
	 * @param funcCd 機能コード（1:コンテンツ全解約API、2:会員種別変更解約API、3:ISP決済方法変更API、4:ISP決済強制解約予告API）
	 * @param data リクエストデータ
	 * @return 処理結果
	 * @throws Exception  
	 */
	@SuppressWarnings("unchecked")
	private static Map requestCcmgApi(String funcCd, Map data) throws Exception
	{

		// リクエスト送信先情報の取得
		String[] serverInfo = getTargetServerInfo(funcCd);
		String url = serverInfo[0];
		String apiName = serverInfo[1];
		String proxyHost = serverInfo[2];
		String proxyPort = serverInfo[3];
		String timeout = serverInfo[4];
		String retryCnt = serverInfo[5];
		String retryInterval = serverInfo[6];

		String encoding   = CCMG_API_REQUEST_ENCODING;
		String httpMethod = CCMG_API_REQUEST_METHOD;

		// テストモードに応じて通信する/しないを切り替える
		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_CCMG_API_TEST_MODE")))
		{
			printDebugLog("JCKLcsRenkeiUtil.requestCcmgApi スタブモードで動作します(LCS_CCMG_API_TEST_MODE=ONの為)");

			String stubConfig = null;
			if ("1".equals(funcCd))
			{
				stubConfig = LCS_RENKEI_STUB_FILE_CCMG_CONT_ALL_DSL_API;          // コンテンツ全解約API
			}
			else if ("2".equals(funcCd))
			{
				stubConfig = LCS_RENKEI_STUB_FILE_CCMG_MMB_SBT_CHG_DSL_API;       // 会員種別変更解約API
			}
			else if ("3".equals(funcCd))
			{
				stubConfig = LCS_RENKEI_STUB_FILE_CCMG_ISPKS_WAY_CHG_API;         // ISP決済方法変更API
			}
			else if ("4".equals(funcCd))
			{
				stubConfig = LCS_RENKEI_STUB_FILE_CCMG_ISPKS_DSL_YKK_API;         // ISP決済強制解約予告API
			}

			// テストモードの時は通信せずにスタブ用設定ファイルから結果を取得
			String sysid = (String)data.get("SYS_ID");
			String initSysid = (String)data.get("INIT_SYS_ID");
			String stubResKey = (sysid != null) ? sysid : initSysid;
			String errCd = getStubResult(stubConfig, stubResKey, "00000");
			Map resMap = new HashMap();
			resMap.put("HTTP_STATUS", "200");
			resMap.put("SYSID_CCMG", stubResKey);
			resMap.put("ERR_CD_CCMG", errCd);
			printStubLog(stubConfig, data);
			return resMap;
		}
		else
		{
			Integer proxyPortNum = (proxyPort != null) ? new Integer(proxyPort) : null;
			Long timeoutNum = (timeout != null) ? new Long(timeout) : null;
			int retryCntNum = Integer.parseInt(retryCnt);
			int retryIntervalNum = Integer.parseInt(retryInterval);
			String urlFull = url + "/" + apiName;
			urlFull = urlFull.replaceAll("//", "/").replaceAll(":/", "://");
			String[] res = JCKLcsRenkeiUtil.sendHttpRequest(urlFull, proxyHost, proxyPortNum, timeoutNum, retryCntNum, retryIntervalNum, httpMethod, encoding, data);
			Map resMap = new HashMap();
			resMap.put("HTTP_STATUS", res[0]);
			resMap.put("SYSID_CCMG", "");
			resMap.put("ERR_CD_CCMG", "");
			if ("200".equals(res[0]))
			{
				Map xmlMap = JCKLcsDataConverter.parseXml(res[1], encoding);
				Iterator it = xmlMap.values().iterator();
				Map rootElement = (Map) it.next();
				if (rootElement != null)
				{
					resMap.put("SYSID_CCMG", rootElement.get("SYS_ID"));
					resMap.put("ERR_CD_CCMG", rootElement.get("ERR_CD"));
				}
			}
		    return resMap;
		}
	}

	/**
	 * CCMG連携用のHTTPリクエストを送信し、レスポンスを文字列として取得します。
	 * （エラー時はログを出力後、null を返却します。）<br />
	 * <br />
	 * @param url リクエスト送信先のURL(必須)
	 * @param proxyHost プロキシサーバのIPアドレス(任意)
	 * @param proxyPort プロキシサーバのポート(任意)
	 * @param timeout タイムアウト秒数(任意)
	 * @param retryCount リトライ回数(必須)
	 * @param retryInterval リトライ間隔(必須)
	 * @param methodType メソッドタイプ(必須)
	 * @param encoding 文字コード(必須)
	 * @param reqData リクエストデータ(必須)
	 * @return [httpステータス, レスポンステキスト]
	 */
	public static String[] sendHttpRequest(String url, String proxyHost, Integer proxyPort, Long timeout, int retryCount, int retryInterval,
			String methodType, String encoding, Map<String, Object> reqData) throws Exception
	{
		// レスポンス
		String resultText = null;

		// HttpClientを生成
		HttpClient client = new HttpClient();
		// HttpConnectionManagerParamsを生成
		HttpConnectionManagerParams clientParams = client.getHttpConnectionManager().getParams();
		// HttpMethodParamsを生成
		HttpMethodParams methodParams = new HttpMethodParams();

		// プロキシの設定
		if ((proxyHost != null) && (!"".equals(proxyHost)))
		{
			HostConfiguration hostConfig = client.getHostConfiguration();
			hostConfig.setProxy(proxyHost, proxyPort);
		}

		// タイムアウトの設定
		if (timeout != null)
		{
			clientParams.setSoTimeout(timeout.intValue());
		}

		// 文字コードの設定
		if (encoding != null)
		{
			methodParams.setContentCharset(encoding);
		}

		Iterator<?> it = reqData.keySet().iterator();

		// リクエストメソッドの生成
		PostMethod postMethod = null;
		GetMethod getMethod = null;
		if ("post".equals(methodType.toLowerCase()))
		{

			// リクエストデータのセット
			postMethod = new PostMethod(url);
			while (it.hasNext())
			{
				String paramName = (String) it.next();
				String paramValue = (String) reqData.get(paramName);
				postMethod.setParameter(paramName, paramValue);
			}
			postMethod.setParams(methodParams);

		}
		else if ("get".equals(methodType.toLowerCase()))
		{
			// リクエストデータのセット
			StringBuffer queryStringSb = new StringBuffer();
			while (it.hasNext())
			{
				String paramName = (String) it.next();
				String paramValue = (String) reqData.get(paramName);
				if (queryStringSb.length() > 0)
				{
					queryStringSb.append("&");
				}
				queryStringSb.append(paramName + "=" + paramValue);
			}
			if (queryStringSb.length() > 0)
			{
				url = url + "?" + queryStringSb.toString();
			}
			getMethod = new GetMethod(url);
		}

		int httpStatus = 500;

		Exception ex = null;

		// リクエストデータの送信とリトライ
		int reqCnt = retryCount + 1;
		for (int i = 0; i < reqCnt; i++)
		{
			ex = null;

			try
			{
				if (postMethod != null)
				{
					httpStatus = client.executeMethod(postMethod);
					resultText = postMethod.getResponseBodyAsString();
				}
				if (getMethod != null)
				{
					httpStatus = client.executeMethod(getMethod);
					resultText = getMethod.getResponseBodyAsString();
				}
			}
			catch (HttpException e)
			{
				ex = e;
			}
			catch (IOException e)
			{
				ex = e;
			}

			// 失敗時はリトライ回数の上限までリトライ
			if (((ex != null) || (httpStatus != 200)) && (i < retryCount))
			{
				try
				{
					Thread.sleep(retryInterval);
				}
				catch (InterruptedException e)
				{
					// 割り込み要求による例外は無視
				}
				continue;
			}

			break;
		}

		// コネクション解放
		if (postMethod != null)
		{
			postMethod.releaseConnection();
			postMethod = null;
		}
		if (getMethod != null)
		{
			getMethod.releaseConnection();
			getMethod = null;
		}

		// リクエスト失敗 かつ 例外情報がある場合はthrowする
		if ((httpStatus != 200) && (ex != null))
		{
			throw ex;
		}
		else if (httpStatus != 200)
		{
			printErrorLog("JCKLcsRenkeiUtil.sendHttpRequest httpリクエストに失敗しました。(URL: " + url + "、HTTPステータス:" + httpStatus + ")");
		}

		return new String[] { new Integer(httpStatus).toString(), resultText };
	}

	/**
	 * エラーログ出力
	 * @param errMsg エラーメッセージ
	 */
	private static void printErrorLog(String errMsg)
	{
		JSYejbLog.println(JSYejbLog.ERROR, JCKLcsRenkeiUtil.class, errMsg);
	}

	/**
	 * エラーログ出力
	 * @param e 発生した例外
	 * @param errMsg エラーメッセージ
	 */
	private static void printErrorLog(Exception e, String errMsg)
	{
		StringBuffer sb = new StringBuffer();
		Throwable cause = e.getCause();
		sb.append((cause != null) ? cause.getClass().getName() : e.getClass().getName());
		sb.append(" : ");
		sb.append((cause != null) ? cause.getMessage() : e.getMessage());
		sb.append("\n");
		StackTraceElement[] steAll = e.getStackTrace();
		for (StackTraceElement ste : steAll)
		{
			sb.append("	at " + ste.getClassName() + "." + ste.getMethodName() + "(" + ste.getFileName() + ":" + ste.getLineNumber() + ")" + "\n");
		}
		JSYejbLog.println(JSYejbLog.ERROR, JCKLcsRenkeiUtil.class, errMsg + "\n" + sb.toString());
	}

	/**
	 * デバッグログ出力
	 * @param objAll
	 */
	private static void printDebugLog(Object...objAll){

		StringBuffer sb = new StringBuffer();
		for (Object obj : objAll)
		{
			Object[] targetObjs = null;
			if (obj instanceof String)
			{
				targetObjs = new String[]{ obj.toString() };
			}

			if (targetObjs instanceof String[])
			{
				String[] strAry = (String[]) targetObjs;
				String delimiter = "";
				for (String str : strAry)
				{
					sb.append(delimiter);
					sb.append(str);
					delimiter = ",";
				}
			}
		}
		JSYejbLog.println(JSYejbLog.DEBUG, JCKLcsRenkeiUtil.class, sb.toString());
	}

	/**
	 * スタブ用の設定ファイルPATHを取得する。<br />
	 * 
	 * @return 設定ファイルPATH
	 */
	private static String getStubConfigFilePath(String configFileName)
	{
		String filePath = LCS_RENKEI_STUB_DIR_LINUX;
		File winDir = new File(LCS_RENKEI_STUB_DIR_WIN);
		if (winDir.isDirectory() && winDir.canRead())
		{
			filePath = LCS_RENKEI_STUB_DIR_WIN;
		}
		return filePath + configFileName;
	}

	/**
	 * スタブ用の処理結果を取得する。<br />
	 * （スタブ用設定ファイルに従ってスタブ用の処理結果コードを取得する）<br />
	 * @param key SYSIDなど(スタブ用設定ファイルのキー値)
	 * @param defResult デフォルト値
	 * @return 処理結果コード ※1:成功、2:成功(パスワード更新APIの呼出も必要)、-1:失敗
	 */
	private static Integer getStubResult(String configFileName, String key, int defResult)
	{
		String result = getStubResult(configFileName, key, null);
		return (result != null) ? Integer.parseInt(result) : defResult;
	}

	/**
	 * スタブ用の処理結果を取得する。<br />
	 * （スタブ用設定ファイルに従ってスタブ用の処理結果コードを取得する）<br />
	 * @param key SYSIDなど(スタブ用設定ファイルのキー値)
	 * @param defResult デフォルト値
	 * @return 処理結果コード
	 */
	private static String getStubResult(String configFileName, String key, String defResult)
	{
		String result = null;
		BufferedReader reader = null;

		try
		{
			String filePath = getStubConfigFilePath(configFileName);
			File configFile = new File(filePath);
			if (configFile.exists())
			{
				key = (key == null) ? "" : key;

				reader = new BufferedReader(new InputStreamReader(new FileInputStream(configFile)));
				String s = null;
				while ((s = reader.readLine()) != null){
					if (s.matches("^#.*") || (s == null) || (s.length() == 0))
					{
						// コメント行 または 空行の場合はスキップ
						continue;
					}
					String[] recArfy = s.split("=");
					String configKey = recArfy[0];
					String configResult = (recArfy.length > 1) ? recArfy[1] : result;
					if (configKey.equals("*"))
					{
						result = configResult;
						break;
					}
					else if (key.equals(configKey))
					{
						result = configResult;
					}
				}
			}
		}
		catch (Exception e)
		{
		}
		finally
		{
			try
			{
				if (reader != null)
				{
					reader.close();
				}
			}
			catch(IOException e)
			{
			}
		}

		return (result != null) ? result : defResult;
	}

	/**
	 * スタブログを出力する。
	 * @param configFileName 設定ファイル名
	 * @param requestData リクエストデータ
	 * @throws IOException 
	 */
	@SuppressWarnings("unchecked")
	private static void printStubLog(String configFileName, Map requestData)
	{
		String getConfigFilePath = getStubConfigFilePath(configFileName);

		// 設定ファイルが存在する場合のみログ出力を行う
		if (new File(getConfigFilePath).exists())
		{
			BufferedWriter writer = null;
			try
			{
				// 改行を除去
				String dataText = requestData.toString().replaceAll("\r\n", "").replaceAll("\r", "");

				// ログ出力
				String logFilePath = getConfigFilePath.replaceFirst("\\.[a-zA-Z0-9]+$", ".log");
				String outputString = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date()) + "\t" + dataText + "\r\n";
				writer = new BufferedWriter(new FileWriter(logFilePath, true));
				writer.write(outputString);
				writer.flush();
			}
			catch (Exception e)
			{
			}
			finally
			{
				if (writer != null)
				{
					try
					{
						writer.close();
					}
					catch(IOException e)
					{
					}
				}
			}
		}
	}
	// ANK-3032-00-00 2016/09/30 ADD START
	/**
	 * iDA WebAPIに対して更新要求を送信します。
	 * @param sjishoNo 指示書番号
	 * @param sjishoNaiyoSeq 指示書内容枝番
	 * @param tranTrgtSysid 処理対象SYSID
	 * @param params パラメータ
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static int requestIdaWebApi(String sjishoNo, String sjishoNaiyoSeq, String tranTrgtSysid, String[] params) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestIdaWebApiIda連携(WebAPI) - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestIdaWebApi 入力パラメータ( params=" + convert2String(params) +  " )");

		// パラメータ変換(String[] → Map)
		Map<String, Object> paramMap = makeParamWebApi(sjishoNo, sjishoNaiyoSeq, tranTrgtSysid, params);

		int result = 0;
		String webApiCallIdaReturnCode = "";
		// テストモードに応じて通信する/しないを切り替える
		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_IDA_WEB_API_TEST_MODE")))
		{
			printStubLog(LCS_RENKEI_STUB_FILE_IDA_WEB_API, paramMap);
			result = getStubResult(LCS_RENKEI_STUB_FILE_IDA_WEB_API, tranTrgtSysid, 1);
		}
		else
		{
			String procDiv = (String) paramMap.get(COL_PROC_DIV);
			String sysId = (String) paramMap.get(COL_SYSID);
			String eoId = (String) paramMap.get(COL_EOID);
			String procDiv2 = "";
//			logPrint = commonItem.getLogPrint();
			
			try
			{
				JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "requestIdaWebApi 実行開始");

				Map<String, Object> searchMap = new HashMap<String, Object>();
				//iDAからユーザ情報を取得する。
				searchMap = callIdaSearchUser(tranTrgtSysid);
				
				webApiCallIdaReturnCode = (String)searchMap.get("RETURN_CODE");
				String webApiLoginId = (String)searchMap.get("LOGIN_ID");
				
				Map<String, Object> callIdaMap = new HashMap<String, Object>();
				
				//処理区分="C"(新規登録) の場合
				if (WEB_SJISHO_PARAM1_NEW.equals(procDiv))
				{
					// 既に登録のある場合は更新、無い場合は登録
					if (IDA_RETURN_CODE_001000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢C｣:新規登録
						procDiv2 = WEB_SJISHO_PARAM1_NEW;
						callIdaMap = callIdaRegistUser(tranTrgtSysid, params);
					}
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					else if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢U｣:更新
						procDiv2 = WEB_SJISHO_PARAM1_UPD;
						callIdaMap = callIdaUpdateUser(tranTrgtSysid, params, webApiLoginId, procDiv2);
					}
				}
				// 処理区分="U"(更新)
				else if (WEB_SJISHO_PARAM1_UPD.equals(procDiv))
				{
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢U｣:更新
						procDiv2 = WEB_SJISHO_PARAM1_UPD;
						callIdaMap = callIdaUpdateUser(tranTrgtSysid, params, webApiLoginId, procDiv2);
					}
				}
				// 処理区分 ｢D｣:削除
				else if (WEB_SJISHO_PARAM1_DEL.equals(procDiv))
				{
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢D｣:削除
						procDiv2 = WEB_SJISHO_PARAM1_DEL;
						callIdaMap = callIdaDeleteUser(webApiLoginId);
					}
				}
				// 処理区分 ｢PU｣:部分更新(指定された項目を更新)
				else if (WEB_SJISHO_PARAM1_UPD_PART.equals(procDiv))
				{
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢PU｣:部分更新(指定された項目を更新)
						procDiv2 = WEB_SJISHO_PARAM1_UPD_PART;
						callIdaMap = callIdaUpdateUser(tranTrgtSysid, params, webApiLoginId, procDiv2);
					}
				}
				// 処理区分 ｢AL｣:認証停止
				else if (WEB_SJISHO_PARAM1_STOP_AUTH.equals(procDiv))
				{
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢AL｣:認証停止
						procDiv2 = WEB_SJISHO_PARAM1_STOP_AUTH;
						callIdaMap = callIdaUpdateUser(tranTrgtSysid, params, webApiLoginId, procDiv2);
					}
				}
				// 処理区分 ｢AR｣:認証停止解除
				else if (WEB_SJISHO_PARAM1_RESUME_AUTH.equals(procDiv))
				{
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢AR｣:認証停止解除
						procDiv2 = WEB_SJISHO_PARAM1_RESUME_AUTH;
						callIdaMap = callIdaUpdateUser(tranTrgtSysid, params, webApiLoginId, procDiv2);
					}
				}
				// 処理区分 ｢CL｣:クリア（指定された項目をクリア)
				else if (WEB_SJISHO_PARAM1_CLEAR.equals(procDiv))
				{
					// ワークiDAリターンコード＝"000000"（正常終了）の場合
					if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode) == true)
					{
						// 処理区分 ｢CL｣:クリア（指定された項目をクリア)
						procDiv2 = WEB_SJISHO_PARAM1_CLEAR;
						callIdaMap = callIdaUpdateUser(tranTrgtSysid, params, webApiLoginId, procDiv2);
					}
				}


				//処理結果コードの編集
				if (!procDiv2.equals("")) {
					webApiCallIdaReturnCode = (String)callIdaMap.get("RETURN_CODE");
				}
				//ワークiDAリターンコード＝"000000"（正常終了）の場合
				if (IDA_RETURN_CODE_000000.equals(webApiCallIdaReturnCode)) 
				{
					// 正常終了
					result = 1;
				}
				//処理区分="D"(削除) かつワークワークiDAリターンコード＝"001000"（対象データなし）の場合
				// IT1-2016-0000156 2016/11/04 MOD START
				//else if (WEB_SJISHO_PARAM1_DEL.equals(procDiv) && IDA_RETURN_CODE_001000.equals(webApiCallIdaReturnCode))
				else if (WEB_SJISHO_PARAM1_DEL.equals(procDiv2) && IDA_RETURN_CODE_001000.equals(webApiCallIdaReturnCode))
				// IT1-2016-0000156 2016/11/04 MOD END
				{
					result = 1;
					// IT1-2016-0000156 2016/11/04 DEL START
					//printErrorLog(new Exception(), "JCKLcsRenkeiUtil.requestIdaWebApi [更新データなし SYSID:" + sysId + " eoID:" + eoId + "]");
					// IT1-2016-0000156 2016/11/04 DEL END
				}
				//ワークiDAリターンコード＝"001000"（対象データなし）の場合
				else if (IDA_RETURN_CODE_001000.equals(webApiCallIdaReturnCode))
				{
					result = -1;
					// IT1-2016-0000156 2016/11/04 DEL START
					//printErrorLog(new Exception(), "JCKLcsRenkeiUtil.requestIdaWebApi [更新データなし SYSID:" + sysId + " eoID:" + eoId + "]");	
					// IT1-2016-0000156 2016/11/04 DEL END
				}
				//ワークiDAリターンコード＝"209032"（重複）の場合
				else if (IDA_RETURN_CODE_209032.equals(webApiCallIdaReturnCode))
				{
					result = -1;
					// IT1-2016-0000156 2016/11/04 DEL START
					//printErrorLog(new Exception(), "JCKLcsRenkeiUtil.requestIdaWebApi [重複データあり SYSID:" + sysId + " eoID:" + eoId + "]");	
					// IT1-2016-0000156 2016/11/04 DEL END
				}
				//上記以外の場合
				else 
				{
					result = -1;
					// IT1-2016-0000156 2016/11/04 DEL START
					//printErrorLog(new Exception(), "JCKLcsRenkeiUtil.requestIdaWebApi [システムエラー SYSID:" + sysId + " eoID:" + eoId + " iDAリターンコード:" + webApiCallIdaReturnCode + "]");
					// IT1-2016-0000156 2016/11/04 DEL END
				}
			}
			catch (Exception e)
			{
				result = -1;
				printErrorLog(e, "JCKLcsRenkeiUtil.requestIdaWebApi [システムエラー SYSID:" + sysId + " eoID:" + eoId + " iDAリターンコード:" + webApiCallIdaReturnCode + "]");
			}
			finally
			{
				JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "requestIdaWebApi 実行完了");
			}
		}

		printDebugLog("JCKLcsRenkeiUtil.requestIdaWebApi result=" + result);
		printDebugLog("JCKLcsRenkeiUtil.requestIdaWebApi Ida連携(WebAPI) -  END  -");

		return result;
	}
	
	/**
	 * iDAユーザー検索
	 * @param tranTrgtSysid
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaSearchUser(String tranTrgtSysid)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();

		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaConnectInfo("1");
		//JSON形式の文字列を作成する。
		reqData = makeIdaSearchUserParam(tranTrgtSysid);
		//iDAのユーザー検索APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//ユーザー検索APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResult(httpStatus, responseText);

		return idaResultMap;
	}
	
	/**
	 * iDAユーザー登録
	 * @param tranTrgtSysid
	 * @param params
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaRegistUser(String tranTrgtSysid, String[] params)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();

		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaConnectInfo("2");
		//JSON形式の文字列を作成する。
		reqData = makeIdaRegistUserParam(tranTrgtSysid, params);
		//iDAのユーザー登録APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//ユーザー登録APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResult(httpStatus, responseText);

		return idaResultMap;
	}
	
	/**
	 * iDAユーザー更新
	 * @param tranTrgtSysid
	 * @param params
	 * @param loginId
	 * @param commonItem
	 * @param procDiv2
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaUpdateUser(String tranTrgtSysid, String[] params, String loginId, String procDiv2)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();

		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaConnectInfo("3");
		//JSON形式の文字列を作成する。
		reqData = makeIdaUpdateUserParam(tranTrgtSysid, params, loginId, procDiv2);
		//iDAのユーザー更新APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//ユーザー更新APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResult(httpStatus, responseText);

		return idaResultMap;
	}
	
	/**
	 * iDAユーザー削除
	 * @param loginId
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaDeleteUser(String loginId)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();

		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaConnectInfo("4");
		//JSON形式の文字列を作成する。
		reqData = makeIdaDeleteUserParam(loginId);
		//iDAのユーザー検索APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//ユーザー検索APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResult(httpStatus, responseText);

		return idaResultMap;
	}
	
	/**
	 * iDA接続情報作成
	 * @param procCode 処理区分("1"（検索）、"2"（登録）、"3"（更新）、"4"（削除）、"5"(パスワードハッシュ化))
	 * @param params パラメータ文字列配列
	 * @return iDA接続情報マップ
	 * @throws Exception
	 */
	public static Map<String, Object> makeIdaConnectInfo(String procCode) throws Exception
	{

		// iDA接続情報マップを作成する。
		//iDAWebAPI用URL
		String idaWebApiUrl = JCCModelCommon.getApplicationConst("IDA_WEB_API_URL");
		//iDAユーザー検索API
		String idaWebApiSearch = JCCModelCommon.getApplicationConst("IDA_WEB_API_SEARCH");
		//iDAユーザー登録API
		String IdaWebApiRegist = JCCModelCommon.getApplicationConst("IDA_WEB_API_REGIST");
		//iDAユーザー更新API
		String IdaWebApiUpdate = JCCModelCommon.getApplicationConst("IDA_WEB_API_UPDATE");
		//iDAユーザー削除API
		String IdaWebApiDelete = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE");
// ANK-4009-00-00対応 20210513 星野 ADD START
		//iDAパスワードハッシュ化API
		String IdaWebApiHashPassword = JCCModelCommon.getApplicationConst("IDA_WEB_API_HASH_PASSWORD");
// ANK-4009-00-00対応 20210513 星野 ADD END
		//プロキシホスト
		String IdaWebApiProxyHost = JCCModelCommon.getApplicationConst("IDA_WEB_API_PROXY_HOST");
		//プロキシポート
		String proxyPortStr  = JCCModelCommon.getApplicationConst("IDA_WEB_API_PROXY_PORT");
		Integer IdaWebApiProxyPort  = ((proxyPortStr != null) && (!"".equals(proxyPortStr))) ? new Integer(proxyPortStr) : null;
		//タイムアウト時間
		Integer IdaWebApiTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_TIMEOUT"));
		//コネクションタイムアウト時間
		Integer IdaWebApiConnectionTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_CONNECTION_TIMEOUT"));
		//リトライ回数
		Integer IdaWebApiRetryCnt = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_RETRY_CNT"));
		//リトライインターバル
		Integer IdaWebApiRetryInterval = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_RETRY_INTERVAL"));

		//iDAアカウント名
		String IdaWebApiAccount = JCCModelCommon.getApplicationConst("IDA_WEB_API_ACCOUNT");
		//iDAパスワード
		String IdaWebApiPassWord = JCCModelCommon.getApplicationConst("IDA_WEB_API_PASSWORD");
		
		// パスワードを復元
		IdaWebApiPassWord = JCCModelCommon.getDecryptResultPassword(IdaWebApiPassWord);
		
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// 処理区分(検索)
		if ("1".equals(procCode)) {
			paramMap.put("URL", idaWebApiUrl + idaWebApiSearch);
		// 処理区分(登録)
		} else if("2".equals(procCode)) {
			paramMap.put("URL", idaWebApiUrl + IdaWebApiRegist);
		// 処理区分(更新)
		} else if("3".equals(procCode)) {
			paramMap.put("URL", idaWebApiUrl + IdaWebApiUpdate);
		// 処理区分(削除)
		} else if("4".equals(procCode)) {
			paramMap.put("URL", idaWebApiUrl + IdaWebApiDelete);
// ANK-4009-00-00対応 20210513 星野 ADD START
		// 処理区分(パスワードハッシュ化)
		} else if("5".equals(procCode)) {
			paramMap.put("URL", idaWebApiUrl + IdaWebApiHashPassword);
// ANK-4009-00-00対応 20210513 星野 ADD END
		}
		//プロキシホスト
		paramMap.put("PROXY_HOST", IdaWebApiProxyHost);
		//プロキシポート
		paramMap.put("PROXY_PORT", IdaWebApiProxyPort);
		//タイムアウト時間
		paramMap.put("TIMEOUT", IdaWebApiTimeOut);
		//コネクションタイムアウト時間
		paramMap.put("CONNECTION_TIMEOUT", IdaWebApiConnectionTimeOut);
		//リトライ回数
		paramMap.put("RETRY_CNT", IdaWebApiRetryCnt);
		//リトライインターバル
		paramMap.put("RETRY_INTERVAL", IdaWebApiRetryInterval);
		//メソッドタイプ
		paramMap.put("METHOD_TYPE", "POST");
		//文字コード
		paramMap.put("CHAR_CODE", "UTF-8");
		//Basic認証文字列を設定する。
		paramMap.put("BASIC_AUTH", makeBasicAuth(IdaWebApiAccount, IdaWebApiPassWord));
		
		// 上記で生成したiDA接続情報マップを返却する
		return paramMap;
	}
	
	/**
	 * IDA連携用のHTTPリクエストを送信し、レスポンスを文字列として取得します。
	 * （エラー時はログを出力後、null を返却します。）<br />
	 * <br />
	 * @param connectMap 接続情報マップ
	 * @param reqData リクエストデータマップ
	 * @param commonItem 業務共通電文
	 * @return リクエスト結果
	 */
	public static String[] sendHttpRequest(Map<String, Object> connectMap, Map<String, Object> reqData) throws Exception, JSONException
	{
// ST-2021-0000007対応 20210529 星野 DEL START
// 改修不要であったことが判明したため元に戻します
//
//// ANK-4009-00-00対応 20210513 星野 ADD START
//		return sendHttpRequest(connectMap, reqData, null);
//	}
//	
//	/**
//	 * IDA連携用のHTTPリクエストを送信し、レスポンスを文字列として取得します。
//	 * （エラー時はログを出力後、null を返却します。）<br />
//	 * <br />
//	 * @param connectMap 接続情報マップ
//	 * @param reqData リクエストデータマップ
//	 * @param requestBodyStr リクエストボディ文字列
//	 * @return リクエスト結果
//	 */
//	public static String[] sendHttpRequest(Map<String, Object> connectMap, Map<String, Object> reqData, String requestBodyStr) throws Exception, JSONException
//	{
//// ANK-4009-00-00対応 20210513 星野 ADD END
// ST-2021-0000007対応 20210529 星野 DEL END
		
		// レスポンス
		String resultText = null;

		// ログ出力用
		StringBuilder requestParam = new StringBuilder();

		// HttpClientを生成
		HttpClient client = new HttpClient();
		// HttpConnectionManagerParamsを生成
		HttpConnectionManagerParams clientParams = client.getHttpConnectionManager().getParams();
		// HttpMethodParamsを生成
		HttpMethodParams methodParams = new HttpMethodParams();

		// プロキシの設定
		if ((connectMap.get("PROXY_HOST") != null) && (!"".equals(connectMap.get("PROXY_HOST"))))
		{
			HostConfiguration hostConfig = client.getHostConfiguration();
			hostConfig.setProxy((String)connectMap.get("PROXY_HOST"), (Integer)connectMap.get("PROXY_PORT"));
		}

		// タイムアウトの設定
		if (connectMap.get("TIMEOUT") != null)
		{
			Integer timeout = (Integer)connectMap.get("TIMEOUT");
			clientParams.setSoTimeout(timeout.intValue());
		}

		// コネクションタイムアウトの設定
		if (connectMap.get("CONNECTION_TIMEOUT") != null)
		{
			Integer connectionTimeout = (Integer)connectMap.get("CONNECTION_TIMEOUT");
			clientParams.setConnectionTimeout(connectionTimeout.intValue());
		}

		// 文字コードの設定
		if (connectMap.get("CHAR_CODE") != null)
		{
			methodParams.setContentCharset((String)connectMap.get("CHAR_CODE"));
		}

		//iDAWebAPI用URL
		String url = (String)connectMap.get("URL");
		//リクエストデータマップ
		Iterator<?> it = reqData.keySet().iterator();

		// リクエストメソッドの生成
		PostMethod postMethod = null;
		GetMethod getMethod = null;
		String methodType = (String)connectMap.get("METHOD_TYPE");
		if ("post".equals(methodType.toLowerCase()))
		{

			// リクエストデータのセット
			postMethod = new PostMethod(url);
			while (it.hasNext())
			{
				String paramName = (String) it.next();
				String paramValue = (String) reqData.get(paramName);
				//リクエストデータのセット
				postMethod.setParameter(paramName, paramValue);
				//ログ出力用
				requestParam.append("paramName:" + paramName + " ");
				requestParam.append("paramValue:" + paramValue);
			}
			
// ST-2021-0000007対応 20210529 星野 DEL START
// 改修不要であったことが判明したため元に戻します
//
//// ANK-4009-00-00対応 20210513 星野 ADD START
//			// リクエストボディ文字列があれば設定
//			if(requestBodyStr != null && requestBodyStr.trim().length()>0)
//			{
//				StringRequestEntity requestEntity = new StringRequestEntity(
//						requestBodyStr,
//						"application/Json",
//						"UTF-8"
//						);
//				postMethod.setRequestEntity(requestEntity);
//
//			}
//// ANK-4009-00-00対応 20210513 星野 ADD END
// ST-2021-0000007対応 20210529 星野 DEL END

			//Basic認証文字列を設定する。
			postMethod.setRequestHeader("Authorization", (String)connectMap.get("BASIC_AUTH"));
			postMethod.setParams(methodParams);

		}
		else if ("get".equals(methodType.toLowerCase()))
		{
			// リクエストデータのセット
			StringBuffer queryStringSb = new StringBuffer();
			while (it.hasNext())
			{
				String paramName = (String) it.next();
				String paramValue = (String) reqData.get(paramName);
				if (queryStringSb.length() > 0)
				{
					queryStringSb.append("&");
				}
				queryStringSb.append(paramName + "=" + paramValue);
			}
			if (queryStringSb.length() > 0)
			{
				url = url + "?" + queryStringSb.toString();
			}
			//ログ出力用
			requestParam.append("queryStringSb:" + queryStringSb);
			getMethod = new GetMethod(url);
		}

		int httpStatus = 500;

		Exception ex = null;

// ▼▼▼ 2016/11/30 ST-2016-0000047 Modify START
//		JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "sendHttpRequest Request " + requestParam + "url:" + url);
		JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "sendHttpRequest Request " + convertPassword(requestParam.toString()) + "url:" + url);
// ▲▲▲ 2016/11/30 ST-2016-0000047 Modify END

		// リクエストデータの送信とリトライ
		
		//リトライ回数
		int retryCount = (Integer)connectMap.get("RETRY_CNT");
		//リトライインターバル
		int retryInterval = (Integer)connectMap.get("RETRY_INTERVAL");
		int reqCnt = retryCount + 1;
		for (int i = 0; i < reqCnt; i++)
		{
			ex = null;

			try
			{
				if (postMethod != null)
				{
					httpStatus = client.executeMethod(postMethod);
					resultText = postMethod.getResponseBodyAsString();
				}
				if (getMethod != null)
				{
					httpStatus = client.executeMethod(getMethod);
					resultText = getMethod.getResponseBodyAsString();
				}
			}
			catch (HttpException e)
			{
				ex = e;
			}
			catch (ConnectTimeoutException e)
			{
				ex = e;
			}
			catch (IOException e)
			{
				ex = e;
			}

			JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "sendHttpRequest Response HTTPステータス:" + httpStatus + " " + "Response:"  + resultText);

			// 失敗時はリトライ回数の上限までリトライ
			if (((ex != null) || (httpStatus != 200)) && (i < retryCount))
			{
				try
				{
					Thread.sleep(retryInterval);
				}
				catch (InterruptedException e)
				{
					// 割り込み要求による例外は無視
				}
				// コネクション解放
				if (postMethod != null)
				{
					postMethod.releaseConnection();
				}
				if (getMethod != null)
				{
					getMethod.releaseConnection();
				}
				continue;
			}

			break;
		}

		// コネクション解放
		if (postMethod != null)
		{
			postMethod.releaseConnection();
			postMethod = null;
		}
		if (getMethod != null)
		{
			getMethod.releaseConnection();
			getMethod = null;
		}

		// リクエスト失敗 かつ 例外情報がある場合はthrowする
		if ((httpStatus != 200) && (ex != null))
		{
			throw ex;
		}
		else if (httpStatus != 200)
		{
			printErrorLog(new Exception(), "JCKLcsRenkeiUtil.sendHttpRequest httpリクエストに失敗しました。(URL: " + url + "、HTTPステータス:" + httpStatus + ")");
		}

		return new String[] { new Integer(httpStatus).toString(), resultText };
	}
	
	/**
	 * iDAユーザー検索パラメータ作成
	 * <br>
	 * @param tranTrgtSysid 処理対象SYSID名
	 * @return 作成したJSON形式のリクエストパラメータを返却する。
	 */
	protected static Map<String, Object> makeIdaSearchUserParam(String tranTrgtSysid)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		try {
			//JSON形式のリクエストパラメータを作成する。
			JSONObject json1kaisoMap = new JSONObject();
			json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
			json1kaisoMap.put("PROCESS_DIV","2");//処理区分
			json1kaisoMap.put("ORG_ID","ID01");//体系ID
			json1kaisoMap.put("ORG_PRIMARY_KEY",tranTrgtSysid);//体系内主キー
			paramMap.put("receiveData",json1kaisoMap.toString());
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return paramMap;
	}

	/**
	 * iDAユーザー登録パラメータ作成
	 * <br>
	 * @param tranTrgtSysid 処理対象SYSID名
	 * @param params パラメータ文字列配列
	 * @return 作成したJSON形式のリクエストパラメータを返却する。
	 */
	protected static Map<String, Object> makeIdaRegistUserParam(String tranTrgtSysid, String[] params)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		try {
			//JSON形式のリクエストパラメータを作成する。
			JSONObject json1kaisoMap = new JSONObject();
			JSONObject json2kaisoMap = new JSONObject();
			//1階層
			json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
			json1kaisoMap.put("ORG_ID","ID01");//体系ID
			json1kaisoMap.put("LOGIN_ID",params[1]);//ログインID
			json1kaisoMap.put("LOGIN_PASSWORD",params[3]);//ログインパスワード
			// ANK-4009-00-00 ADD START	
			json1kaisoMap.put("HASHED_LOGIN_PASSWORD",params[22]);//ハッシュ化済みログインパスワード
			// ANK-4009-00-00 ADD END
			json1kaisoMap.put("USER_PROPERTIES",json2kaisoMap);//ユーザー属性
			//2階層
			json2kaisoMap.put("sysid",tranTrgtSysid);//ＳＹＳＩＤ
			json2kaisoMap.put("nk_nm",params[4]);//ニックネーム
			json2kaisoMap.put("kiin_shubt",params[5]);//会員種別
			json2kaisoMap.put("rnrksk_mr",params[6]);//連絡先メールアドレス
			json2kaisoMap.put("age_flg",params[7]);//年齢フラグ
			json2kaisoMap.put("sibt",params[8]);//性別
			json2kaisoMap.put("turk_flg",params[9]);//登録フラグ
			json2kaisoMap.put("isp_ryu_tis_flg",params[10]);//ISP利用停止フラグ
			json2kaisoMap.put("hyojun_kntnt_dui_flg",params[11]);//標準コンテンツ規約同意フラグ
			json2kaisoMap.put("tst_id_flg",params[12]);//テストIDフラグ
			json2kaisoMap.put("jyoutai",params[16]);//会員状態
			json2kaisoMap.put("kiin_tokutei",params[17]);//会員種別特定フラグ
// ▼▼▼ XX-2016-000xxx 2016-11-25 MODIFY START
//			json2kaisoMap.put("u_date",params[18]);//更新年月日時分秒
			json2kaisoMap.put("u_date",JCKLcsCommonUtil.formatDtm4AxmAdminApi(params[18]));//更新年月日時分秒
// ▲▲▲ XX-2016-000xxx 2016-11-25 MODIFY END
			// ANK-3706-00-00 ADD START
			if (jdgKeishaTelnoSmsSend(params[19]))
			{
				json2kaisoMap.put("mobile_number", params[19]); //契約者電話番号
			}
			else
			{
				// 契約者電話番号がnullまたは""または処理対象外の契約者電話番号の場合、タグなし
			}
			json2kaisoMap.put("authentication_level",params[20]);//ログイン認証レベル
			json2kaisoMap.put("onetimekey_destination",params[21]);//ワンタイムキー送付先優先区分
			// ANK-3706-00-00 ADD END
			// ANK-4009-00-00 ADD START
			json2kaisoMap.put("sub_google",params[23]);//sub値（Google）
			json2kaisoMap.put("sub_yahoo",params[24]);//sub値（Yahoo）
			json2kaisoMap.put("sub_facebook",params[25]);//sub値（Facebook）
			json2kaisoMap.put("sub_apple",params[26]);//sub値（Apple）
			// ANK-4009-00-00 ADD END
			
			paramMap.put("receiveData",json1kaisoMap.toString());
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return paramMap;
	}

	/**
	 * iDAユーザー更新パラメータ作成
	 * <br>
	 * @param tranTrgtSysid 処理対象SYSID名
	 * @param params パラメータ文字列配列
	 * @param procDiv2 処理区分
	 * @param loginId ログインID
	 * @return 作成したJSON形式のリクエストパラメータを返却する。
	 */
	protected static Map<String, Object> makeIdaUpdateUserParam(String tranTrgtSysid, String[] params, String loginId, String procDiv2)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		//JSON形式のリクエストパラメータを作成する。
		JSONObject json1kaisoMap = new JSONObject();
		JSONObject json2kaisoMap = new JSONObject();
		JSONObject json3kaisoMap = new JSONObject();
		boolean kaisoAddFlg = false;
		try {
			//処理区分＝"AR"または処理区分＝"AL"の場合
			if (procDiv2.equals(WEB_SJISHO_PARAM1_RESUME_AUTH) || procDiv2.equals(WEB_SJISHO_PARAM1_STOP_AUTH))
			{
				//1階層	
				json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
				json1kaisoMap.put("ORG_ID","ID01");//体系ID
				json1kaisoMap.put("LOGIN_ID",loginId);//ログインID
				json1kaisoMap.put("UPDATE_INFO",json2kaisoMap);//更新情報
				//2階層
// ST-2016-0000042 2016-11-22 Modify START
// 「0」：ロック解除、AR=停止解除  「1」：ロック AL=停止
//				if (procDiv2.equals(WEB_SJISHO_PARAM1_STOP_AUTH))
				if (procDiv2.equals(WEB_SJISHO_PARAM1_RESUME_AUTH))
//ST-2016-0000042 2016-11-22 Modify END
				{
					json2kaisoMap.put("MANUAL_LOCK_FLG","0");//手動ロックフラグ：ロック解除
				} else {
					json2kaisoMap.put("MANUAL_LOCK_FLG","1");//手動ロックフラグ：ロック
				}
				paramMap.put("receiveData",json1kaisoMap.toString());

			}
			//処理区分＝"CL"の場合
			else if (procDiv2.equals(WEB_SJISHO_PARAM1_CLEAR))
			{
				//1階層	
				json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
				json1kaisoMap.put("ORG_ID","ID01");//体系ID
				json1kaisoMap.put("LOGIN_ID",loginId);//ログインID
				json1kaisoMap.put("UPDATE_INFO",json2kaisoMap);//更新情報
				//2階層
				// ANK-4009-00-00 ADD START
				if ((params[22] != null) && (params[22].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					 json2kaisoMap.put("HASHED_LOGIN_PASSWORD",""); //ハッシュ化済みログインパスワード
				}
				// ANK-4009-00-00 ADD END
				json2kaisoMap.put("USER_PROPERTIES",json3kaisoMap);//ユーザー属性
				//3階層
				if ((params[4] != null) && (params[4].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("nk_nm","");//ニックネーム
				}
				if ((params[5] != null) && (params[5].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("kiin_shubt","");//会員種別
				}
				if ((params[6] != null) && (params[6].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("rnrksk_mr","");//連絡先メールアドレス
				}
				if ((params[7] != null) && (params[7].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("age_flg","");//手動年齢フラグ
				}
				if ((params[8] != null) && (params[8].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("sibt","");//性別
				}
				if ((params[9] != null) && (params[9].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("turk_flg","");//登録フラグ
				}
				if ((params[10] != null) && (params[10].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("isp_ryu_tis_flg","");//ISP利用停止フラグ
				}
				if ((params[11] != null) && (params[11].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("hyojun_kntnt_dui_flg","");//標準コンテンツ規約同意フラグ
				}
				if ((params[12] != null) && (params[12].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("tst_id_flg","");//テストIDフラグ
				}
				if ((params[16] != null) && (params[16].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("jyoutai","");//会員状態
				}
				if ((params[17] != null) && (params[17].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("kiin_tokutei","");//会員種別特定フラグ
				}
				if ((params[18] != null) && (params[18].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("u_date","");//更新年月日時分秒
				}
				// ANK-3706-00-00 ADD START
				if ((params[19] != null) && (params[19].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("mobile_number", "");//契約者電話番号
				}
				if ((params[20] != null) && (params[20].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("authentication_level", "");//ログイン認証レベル
				}
				if ((params[21] != null) && (params[21].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("onetimekey_destination", "");//ワンタイムキー送付先優先区分
				}
				// ANK-3706-00-00 ADD END
				// ANK-4009-00-00 ADD START
				if ((params[23] != null) && (params[23].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("sub_google", ""); //sub値（Google）
				}
				if ((params[24] != null) && (params[24].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("sub_yahoo", ""); //sub値（Yahoo）
				}
				if ((params[25] != null) && (params[25].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("sub_facebook", ""); //sub値（Facebook）
				}
				if ((params[26] != null) && (params[26].equals(SJISHO_PARAM_CLEAR_FIELD)))
				{
					json3kaisoMap.put("sub_apple", ""); //sub値（Apple）
				}
				// ANK-4009-00-00 ADD END
				paramMap.put("receiveData",json1kaisoMap.toString());
			}
			//上記以外
			else{
				//1階層	
				json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
				json1kaisoMap.put("ORG_ID","ID01");//体系ID
				json1kaisoMap.put("LOGIN_ID",loginId);//ログインID
				json1kaisoMap.put("UPDATE_INFO",json2kaisoMap);//更新情報
				//2階層
				json2kaisoMap.put("LOGIN_ID",params[1]);//ログインID
				json2kaisoMap.put("LOGIN_PASSWORD",params[3]);//ログインパスワード
				// ANK-4009-00-00 ADD START
				if (params[22] != null && (!"".equals(params[22])))
				{
				   json2kaisoMap.put("HASHED_LOGIN_PASSWORD",params[22]);
				}
				// ANK-4009-00-00 ADD END
				//3階層
				if ((tranTrgtSysid != null) && (!"".equals(tranTrgtSysid)))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("sysid", tranTrgtSysid);//処理対象SYSID
				}
				if ((params[4] != null) && (!"".equals(params[4])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("nk_nm", params[4]);//ニックネーム
				}
				if ((params[5] != null) && (!"".equals(params[5])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("kiin_shubt", params[5]);//会員種別
				}
				if ((params[6] != null) && (!"".equals(params[6])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("rnrksk_mr", params[6]);//連絡先メールアドレス
				}
				if ((params[7] != null) && (!"".equals(params[7])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("age_flg", params[7]);//手動年齢フラグ
				}
				if ((params[8] != null) && (!"".equals(params[8])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("sibt", params[8]);//性別
				}
				if ((params[9] != null) && (!"".equals(params[9])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("turk_flg", params[9]);//登録フラグ
				}
				if ((params[10] != null) && (!"".equals(params[10])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("isp_ryu_tis_flg", params[10]);//ISP利用停止フラグ
				}
				if ((params[11] != null) && (!"".equals(params[11])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("hyojun_kntnt_dui_flg", params[11]);//標準コンテンツ規約同意フラグ
				}
				if ((params[12] != null) && (!"".equals(params[12])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("tst_id_flg", params[12]);//テストIDフラグ
				}
				if ((params[16] != null) && (!"".equals(params[16])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("jyoutai", params[16]);//会員状態
				}
				if ((params[17] != null) && (!"".equals(params[17])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("kiin_tokutei", params[17]);//会員種別特定フラグ
				}
				if ((params[18] != null) && (!"".equals(params[18])))
				{
					kaisoAddFlg = true;
// ▼▼▼ ST-2016-0000047 2016-11-25 MODIFY START
//					json3kaisoMap.put("u_date", params[18]);//更新年月日時分秒
					json3kaisoMap.put("u_date", JCKLcsCommonUtil.formatDtm4AxmAdminApi(params[18]));//更新年月日時分秒
// ▲▲▲ ST-2016-0000047 2016-11-25 MODIFY END
				}
				// ANK-3706-00-00 ADD START
				if ((params[19] != null) && (!"".equals(params[19])))
				{
					// 契約者電話番号を取得できる、かつ、SMS送信可の契約者電話番号の場合
					if (jdgKeishaTelnoSmsSend(params[19]))
					{
						kaisoAddFlg = true;
						json3kaisoMap.put("mobile_number", params[19]); // 契約者電話番号
					}
					// 契約者電話番号を取得できない、または、SMS送信不可の契約者電話番号の場合
					else
					{
						kaisoAddFlg = true;
						// 値を""で更新する
						json3kaisoMap.put("mobile_number", ""); // 契約者電話番号
					}
				}
				if ((params[20] != null) && (!"".equals(params[20])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("authentication_level",params[20]);//ログイン認証レベル
				}
				if ((params[21] != null) && (!"".equals(params[21])))
				{
					kaisoAddFlg = true;
					// ANK-4355-00-00 MOD START
					//json3kaisoMap.put("onetimekey_destination",params[21]);//ワンタイムキー送付先優先区分
					if ((params[21].equals(SJISHO_PARAM_CLEAR_FIELD_NULL)))
					{
						// "#CLS"が設定されている場合、JSONObject.NULLを設定する。
						json3kaisoMap.put("onetimekey_destination",JSONObject.NULL);//ワンタイムキー送付先優先区分
					} 
					else 
					{
						json3kaisoMap.put("onetimekey_destination",params[21]);//ワンタイムキー送付先優先区分
					}
					// ANK-4355-00-00 MOD END
				}
				// ANK-3706-00-00 ADD END
				// ANK-4009-00-00 ADD START
				if ((params[23] != null) && (!"".equals(params[23])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("sub_google",params[23]); //sub値（Google）
				}
				if ((params[24] != null) && (!"".equals(params[24])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("sub_yahoo",params[24]); //sub値（Yahoo）
				}
				if ((params[25] != null) && (!"".equals(params[25])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("sub_facebook",params[25]); //sub値（Facebook）
				}
				if ((params[26] != null) && (!"".equals(params[26])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("sub_apple",params[26]); //sub値（Apple）
				}
				// ANK-4009-00-00 ADD END
				// ANK-4236-00-00 ADD START
				if ((params[27] != null) && (!"".equals(params[27])))
				{
					kaisoAddFlg = true;
					json3kaisoMap.put("enable_password_flg",params[27]); //パスワード有効フラグ
				}
				// ANK-4236-00-00 ADD END
				//「sysid」〜「onetimekey_destination」全て未設定の場合、この項目を設定しない。
				if (kaisoAddFlg == true) {
					json2kaisoMap.put("USER_PROPERTIES",json3kaisoMap);//ユーザー属性
				}
				paramMap.put("receiveData",json1kaisoMap.toString());
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return paramMap;
	}
	
	/**
	 * iDAユーザー削除パラメータ作成
	 * <br>
	 * @param loginId ログインID
	 * @return 作成したJSON形式のリクエストパラメータを返却する。
	 */
	protected static Map<String, Object> makeIdaDeleteUserParam(String loginId)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		try {
			//JSON形式のリクエストパラメータを作成する。
			JSONObject json1kaisoMap = new JSONObject();
			//1階層
			json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
			json1kaisoMap.put("ORG_ID","ID01");//体系ID
			json1kaisoMap.put("LOGIN_ID",loginId);//ログインID
			
			paramMap.put("receiveData",json1kaisoMap.toString());
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return paramMap;
	}
	
	/**
	 * iDA結果取得
	 * @param httpStatus HTTPステータス
	 * @param responseText HTTPレスポンスボディ(文字列)
	 * @param commonItem 業務共通電文
	 * @return 処理結果コード
	 */
	private static Map<String, Object> getIdaResult(String httpStatus, String responseJson)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		String returnCode = "";
		if ("200".equals(httpStatus))
		{

			try
			{
				printDebugLog("JCKLcsRenkeiUtil.getIdaResult ----- iDA連携結果(Map) START -----");
				printDebugLog("JCKLcsRenkeiUtil.getIdaResult " + responseJson.toString());
				printDebugLog("JCKLcsRenkeiUtil.getIdaResult ----- iDA連携結果(Map)  END  -----");
				
				//Json形式をキーで検索して値を取得
				JSONObject json1kaisoMap = new JSONObject(responseJson);
				returnCode = json1kaisoMap.optString("RETURN_CODE");
				String userInfoList = json1kaisoMap.optString("USER_INFO_LIST");
				if ((userInfoList != null) && (!"".equals(userInfoList)))
				{
					//配列（[]）の中にあるJSON形式を取得
					JSONArray userInfoArray = new JSONArray(userInfoList);
					String userInfo = userInfoArray.optString(0);
					JSONObject json2kaisoMap = new JSONObject(userInfo);
					//ログインID取得
					String loginId = json2kaisoMap.optString("LOGIN_ID");

					paramMap.put("RETURN_CODE", returnCode);
					paramMap.put("LOGIN_ID", loginId);
				} else {
					paramMap.put("RETURN_CODE", returnCode);
					paramMap.put("LOGIN_ID", "");
				}
			}
			catch (Exception e)
			{
				paramMap.put("RETURN_CODE", "");
				paramMap.put("LOGIN_ID", "");
				printErrorLog(e, "JCKLcsRenkeiUtil.getIdaResult httpレスポンスに失敗しました。(RETURN_CODE: " + returnCode + "、HTTPステータス:" + httpStatus + ")");
			}
		} else {
			paramMap.put("RETURN_CODE", "");
			paramMap.put("LOGIN_ID", "");
		}

		return paramMap;
	}
		
	/**
	 * BASIC認証の文字列を作成する
	 * <br>
	 * @param accoutName アカウント名
	 * @param password パスワード
	 * @return "Basic " + [ユーザ]:[パスワード]をBASE64エンコードした文字列
	 */
	protected static String makeBasicAuth(String accoutName, String password)
	{
		String userAndPasswd = accoutName + ":" + String.valueOf(password); 
		
		byte[] encodedBytes = Base64.encodeBase64(userAndPasswd.getBytes());
		
		String encodedString = new String(encodedBytes);
		
		return "Basic " + encodedString;
	}
	
	/**
	 * iDAのWEBAPIに渡すパラメータを作成する。
	 * @param sjishoNo 指示書番号
	 * @param sjishoNaiyoSeq 指示書内容枝番
	 * @param tranTrgtSysid 処理対象SYSID
	 * @param params パラメータ(文字列配列)
	 * @return パラメータ(マップオブジェクト)
	 */
	private static Map<String, Object> makeParamWebApi(String sjishoNo, String sjishoNaiyoSeq, String tranTrgtSysid, String[] params)
	{
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(JCKLcsRenkeiUtil.COL_PROC_DIV, params[0]);
		paramMap.put(JCKLcsRenkeiUtil.COL_EOID, params[1]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SYSID, tranTrgtSysid);
		paramMap.put(JCKLcsRenkeiUtil.COL_PASSWORD, params[3]);
		paramMap.put(JCKLcsRenkeiUtil.COL_NICKNAME, params[4]);
		paramMap.put(JCKLcsRenkeiUtil.COL_MEMBER_SBT, params[5]);
		paramMap.put(JCKLcsRenkeiUtil.COL_RRK_MAIL, params[6]);
		paramMap.put(JCKLcsRenkeiUtil.COL_AGE_FLG, params[7]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SEX_CD, params[8]);
		paramMap.put(JCKLcsRenkeiUtil.COL_TOUROKU_FLG, params[9]);
		paramMap.put(JCKLcsRenkeiUtil.COL_ISP_TEISHI_FLG, params[10]);
		paramMap.put(JCKLcsRenkeiUtil.COL_DOUI_FLG, params[11]);
		paramMap.put(JCKLcsRenkeiUtil.COL_TEST_ID_FLG, params[12]);
		paramMap.put(JCKLcsRenkeiUtil.COL_ADMIN_FLG1, params[13]);
		paramMap.put(JCKLcsRenkeiUtil.COL_ADMIN_FLG2, params[14]);
		paramMap.put(JCKLcsRenkeiUtil.COL_ADMIN_FLG3, params[15]);
		paramMap.put(JCKLcsRenkeiUtil.COL_MEMBER_STAT, params[16]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SBT_TOKUTEI_FLG, params[17]);
		paramMap.put(JCKLcsRenkeiUtil.COL_UPDATE_DTM, JCKLcsCommonUtil.formatDtm4AxmAdminApi(params[18]));
		// ANK-3706-00-00 ADD START
		paramMap.put(JCKLcsRenkeiUtil.COL_MOBILE_NUMBER, params[19]);
		paramMap.put(JCKLcsRenkeiUtil.COL_AUTHENTICATION_LEVEL, params[20]);
		paramMap.put(JCKLcsRenkeiUtil.COL_ONETIMEKEY_DESTINATION, params[21]);
		// ANK-3706-00-00 ADD END
		// ANK-4009-00-00 ADD START
		paramMap.put(JCKLcsRenkeiUtil.COL_HASHED_LOGIN_PASSWORD, params[22]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SUB_GOOGLE, params[23]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SUB_YAHOO, params[24]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SUB_FACEBOOK, params[25]);
		paramMap.put(JCKLcsRenkeiUtil.COL_SUB_APPLE, params[26]);
		// ANK-4009-00-00 ADD END

		return paramMap;
	}
	// ANK-3032-00-00 2016/09/30 ADD END
	// ▼▼▼ ST-2016-0000047 2016-11-30 ADD START
	/**
	 * 送信電文に含まれるパスワードをマスク化する。
	 * <br>
	 * @param inData マスク対象の電文文字
	 */
	private static String convertPassword(String inData)
	{
		int psPos = inData.indexOf("LOGIN_PASSWORD");
		if (psPos > 0)
		{
			// パスワードの前後を探す
			int sPos = inData.indexOf(":", psPos);
			if (sPos > 0)
			{
				StringBuilder sb = new StringBuilder();
				sb.append(inData.substring(0, sPos));
				try {
					boolean pswd = false;
					for (; sPos < inData.length(); sPos++)
					{
						char c = inData.charAt(sPos);
						if (!pswd && c == '"') {
							pswd = true;
							sb.append(c);
							continue;
						} else if ((pswd && c == '"') || (!pswd && (c == '[' || c == ']' || c == '{' || c == '}'  || c == ','))) {
							break;
						}
						if (pswd) {
							sb.append("*");
						} else {
							sb.append(c);
						}
					}
					// 最後の部分を登録
					sb.append(inData.substring(sPos));
				} catch (Throwable e) {
					// 例外が発生しても最低限の文字列を出力する
				}
				return sb.toString();
			}
		}
		return inData;
	}
// ▲▲▲ ST-2016-0000047 2016-11-30 ADD END

	// ANK-3706-00-00 ADD START
	/**
	 * 契約者電話番号がSMS送信可の電話番号であるか判定する。
	 * 判定結果がSMS送信可ではない場合はparamsの契約者電話番号(params[19])を""にする。
	 * <br>
	 * @param keishaTelno 契約者電話番号
	 * @return smsSendKaFlg SMS送信可フラグ
	 */
	private static boolean jdgKeishaTelnoSmsSend(String keishaTelno)
	{
		// SMS送信可フラグ
		boolean smsSendKaFlg = false;
		
		// 契約者電話番号が取得できる場合のみ処理する
		if (keishaTelno != null && !"".equals(keishaTelno))
		{
			// 処理対象の契約者電話番号がSMS送信可であるか判定する
			// SMS送信可マップを参照する
			for(String keishaTelnoSmsSendKa: SMS_SEND_KA_MAP)
			{
				// 契約者電話番号の先頭文字列がSMS送信可マップに該当する場合、かつ、契約者電話番号が11桁の場合、SMS送信可フラグをtrueにする
				// v47.00.01 ANK-3706-00-00 MOD START
				//if (keishaTelno.startsWith(keishaTelnoSmsSendKa))
				if (keishaTelno.startsWith(keishaTelnoSmsSendKa) && keishaTelno.length() == 11)
				// v47.00.01 ANK-3706-00-00 MOD END
				{
					// SMS送信可フラグをtrueにする
					smsSendKaFlg = true;
				}
			}
			
			// SMS送信不可マップを参照する
			for(String keishaTelnoSmsSendHuka: SMS_SEND_HUKA_MAP)
			{
				// 契約者電話番号の先頭文字列がSMS送信不可マップに該当する場合、かつ、契約者電話番号が11桁の場合、
				// SMS送信可フラグをfalseで上書きする。(080-0XXX-YYYY(11桁)の電話番号のパターンはSMS送信不可であるため)
				// v47.00.01 ANK-3706-00-00 MOD START
				//if (keishaTelno.startsWith(keishaTelnoSmsSendHuka) && keishaTelno.length() != 11)
				if (keishaTelno.startsWith(keishaTelnoSmsSendHuka) && keishaTelno.length() == 11)
				// v47.00.01 ANK-3706-00-00 MOD END
				{
					smsSendKaFlg = false;
				}
			}
		}
		
		return smsSendKaFlg;
	}

	/**
	 * iDA WebAPIに対してiDAユーザー検索を行います。
	 * 当処理ではiDAユーザー検索のみ単独で実行します。
	 * テストモードの時は空のマップを返却します。
	 * @param tranTrgtSysid 処理対象SYSID
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static Map<String, Object> requestiDAWebApiSearch(String tranTrgtSysid) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiSearch Ida連携(WebAPI)検索 - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiSearch 入力パラメータ( sysid=" + tranTrgtSysid +  " )");
		
		Map<String, Object> searchMap = new HashMap<String, Object>();
		
		// テストモードに応じて通信する/しないを切り替える
		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_IDA_WEB_API_TEST_MODE")))
		{
			// 正常終了
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiSearch result=" + "1");
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiSearch Ida連携(WebAPI)検索 -  END  -");
			
			// テストモードの時は空のマップを返却する
			return new HashMap<String, Object>();
		}
		else
		{
			// 照会結果のリターンコード
			String returnCode = "";
			
			try
			{
				//iDAからユーザ情報を取得する。
				searchMap = callIdaSearchUserSysid(tranTrgtSysid);
				
				// 結果(1:正常終了、-1:異常終了)
				String result = "";
				
				if (searchMap != null)
				{
					returnCode = (String)searchMap.get("RETURN_CODE");
					
					// 正常終了の場合
					if (IDA_RETURN_CODE_000000.equals(returnCode))
					{
						// 正常終了
						result = "1";
					}
					// 検索結果なしの場合
					else if (IDA_RETURN_CODE_001000.equals(returnCode))
					{
						// 異常終了
						result = "-1";
					}
					// 上記以外の場合
					else
					{
						// 異常終了
						result = "-1";
					}
				}
				
				else
				{
					// 異常終了
					result = "-1";
				}
				
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiSearch result=" + result);
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiSearch Ida連携(WebAPI)検索 -  END  -");
			}
			catch (Exception e)
			{
				printErrorLog(e, "JCKLcsRenkeiUtil.requestIdaWebApi [システムエラー SYSID:" + tranTrgtSysid + "iDAリターンコード:" + returnCode + "]");
			}
			finally
			{
				JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "requestiDAWebApiSearch 実行完了");
			}
			
			return searchMap;
		}
	}

	/**
	 * iDAユーザー検索(SYSID)
	 * @param tranTrgtSysid
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaSearchUserSysid(String tranTrgtSysid)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();
		
		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaConnectInfo("1");
		//JSON形式の文字列を作成する。
		reqData = makeIdaSearchUserParam(tranTrgtSysid);
		//iDAのユーザー検索APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//ユーザー検索APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResultSearchUser(httpStatus, responseText);
		
		return idaResultMap;
	}

	/**
	 * iDA結果取得(ユーザー検索)
	 * @param httpStatus HTTPステータス
	 * @param responseText HTTPレスポンスボディ(文字列)
	 * @param commonItem 業務共通電文
	 * @return 処理結果コード
	 */
	private static Map<String, Object> getIdaResultSearchUser(String httpStatus, String responseJson)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		String returnCode = "";
		if ("200".equals(httpStatus))
		{
			try
			{
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultSearchUser ----- iDA連携結果(Map) START -----");
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultSearchUser " + responseJson.toString());
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultSearchUser ----- iDA連携結果(Map)  END  -----");
				
				//Json形式をキーで検索して値を取得
				// 第一階層
				JSONObject json1kaisoMap = new JSONObject(responseJson);
				returnCode = json1kaisoMap.optString("RETURN_CODE");
				// ユーザー情報リスト
				String userInfoList = json1kaisoMap.optString("USER_INFO_LIST");
				if ((userInfoList != null) && (!"".equals(userInfoList)))
				{
					// 第二階層
					//配列（[]）の中にあるJSON形式を取得
					JSONArray userInfoArray = new JSONArray(userInfoList);
					String userInfo = userInfoArray.optString(0);
					JSONObject json2kaisoMap = new JSONObject(userInfo);
					
					// 第三階層
					if (json2kaisoMap != null)
					{
						// ユーザー属性リスト（マップ）
						JSONObject userPropertiesList = (JSONObject) json2kaisoMap.get("USER_PROPERTIES_LIST");
						
						if (userPropertiesList != null)
						{
							// ＳＹＳＩＤ
							String sysid = userPropertiesList.optString("sysid");
							// ニックネーム
							String nkNm = userPropertiesList.optString("nk_nm");
							// 会員種別
							String kiinShubt = userPropertiesList.optString("kiin_shubt");
							// 連絡先メールアドレス
							String rnrkskMr = userPropertiesList.optString("rnrksk_mr");
							// 年齢フラグ
							String ageFlg = userPropertiesList.optString("age_flg");
							// 性別
							String sibt = userPropertiesList.optString("sibt");
							// 登録フラグ
							String turkFlg = userPropertiesList.optString("turk_flg");
							// ISP利用停止フラグ
							String ispRyuTisFlg = userPropertiesList.optString("isp_ryu_tis_flg");
							// 標準コンテンツ規約同意フラグ
							String hyojunKntntDuiFlg = userPropertiesList.optString("hyojun_kntnt_dui_flg");
							// テストIDフラグ
							String tstIdFlg = userPropertiesList.optString("tst_id_flg");
							// 会員状態
							String jyoutai = userPropertiesList.optString("jyoutai");
							// 会員種別特定フラグ
							String kiinTokutei = userPropertiesList.optString("kiin_tokutei");
							// 更新年月日時分秒
							String uDate = userPropertiesList.optString("u_date");
							// ログイン認証レベル取得
							String authenticationLevel = userPropertiesList.optString("authentication_level");
							// ワンタイムキー送付先優先区分取得
							String onetimekeyDestination = userPropertiesList.optString("onetimekey_destination");
							// 契約者携帯電話番号
							String mobileNumber = userPropertiesList.optString("mobile_number");
// v48.00.00 ANK-3771-00-00 ADD START
					        // sub値（Google）
							String subGoogle = userPropertiesList.optString("sub_google");
					        // sub値（Yahoo!）
							String subYahoo = userPropertiesList.optString("sub_yahoo");
					        // sub値（Facebook）
							String subFacebook = userPropertiesList.optString("sub_facebook");
					        // sub値（Apple）
							String subApple = userPropertiesList.optString("sub_apple");
// v48.00.00 ANK-3771-00-00 ADD END
// ANK-4236-00-00 ADD START
					        // パスワード有効フラグ
							String enablePasswordFlg = userPropertiesList.optString("enable_password_flg");
// ANK-4236-00-00 ADD END
							
							// paramMapにセットする
							
							
							// ＳＹＳＩＤ
							paramMap.put("sysid", sysid);
							// ニックネーム
							paramMap.put("nk_nm", nkNm);
							// 会員種別
							paramMap.put("kiin_shubt", kiinShubt);
							// 連絡先メールアドレス
							paramMap.put("rnrksk_mr", rnrkskMr);
							// 年齢フラグ
							paramMap.put("age_flg", ageFlg);
							// 性別
							paramMap.put("sibt", sibt);
							// 登録フラグ
							paramMap.put("turk_flg", turkFlg);
							// ISP利用停止フラグ
							paramMap.put("isp_ryu_tis_flg", ispRyuTisFlg);
							// 標準コンテンツ規約同意フラグ
							paramMap.put("hyojun_kntnt_dui_flg", hyojunKntntDuiFlg);
							// テストIDフラグ
							paramMap.put("tst_id_flg", tstIdFlg);
							// 会員状態
							paramMap.put("jyoutai", jyoutai);
							// 会員種別特定フラグ
							paramMap.put("kiin_tokutei", kiinTokutei);
							// 更新年月日時分秒
							paramMap.put("u_date", uDate);
							// ログイン認証レベル
							paramMap.put("authentication_level", authenticationLevel);
							// ワンタイムキー送付先優先区分取得
							paramMap.put("onetimekey_destination", onetimekeyDestination);
							// 契約者携帯電話番号
							paramMap.put("mobile_number", mobileNumber);
// v48.00.00 ANK-3771-00-00 ADD START
							// sub値（Google）
							paramMap.put("sub_google", subGoogle);
							// sub値（Yahoo!）
							paramMap.put("sub_yahoo", subYahoo);
							// sub値（Facebook）
							paramMap.put("sub_facebook", subFacebook);
							// sub値（Apple）
							paramMap.put("sub_apple", subApple);
// v48.00.00 ANK-3771-00-00 ADD END
// ANK-4236-00-00 ADD START
							// パスワード有効フラグ
							paramMap.put("enable_password_flg", enablePasswordFlg);
// ANK-4236-00-00 ADD END
						}
					}
				}
				
				paramMap.put("RETURN_CODE", returnCode);
			}
			catch (Exception e)
			{
				paramMap.put("RETURN_CODE", "");
				printErrorLog(e, "JCKLcsRenkeiUtil.getIdaResultSearchUser httpレスポンスに失敗しました。(RETURN_CODE: " + returnCode + "、HTTPステータス:" + httpStatus + ")");
			}
		}
		else
		{
			paramMap.put("RETURN_CODE", "");
		}
		
		return paramMap;
	}

	/**
	 * iDA WebAPIに対してiDA信頼済端末全削除を行います。
	 * テストモードの時は空のマップを返却します。
	 * @param tranTrgtSysid 処理対象SYSID
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static Map<String, Object> requestiDAWebApiDeleteTrustedDevice(String tranTrgtSysid) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice iDA WebAPI(iDA信頼済端末全削除) - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice 入力パラメータ( sysid=" + tranTrgtSysid +  " )");
		
		Map<String, Object> resultMap = new HashMap<String, Object>();
		
		// テストモードに応じて通信する/しないを切り替える
		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_IDA_WEB_API_TEST_MODE")))
		{
			// 正常終了
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice result=" + "1");
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice iDA WebAPI(iDA信頼済端末全削除) -  END  -");
			
			// テストモードの時は空のマップを返却する
			return new HashMap<String, Object>();
		}
		else
		{
			// 実行結果のリターンコード
			String returnCode = "";
			
			try
			{
				//iDA信頼済端末全削除の実行結果を取得する。
				resultMap = callIdaDeleteTrustedDevice(tranTrgtSysid);
				
				// 結果(1:正常終了、-1:異常終了)
				String result = "";
				
				if (resultMap != null)
				{
					returnCode = (String)resultMap.get("RETURN_CODE");
					
					// 正常終了の場合
					if (IDA_RETURN_CODE_000000.equals(returnCode))
					{
						// 正常終了
						result = "1";
					}
					// 上記以外の場合
					else
					{
						// 異常終了
						result = "-1";
					}
				}
				
				else
				{
					// 異常終了
					result = "-1";
				}
				
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice result=" + result);
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice iDA WebAPI(iDA信頼済端末全削除) -  END  -");
			}
			catch (Exception e)
			{
				printErrorLog(e, "JCKLcsRenkeiUtil.requestiDAWebApiDeleteTrustedDevice [システムエラー SYSID:" + tranTrgtSysid + "iDAリターンコード:" + returnCode + "]");
			}
			finally
			{
				JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "requestiDAWebApiDeleteTrustedDevice 実行完了");
			}
			
			return resultMap;
		}
	}

	/**
	 * iDA信頼済端末全削除処理
	 * @param tranTrgtSysid
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaDeleteTrustedDevice(String tranTrgtSysid)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		String reqData = "";
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();
		
		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaDeleteTrustedDeviceConnectInfo();
		//JSON形式の文字列を作成する。
		reqData = makeIdaDeleteTrustedDeviceParam(tranTrgtSysid);
		//iDAの信頼済端末全削除APIに対してリクエスト送信する。
		String[] response = sendHttpRequestDeleteTrustedDevice(idaMap, reqData);
		//ユーザー検索APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResultDeleteTrustedDevice(httpStatus, responseText);
		
		return idaResultMap;
	}

	/**
	 * iDA接続情報作成(iDA信頼済端末全削除)
	 * @return iDA接続情報マップ
	 * @throws Exception
	 */
	private static Map<String, Object> makeIdaDeleteTrustedDeviceConnectInfo() throws Exception
	{
		// iDA接続情報マップを作成する。
		//iDAWebAPI_deleteTrustedDevice用URL
		String idaWebApiUrl = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE_URL");
		//iDAユーザー端末削除API
		String IdaWebApiDelete = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE");
		//プロキシホスト
		String IdaWebApiProxyHost = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE_PROXY_HOST");
		//プロキシポート
		String proxyPortStr  = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE_PROXY_PORT");
		Integer IdaWebApiProxyPort  = ((proxyPortStr != null) && (!"".equals(proxyPortStr))) ? new Integer(proxyPortStr) : null;
		//タイムアウト時間
		Integer IdaWebApiTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_TIMEOUT"));
		//コネクションタイムアウト時間
		Integer IdaWebApiConnectionTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_CONNECTION_TIMEOUT"));
		//リトライ回数
		Integer IdaWebApiRetryCnt = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_RETRY_CNT"));
		//リトライインターバル
		Integer IdaWebApiRetryInterval = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_RETRY_INTERVAL"));
		
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// URL
		paramMap.put("URL", idaWebApiUrl + IdaWebApiDelete);
		//プロキシホスト
		paramMap.put("PROXY_HOST", IdaWebApiProxyHost);
		//プロキシポート
		paramMap.put("PROXY_PORT", IdaWebApiProxyPort);
		//タイムアウト時間
		paramMap.put("TIMEOUT", IdaWebApiTimeOut);
		//コネクションタイムアウト時間
		paramMap.put("CONNECTION_TIMEOUT", IdaWebApiConnectionTimeOut);
		//リトライ回数
		paramMap.put("RETRY_CNT", IdaWebApiRetryCnt);
		//リトライインターバル
		paramMap.put("RETRY_INTERVAL", IdaWebApiRetryInterval);
		//メソッドタイプ
		paramMap.put("METHOD_TYPE", "POST");
		//文字コード
		paramMap.put("CHAR_CODE", "UTF-8");
		
		// 上記で生成したiDA接続情報マップを返却する
		return paramMap;
	}

	/**
	 * iDA信頼済端末全削除パラメータ作成
	 * <br>
	 * @param tranTrgtSysid 処理対象SYSID名
	 * @return 作成したJSON形式のリクエストパラメータを返却する。
	 */
	protected static String makeIdaDeleteTrustedDeviceParam(String tranTrgtSysid)
	{
		JSONObject json1kaisoMap = new JSONObject();
		try
		{
			//JSON形式のリクエストパラメータを作成する。
			// v47.00.02 ANK-3706-00-00 MOD START
			//json1kaisoMap.put("COOPERATION_SYSTEM_CODE", "SY020"); //連携先システムコード
			json1kaisoMap.put("COOPERATION_SYSTEM_CODE", "SY030"); //連携先システムコード
			// v47.00.02 ANK-3706-00-00 MOD END
			json1kaisoMap.put("SYSID", tranTrgtSysid); //SYSID
		}
		catch (JSONException e)
		{
			e.printStackTrace();
		}
		return json1kaisoMap.toString();
	}

	/**
	 * IDA連携用のHTTPリクエストを送信し、レスポンスを文字列として取得します。
	 * （エラー時はログを出力後、null を返却します。）<br />
	 * <br />
	 * @param connectMap 接続情報マップ
	 * @param reqData リクエストデータマップ
	 * @param commonItem 業務共通電文
	 * @return リクエスト結果
	 */
	public static String[] sendHttpRequestDeleteTrustedDevice(Map<String, Object> connectMap, String reqData) throws Exception, JSONException
	{
		// レスポンス
		String resultText = null;

		// ログ出力用
		StringBuilder requestParam = new StringBuilder();

		// HttpClientを生成
		HttpClient client = new HttpClient();
		// HttpConnectionManagerParamsを生成
		HttpConnectionManagerParams clientParams = client.getHttpConnectionManager().getParams();
		// HttpMethodParamsを生成
		HttpMethodParams methodParams = new HttpMethodParams();

		// プロキシの設定
		if ((connectMap.get("PROXY_HOST") != null) && (!"".equals(connectMap.get("PROXY_HOST"))))
		{
			HostConfiguration hostConfig = client.getHostConfiguration();
			hostConfig.setProxy((String)connectMap.get("PROXY_HOST"), (Integer)connectMap.get("PROXY_PORT"));
		}

		// タイムアウトの設定
		if (connectMap.get("TIMEOUT") != null)
		{
			Integer timeout = (Integer)connectMap.get("TIMEOUT");
			clientParams.setSoTimeout(timeout.intValue());
		}

		// コネクションタイムアウトの設定
		if (connectMap.get("CONNECTION_TIMEOUT") != null)
		{
			Integer connectionTimeout = (Integer)connectMap.get("CONNECTION_TIMEOUT");
			clientParams.setConnectionTimeout(connectionTimeout.intValue());
		}

		// 文字コードの設定
		if (connectMap.get("CHAR_CODE") != null)
		{
			methodParams.setContentCharset((String)connectMap.get("CHAR_CODE"));
		}

		//iDAWebAPI用URL
		String url = (String)connectMap.get("URL");
		//リクエストデータマップ

		// リクエストメソッドの生成
		PostMethod postMethod = null;
		GetMethod getMethod = null;
		String methodType = (String)connectMap.get("METHOD_TYPE");
		if ("post".equals(methodType.toLowerCase()))
		{
			// リクエストデータのセット
			postMethod = new PostMethod(url);
			
			// ログ出力用
			requestParam.append("paramValue:" + reqData);
			
			postMethod.setParams(methodParams);
			StringRequestEntity requestEntity = new StringRequestEntity(
					reqData,
					"application/Json",
					"UTF-8"
					);
			postMethod.setRequestEntity(requestEntity);
		}
		
		int httpStatus = 500;
		
		Exception ex = null;
		
		JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "sendHttpRequest DeleteTrustedDevice " + convertPassword(requestParam.toString()) + "url:" + url);
		
		// リクエストデータの送信とリトライ
		
		//リトライ回数
		int retryCount = (Integer)connectMap.get("RETRY_CNT");
		//リトライインターバル
		int retryInterval = (Integer)connectMap.get("RETRY_INTERVAL");
		int reqCnt = retryCount + 1;
		for (int i = 0; i < reqCnt; i++)
		{
			ex = null;
			
			try
			{
				if (postMethod != null)
				{
					httpStatus = client.executeMethod(postMethod);
					resultText = postMethod.getResponseBodyAsString();
				}
				if (getMethod != null)
				{
					httpStatus = client.executeMethod(getMethod);
					resultText = getMethod.getResponseBodyAsString();
				}
			}
			catch (HttpException e)
			{
				ex = e;
			}
			catch (ConnectTimeoutException e)
			{
				ex = e;
			}
			catch (IOException e)
			{
				ex = e;
			}
			
			JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "sendHttpRequest DeleteTrustedDevice HTTPステータス:" + httpStatus + " " + "Response:"  + resultText);
			
			// 失敗時はリトライ回数の上限までリトライ
			if (((ex != null) || (httpStatus != 200)) && (i < retryCount))
			{
				try
				{
					Thread.sleep(retryInterval);
				}
				catch (InterruptedException e)
				{
					// 割り込み要求による例外は無視
				}
				// コネクション解放
				if (postMethod != null)
				{
					postMethod.releaseConnection();
				}
				if (getMethod != null)
				{
					getMethod.releaseConnection();
				}
				continue;
			}
			
			break;
		}
		
		// コネクション解放
		if (postMethod != null)
		{
			postMethod.releaseConnection();
			postMethod = null;
		}
		if (getMethod != null)
		{
			getMethod.releaseConnection();
			getMethod = null;
		}
		
		// リクエスト失敗 かつ 例外情報がある場合はthrowする
		if ((httpStatus != 200) && (ex != null))
		{
			throw ex;
		}
		else if (httpStatus != 200)
		{
			printErrorLog(new Exception(), "JCKLcsRenkeiUtil.sendHttpRequesDeleteTrustedDevice httpリクエストに失敗しました。(URL: " + url + "、HTTPステータス:" + httpStatus + ")");
		}
		
		return new String[] { new Integer(httpStatus).toString(), resultText };
	}

	/**
	 * iDA信頼済端末全削除結果取得
	 * @param httpStatus HTTPステータス
	 * @param responseText HTTPレスポンスボディ(文字列)
	 * @param commonItem 業務共通電文
	 * @return 処理結果コード
	 */
	private static Map<String, Object> getIdaResultDeleteTrustedDevice(String httpStatus, String responseJson)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		String returnCode = "";
		String returnMsg = "";
		String apiPid = "";
		if ("200".equals(httpStatus))
		{
			try
			{
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultDeleteTrustedDevice ----- iDA連携結果(Map) START -----");
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultDeleteTrustedDevice " + responseJson.toString());
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultDeleteTrustedDevice ----- iDA連携結果(Map)  END  -----");
				
				//Json形式をキーで検索して値を取得
				// 第一階層
				JSONObject json1kaisoMap = new JSONObject(responseJson);
				
				if (json1kaisoMap != null)
				{
					returnCode = json1kaisoMap.optString("RETURN_CODE");
					returnMsg = json1kaisoMap.optString("RETURN_MSG");
					apiPid = json1kaisoMap.optString("API_PID");
				}
				
				// 戻りコード
				paramMap.put("RETURN_CODE", returnCode);
				// 返却メッセージ
				paramMap.put("RETURN_MSG", returnMsg);
				// APIプロセスID
				paramMap.put("API_PID", apiPid);
			}
			catch (Exception e)
			{
				// 戻りコード
				paramMap.put("RETURN_CODE", "");
				// 返却メッセージ
				paramMap.put("RETURN_MSG", "");
				// APIプロセスID
				paramMap.put("API_PID", "");
				printErrorLog(e, "JCKLcsRenkeiUtil.getIdaResultDeleteTrustedDevice httpレスポンスに失敗しました。(RETURN_CODE: " + returnCode + "、HTTPステータス:" + httpStatus + ")");
			}
		}
		else
		{
			// 戻りコード
			paramMap.put("RETURN_CODE", "");
			// 返却メッセージ
			paramMap.put("RETURN_MSG", "");
			// APIプロセスID
			paramMap.put("API_PID", "");
		}
		
		return paramMap;
	}
	// ANK-3706-00-00 ADD END
	// ANK-4236-02-00 ADD START
	/**
	 * iDA WebAPIに対してiDA認証器照会を行います。
	 * 当処理ではiDA認証器照会のみ単独で実行します。
	 * テストモードの時は空のマップを返却します。
	 * @param org_primary_key 体内系主キー
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static Map<String, Object> requestiDAWebApiGetAuthenticator(String org_primary_key) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator iDA WebAPI(iDA認証器照会) - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator 入力パラメータ( org_primary_key=" + org_primary_key +  " )");
		
		Map<String, Object> searchMap = new HashMap<String, Object>();
		
		// テストモードに応じて通信する/しないを切り替える
		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_IDA_WEB_API_TEST_MODE")))
		{
			// 正常終了
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator result=" + "1");
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator iDA WebAPI(iDA認証器照会) -  END  -");
			
			// テストモードの時は空のマップを返却する
			return new HashMap<String, Object>();
		}
		else
		{
			// 照会結果のリターンコード
			String returnCode = "";
			
			try
			{
				//iDAから認証器情報を取得する。
				searchMap = callIdaGetAuthenticator(org_primary_key);
				
				// 結果(1:正常終了、-1:異常終了)
				String result = "";
				
				if (searchMap != null)
				{
					returnCode = (String)searchMap.get("RETURN_CODE");
					
					// 正常終了の場合
					if (IDA_RETURN_CODE_000000.equals(returnCode))
					{
						// 正常終了
						result = "1";
					}
					// 上記以外の場合
					else
					{
						// 異常終了
						result = "-1";
					}
				}
				
				else
				{
					// 異常終了
					result = "-1";
				}
				
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator result=" + result);
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator iDA WebAPI(iDA認証器照会) -  END  -");
			}
			catch (Exception e)
			{
				printErrorLog(e, "JCKLcsRenkeiUtil.requestiDAWebApiGetAuthenticator [システムエラー SYSID:" + org_primary_key + "iDAリターンコード:" + returnCode + "]");
			}
			finally
			{
				JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "requestiDAWebApiGetAuthenticator 実行完了");
			}
			
			return searchMap;
		}
	}

	/**
	 * iDA認証器照会処理
	 * @param tranTrgtSysid
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaGetAuthenticator(String tranTrgtSysid)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();
		
		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaGetAuthenticatorConnectInfo();
		//JSON形式の文字列を作成する。
		reqData = makeIdaGetAuthenticatorParam(tranTrgtSysid);
		//iDAの認証器照会APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//認証器照会APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaResultGetAuthenticator(httpStatus, responseText);
		
		return idaResultMap;
	}

	/**
	 * iDA接続情報作成(iDA認証器照会)
	 * @return iDA接続情報マップ
	 * @throws Exception
	 */
	public static Map<String, Object> makeIdaGetAuthenticatorConnectInfo() throws Exception
	{
		// iDA接続情報マップを作成する。
		//iDAWebAPI用URL
		String idaWebApiUrl = JCCModelCommon.getApplicationConst("IDA_WEB_API_URL");
		//iDA認証器照会API
		String idaWebApiGetAuthenticator = JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_AUTHENTICATOR");
		//プロキシホスト
		String IdaWebApiProxyHost = JCCModelCommon.getApplicationConst("IDA_WEB_API_PROXY_HOST");
		//プロキシポート
		String proxyPortStr  = JCCModelCommon.getApplicationConst("IDA_WEB_API_PROXY_PORT");
		Integer IdaWebApiProxyPort  = ((proxyPortStr != null) && (!"".equals(proxyPortStr))) ? new Integer(proxyPortStr) : null;
		//タイムアウト時間
		Integer IdaWebApiTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_AUTHENTICATOR_TIMEOUT"));
		//コネクションタイムアウト時間
		Integer IdaWebApiConnectionTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_AUTHENTICATOR_CONNECTION_TIMEOUT"));
		//リトライ回数
		Integer IdaWebApiRetryCnt = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_AUTHENTICATOR_RETRY_CNT"));
		//リトライインターバル
		Integer IdaWebApiRetryInterval = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_RETRY_INTERVAL"));

		//iDAアカウント名
		String IdaWebApiAccount = JCCModelCommon.getApplicationConst("IDA_WEB_API_ACCOUNT");
		//iDAパスワード
		String IdaWebApiPassWord = JCCModelCommon.getApplicationConst("IDA_WEB_API_PASSWORD");
		// パスワードを復元
		IdaWebApiPassWord = JCCModelCommon.getDecryptResultPassword(IdaWebApiPassWord);
		
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		paramMap.put("URL", idaWebApiUrl + idaWebApiGetAuthenticator);
		//プロキシホスト
		paramMap.put("PROXY_HOST", IdaWebApiProxyHost);
		//プロキシポート
		paramMap.put("PROXY_PORT", IdaWebApiProxyPort);
		//タイムアウト時間
		paramMap.put("TIMEOUT", IdaWebApiTimeOut);
		//コネクションタイムアウト時間
		paramMap.put("CONNECTION_TIMEOUT", IdaWebApiConnectionTimeOut);
		//リトライ回数
		paramMap.put("RETRY_CNT", IdaWebApiRetryCnt);
		//リトライインターバル
		paramMap.put("RETRY_INTERVAL", IdaWebApiRetryInterval);
		//メソッドタイプ
		paramMap.put("METHOD_TYPE", "POST");
		//文字コード
		paramMap.put("CHAR_CODE", "UTF-8");
		//Basic認証文字列を設定する。
		paramMap.put("BASIC_AUTH", makeBasicAuth(IdaWebApiAccount, IdaWebApiPassWord));
		
		// 上記で生成したiDA接続情報マップを返却する
		return paramMap;
	}

	/**
	 * iDA認証器照会パラメータ作成
	 * <br>
	 * @param tranTrgtSysid 処理対象SYSID名
	 * @return 作成したJSON形式のリクエストパラメータを返却する。
	 */
	protected static Map<String, Object> makeIdaGetAuthenticatorParam(String tranTrgtSysid)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		try {
			//JSON形式のリクエストパラメータを作成する。
			JSONObject json1kaisoMap = new JSONObject();
			json1kaisoMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
			json1kaisoMap.put("ORG_ID","ID01");//体系ID
			json1kaisoMap.put("ORG_PRIMARY_KEY",tranTrgtSysid);//体系内主キー
			paramMap.put("receiveData",json1kaisoMap.toString());
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return paramMap;
	}

	/**
	 * iDA結果取得(認証器照会)
	 * @param httpStatus HTTPステータス
	 * @param responseText HTTPレスポンスボディ(文字列)
	 * @param commonItem 業務共通電文
	 * @return 処理結果コード
	 */
	private static Map<String, Object> getIdaResultGetAuthenticator(String httpStatus, String responseJson)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		String returnCode = "";
		String returnMsg = "";
		String apiPid = "";
		String registFlg = "";
		if ("200".equals(httpStatus))
		{
			try
			{
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultGetAuthenticator ----- iDA連携結果(Map) START -----");
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultGetAuthenticator " + responseJson.toString());
				printDebugLog("JCKLcsRenkeiUtil.getIdaResultGetAuthenticator ----- iDA連携結果(Map)  END  -----");
				
				//Json形式をキーで検索して値を取得
				// 第一階層
				JSONObject json1kaisoMap = new JSONObject(responseJson);
				if (json1kaisoMap != null)
				{
					returnCode = json1kaisoMap.optString("RETURN_CODE");
					returnMsg = json1kaisoMap.optString("RETURN_MSG");
					apiPid = json1kaisoMap.optString("API_PID");
					registFlg = json1kaisoMap.optString("REGIST_FLG");
				}
				
				// 返却コード
				paramMap.put("RETURN_CODE", returnCode);
				// 返却メッセージ
				paramMap.put("RETURN_MSG", returnMsg);
				// APIプロセスID
				paramMap.put("API_PID", apiPid);
				// 登録フラグ
				paramMap.put("regist_flg", registFlg);
			}
			catch (Exception e)
			{
				// 戻りコード
				paramMap.put("RETURN_CODE", "");
				// 返却メッセージ
				paramMap.put("RETURN_MSG", "");
				// APIプロセスID
				paramMap.put("API_PID", "");
				// 登録フラグ
				paramMap.put("regist_flg", "");
				printErrorLog(e, "JCKLcsRenkeiUtil.getIdaResultGetAuthenticator httpレスポンスに失敗しました。(RETURN_CODE: " + returnCode + "、HTTPステータス:" + httpStatus + ")");
			}
		}
		else
		{
			// 戻りコード
			paramMap.put("RETURN_CODE", "");
			// 返却メッセージ
			paramMap.put("RETURN_MSG", "");
			// APIプロセスID
			paramMap.put("API_PID", "");
			// 登録フラグ
			paramMap.put("regist_flg", "");
		}
		
		return paramMap;
	}

	/**
	 * iDA WebAPIに対してiDA信頼済端末照会を行います。
	 * 当処理ではiDA信頼済端末照会のみ単独で実行します。
	 * テストモードの時は空マップを返却します。
	 * @return 処理結果コード ※1:成功、-1:失敗
	 * @throws Exception
	 */
	public static Map<String, Object> requestiDAWebApiGetTrustedDevice(String key_sysid) throws Exception
	{
		// デバッグログ出力
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice iDA WebAPI(iDA信頼済端末照会) - START -");
		printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice 入力パラメータ( sysid=" + key_sysid +  " )");
		
		Map<String, Object> searchMap = new HashMap<String, Object>();
		
		// テストモードに応じて通信する/しないを切り替える
		if (AXM_REQUEST_TEST_MODE_ON.equals(JCCModelCommon.getApplicationConst("LCS_IDA_WEB_API_TEST_MODE")))
		{
			// 正常終了
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice result=" + "1");
			printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice iDA WebAPI(iDA信頼済端末照会) -  END  -");
			
			// テストモードの時は空のマップを返却する
			return new HashMap<String, Object>();
		}
		else
		{
			// 照会結果のリターンコード
			String returnCode = "";
			
			try
			{
				//iDAから認証器情報を取得する。
				searchMap = callIdaGetITrustedDevice(key_sysid);
				
				// 結果(1:正常終了、-1:異常終了)
				String result = "";
				
				if (searchMap != null)
				{
					returnCode = (String)searchMap.get("RETURN_CODE");
					
					// 正常終了の場合
					if (IDA_RETURN_CODE_000000.equals(returnCode))
					{
						// 正常終了
						result = "1";
					}
					// 上記以外の場合
					else
					{
						// 異常終了
						result = "-1";
					}
				}
				
				else
				{
					// 異常終了
					result = "-1";
				}
				
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice result=" + result);
				printDebugLog("JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice iDA WebAPI(iDA信頼済端末照会) -  END  -");
			}
			catch (Exception e)
			{
				printErrorLog(e, "JCKLcsRenkeiUtil.requestiDAWebApiGetTrustedDevice [システムエラー SYSID:" + key_sysid + "iDAリターンコード:" + returnCode + "]");
			}
			finally
			{
				JSYejbLog.println(JSYejbLog.EXECUTION, JCKLcsRenkeiUtil.class, "requestiDAWebApiGetITrustedDevice 実行完了");
			}
			
			return searchMap;
		}
	}

	/**
	 * iDA信頼済端末照会処理
	 * @param key_sysid
	 * @return Mapオブジェクト
	 * @throws Exception
	 */
	private static Map<String, Object> callIdaGetITrustedDevice(String key_sysid)
	         throws Exception
	{
		Map<String, Object> idaMap =  new HashMap<String, Object>();
		Map<String, Object> reqData =  new HashMap<String, Object>();
		Map<String, Object> idaResultMap =  new HashMap<String, Object>();
		
		//iDA接続情報マップ作成を作成する。
		idaMap = makeIdaGetTrustedDeviceConnectInfo();
		//Get送信用のパラメータを作成する。
		reqData = makeIdaGetTrustedDeviceParam(key_sysid);
		//信頼済端末照会APIに対してリクエスト送信する。
		String[] response = sendHttpRequest(idaMap, reqData);
		//信頼済端末照会APIの連携結果を取得する。
		// 処理結果を取得
		String httpStatus   = response[0];
		String responseText = response[1];
		idaResultMap = getIdaWebApiGetTrustedDevice(httpStatus, responseText);
		
		return idaResultMap;
	}

	/**
	 * iDA接続情報作成(iDA信頼済端末照会)
	 * @return iDA接続情報マップ
	 * @throws Exception
	 */
	public static Map<String, Object> makeIdaGetTrustedDeviceConnectInfo() throws Exception
	{
		// iDA接続情報マップを作成する。
		//iDAWebAPI用URL
		String idaWebApiUrl = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE_URL");
		//iDA認証器照会API
		String idaWebApiGetAuthenticator = JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_TRUSTED_DEVICE");
		//プロキシホスト
		String IdaWebApiProxyHost = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE_PROXY_HOST");
		//プロキシポート
		String proxyPortStr  = JCCModelCommon.getApplicationConst("IDA_WEB_API_DELETE_DEVICE_PROXY_PORT");
		Integer IdaWebApiProxyPort  = ((proxyPortStr != null) && (!"".equals(proxyPortStr))) ? new Integer(proxyPortStr) : null;
		//タイムアウト時間
		Integer IdaWebApiTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_TRUSTED_DEVICE_TIMEOUT"));
		//コネクションタイムアウト時間
		Integer IdaWebApiConnectionTimeOut = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_TRUSTED_DEVICE_CONNECTION_TIMEOUT"));
		//リトライ回数
		Integer IdaWebApiRetryCnt = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_GET_TRUSTED_DEVICE_RETRY_CNT"));
		//リトライインターバル
		Integer IdaWebApiRetryInterval = Integer.parseInt(JCCModelCommon.getApplicationConst("IDA_WEB_API_RETRY_INTERVAL"));

		//iDAアカウント名
		String IdaWebApiAccount = JCCModelCommon.getApplicationConst("IDA_WEB_API_ACCOUNT");
		//iDAパスワード
		String IdaWebApiPassWord = JCCModelCommon.getApplicationConst("IDA_WEB_API_PASSWORD");
		// パスワードを復元
		IdaWebApiPassWord = JCCModelCommon.getDecryptResultPassword(IdaWebApiPassWord);
		
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		paramMap.put("URL", idaWebApiUrl + idaWebApiGetAuthenticator);
		//プロキシホスト
		paramMap.put("PROXY_HOST", IdaWebApiProxyHost);
		//プロキシポート
		paramMap.put("PROXY_PORT", IdaWebApiProxyPort);
		//タイムアウト時間
		paramMap.put("TIMEOUT", IdaWebApiTimeOut);
		//コネクションタイムアウト時間
		paramMap.put("CONNECTION_TIMEOUT", IdaWebApiConnectionTimeOut);
		//リトライ回数
		paramMap.put("RETRY_CNT", IdaWebApiRetryCnt);
		//リトライインターバル
		paramMap.put("RETRY_INTERVAL", IdaWebApiRetryInterval);
		//メソッドタイプ
		paramMap.put("METHOD_TYPE", "GET");
		//文字コード
		paramMap.put("CHAR_CODE", "UTF-8");
		//Basic認証文字列を設定する。
		paramMap.put("BASIC_AUTH", makeBasicAuth(IdaWebApiAccount, IdaWebApiPassWord));
		
		// 上記で生成したiDA接続情報マップを返却する
		return paramMap;
	}

	/**
	 * iDA信頼済端末照会パラメータ作成
	 * <br>
	 * @param tranTrgtSysid 処理対象SYSID名
	 * @return 作成したMap形式のリクエストパラメータを返却する。
	 */
	protected static Map<String, Object> makeIdaGetTrustedDeviceParam(String key_sysid)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		try {
			//Map形式のリクエストパラメータを作成する。
			paramMap.put("COOPERATION_SYSTEM_CODE","SY030");//連携先システムコード
			paramMap.put("SYSID",key_sysid);//key_sysid
		} catch (Exception e) {
			e.printStackTrace();
		}
		return paramMap;
	}

	/**
	 * iDA結果取得(信頼済端末照会)
	 * @param httpStatus HTTPステータス
	 * @param responseText HTTPレスポンスボディ(文字列)
	 * @param commonItem 業務共通電文
	 * @return 処理結果コード
	 */
	private static Map<String, Object> getIdaWebApiGetTrustedDevice(String httpStatus, String responseJson)
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		String returnCode = "";
		String returnMsg = "";
		String apiPid = "";
		String registFlg = "";
		
		if ("200".equals(httpStatus))
		{
			try
			{
				printDebugLog("JCKLcsRenkeiUtil.getIdaWebApiGetTrustedDevice ----- iDA連携結果(Map) START -----");
				printDebugLog("JCKLcsRenkeiUtil.getIdaWebApiGetTrustedDevice " + responseJson.toString());
				printDebugLog("JCKLcsRenkeiUtil.getIdaWebApiGetTrustedDevice ----- iDA連携結果(Map)  END  -----");
				
				//Json形式をキーで検索して値を取得
				// 第一階層
				JSONObject json1kaisoMap = new JSONObject(responseJson);
				if (json1kaisoMap != null)
				{
					returnCode = json1kaisoMap.optString("RETURN_CODE");
					returnMsg = json1kaisoMap.optString("RETURN_MSG");
					apiPid = json1kaisoMap.optString("API_PID");
					registFlg = json1kaisoMap.optString("REGIST_FLG");
				}
				
				// 登録フラグ
				paramMap.put("RETURN_CODE", returnCode);
				paramMap.put("RETURN_MSG", returnMsg);
				paramMap.put("API_PID", apiPid);
				paramMap.put("regist_flg", registFlg);
			}
			catch (Exception e)
			{
				// 登録フラグ
				paramMap.put("RETURN_CODE", "");
				paramMap.put("RETURN_MSG", "");
				paramMap.put("API_PID", "");
				paramMap.put("regist_flg", "");
				printErrorLog(e, "JCKLcsRenkeiUtil.getIdaWebApiGetTrustedDevice httpレスポンスに失敗しました。(RETURN_CODE: " + returnCode + "、HTTPステータス:" + httpStatus + ")");
			}
		}
		else
		{
			// 登録フラグ
			paramMap.put("RETURN_CODE", "");
			paramMap.put("RETURN_MSG", "");
			paramMap.put("API_PID", "");
			paramMap.put("regist_flg", "");
		}
		
		return paramMap;
	}
	// ANK-4236-02-00 ADD END
}
