/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKCtrlTnInfoImpl
*   ソースファイル名：JKKCtrlTnInfoImpl.java
*   作成者          ：富士通
*   日付            ：2012年07月11日
*＜機能概要＞
*   宅内機器連携（本番向け）コマンド発行部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/07/11   FJ) 富士通  新規作成
*   v3.00.00    2012/08/31   FJ) 古田    IT1-2012-0000977
*   v4.00.00    2012/12/14   FJ) 中井    ANK-1389-00-00
*   v4.00.01    2012/12/27   FJ) 古内    IT1-2013-0000037
*   v4.00.02    2013/02/14   FJ) 古内    ST1-2013-0000311
*   v4.00.03    2013/03/14   FJ) 福井    IKK-2013-0000327
*   v5.00.00    2013/06/28   FJ) 大山    LT-2013-0000080
*   v5.00.01    2013/10/31   FJ) 古内    OM-2013-0003569
*   v68.00.00   2023/11/22   FJ) 三角    ANK-4463-00-00_【eo定期】サービスサーバリプレース対応_ＳT工程まで
**********************************************************************/

package eo.ejb.common;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentConstant;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JWCStrConst;
import eo.ejb.cbs.cbsmsg.EKKA0020001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020003CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020005CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020006CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020006CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020502CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020502CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020503CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020503CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020503CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020504CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020504CBSMsg1List;

/**
 * 宅内機器連携コマンド発行部品です。<p>
 * <br>
 * @author 富士通
 */
@SuppressWarnings({"unchecked", "serial"})
public class JKKCtrlTnInfoImpl extends JKKCtrlTnInfo
{

	private static JKKCtrlTnInfoImpl instance = null;

	private Connection connection = null;

	private AgentDispatchContext inContext;

	private static final int KB = 1024;
	
	private static final int SOCKET_SEND_SIZE = 10 * KB;
	
	public void setInContext(AgentDispatchContext inContext)
	{
		this.inContext = inContext;
	}

	private JKKCtrlTnInfoImpl()
	{
		super();
		instance = null;
	}

	/**
	 * インスタンス取得用のメソッド
	 * 
	 * @return JKKCtrlTnInfoStubImpl
	 */
	public static JKKCtrlTnInfoImpl getInstance()
	{
		synchronized (JKKCtrlTnInfoImpl.class)
		{
			if (instance == null)
			{
				JKKCtrlTnInfoImpl.instance = new JKKCtrlTnInfoImpl();
			}
		}

		return instance;
	}

	// HTTP関連定数定義
	/**
	 * HTTPヘッダ Content-TYPE
	 */
	private static final String CONTENT_TYPE = "Content-Type";

	/**
	 * HTTPヘッダ Conten-TYPE（値）
	 */
	private static final String CONTENT_TYPE_VALUE = "text/xml; charset=UTF-8";

	/**
	 * HTTPヘッダ リクエストメソッド定数
	 */
	private static final String HTTP_REQUEST_METHOD = "POST";

	//SOAP 関連定数定義
	/**
	 * SOAP1.2用Namespace
	 */
	private static final String SOAP12 = "http://schemas.xmlsoap.org/soap/envelope/";

	/**
	 * SOAPエンベロープのPrefix
	 */
	private static final String SOAP_PREFIX = "SOAP-ENV";

	// SAOP-ENV:body内部系
	/**
	 * SOAP-ENV BODY用のPrefix
	 */
	private static final String BODY_PREFIX = "";

	/**
	 * パッケージ用Namespace
	 */
	private static final String BODY_NAMESPACE = "";

	/**
	 * XSL用Prefix
	 */
	private static final String XSL_PREFIX = "xsl";

	/**
	 * XSL用Namespace
	 */
	private static final String XSL_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";

	// CRLF定数定義
	/**
	 * CRLF定数定義
	 */
	private static final String CRLF = "\r\n";

	// XML要素情報定数定義（結果コード取得電文）
	/**
	 * SOALFAULT（処理例外）
	 */
	private static final String SOAP_FAULT = "fault";

	/**
	 * SOALFAULT（エラーコード）
	 */
	private static final String SOAP_FAULT_CODE = "reason";

	/**
	 * SOALFAULT（エラー詳細）
	 */
	private static final String SOAP_FAULT_STRING = "detail";

	/**
	 * 制御エラー応答コード
	 */
	private static final String ERRCODE = "ErrCode";

	/**
	 * XML要素condition
	 */
	private static final String CONDITION = "condition";

	/**
	 * XML要素record
	 */
	private static final String RECORD = "record";

	/**
	 * XML要素Body
	 */
	private static final String BODY = "Body";

	/**
	 * 結果コード
	 */
	private static final String CMD_RESULT_CD = "CMD_RESULT_CD";
	
	/**
	 * エラーメッセージ
	 */
	private static final String CMD_ERROR_MESSAGE = "CMD_ERROR_MESSAGE";
	
	/**
	 * コマンド_URL
	 */
	private static final String CMD_URL = "KK_CMD_URL";
	
	/**
	 * TN_URL
	 */
	private static final String TN_URL = "TN_URL";
	

	// メッセージwriterから実装を移管

	/**
	 * XMLStreamWriterクラス
	 */
	private XMLStreamWriter writer = null;

	/**
	 * Writerクラス
	 */
	private Writer wt = null;

	// 文字化け対策
	/**
	 * StringWriterクラス
	 */
	private StringWriter sw = null;

	/**
	 * 戻り電文がSoapメッセージ
	 */
	private boolean soapMessage = false;

	/**
	 * 戻り電文HTTPヘッダ
	 */
	private HashMap<Object, Object> header = new HashMap<Object, Object>();

	/**
	 * 呼び出し区分
	 */
	public String trace_kbn = "";

	/**
	 * 呼び出し区分：設置場所一意照会(EKKA0020001)
	 */
	private static final String TRACE_KBN_KKA0001 = "1";

	/**
	 * 呼び出し区分：設置場所番号取得(EKKA0020002)
	 */
	private static final String TRACE_KBN_KKA0002 = "2";

	/**
	 * 呼び出し区分：宅内機器一意照会（４）(EKKA0020003)
	 */
	private static final String TRACE_KBN_KKA0003 = "3";
	

	/**
	 * 呼び出し区分：機器場所番号変更(EKKA0020004)
	 */
	private static final String TRACE_KBN_KKA0004 = "4";

	/**
	 * 呼び出し区分：宅内機器物流在庫一意照会(EKKA0020005)
	 */
	private static final String TRACE_KBN_KKA0005 = "5";

	/**
	 * 呼び出し区分：上位機器製造番号更新(EKKA0020501)
	 */
	private static final String TRACE_KBN_KKA0006 = "6";

	/**
	 * 呼び出し区分：宅内機器一意照会（６）(EKKA0020502)
	 */
	private static final String TRACE_KBN_KKA0007 = "7";

	/**
	 * 呼び出し区分：宅内機器物流在庫一覧照会２(EKKA0020503)
	 */
	private static final String TRACE_KBN_KKA0008 = "8";

	/**
	 * 呼び出し区分：宅内機器物流在庫更新(EKKA0020504)
	 */
	private static final String TRACE_KBN_KKA0009 = "9";

	/**
	 * 呼び出し区分：サービス契約番号更新(EKKA0020006)
	 */
	private static final String TRACE_KBN_KKA0010 = "10";

	/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
	/**
	 * データ定義サービスIDテーブル
	 */
	private static HashMap<String, String> EO_IFID = new HashMap<String, String>()
	{
		{
			put(TRACE_KBN_KKA0001, "KKIFE178");
			put(TRACE_KBN_KKA0002, "KKIFE179");
			put(TRACE_KBN_KKA0003, "KKIFE180");
			put(TRACE_KBN_KKA0004, "KKIFE181");
			put(TRACE_KBN_KKA0005, "KKIFE182");
			put(TRACE_KBN_KKA0006, "KKIFE173");
			put(TRACE_KBN_KKA0007, "KKIFE174");
			put(TRACE_KBN_KKA0008, "KKIFE175");
			put(TRACE_KBN_KKA0009, "KKIFE176");
			put(TRACE_KBN_KKA0010, "KKIFE189");

		}
	};
	/* ++++++++++ v4.00.00 追加終了 ++++++++++ */

	// エンドポイント定数
	private static final String ENDPOINT_KKA0001 = "taku_fsekiku00";
//ANK-4463-00-00 MOD START
	//private static final String ENDPOINT_KKA0002 = "taku_fsebasu0010";
	//private static final String ENDPOINT_KKA0003 = "taku_fsekikr0090";
	//private static final String ENDPOINT_KKA0004 = "taku_fsekiku0070";
	//private static final String ENDPOINT_KKA0005 = "taku_fsezair0020";
	//private static final String ENDPOINT_KKA0006 = "taku_fsekiku0080";
	//private static final String ENDPOINT_KKA0007 = "taku_fsekikr0110";
	//private static final String ENDPOINT_KKA0008 = "taku_fsezair0010";
	//private static final String ENDPOINT_KKA0009 = "taku_fsezaiu0010";
	//private static final String ENDPOINT_KKA0010 = "taku_fsekiku0130";
	private static final String ENDPOINT_KKA0002 = "FSEBASU0010";
	private static final String ENDPOINT_KKA0003 = "FSEKIKR0090";
	private static final String ENDPOINT_KKA0004 = "FSEKIKU0070";
	private static final String ENDPOINT_KKA0005 = "FSEZAIR0020";
	private static final String ENDPOINT_KKA0006 = "FSEKIKU0080";
	private static final String ENDPOINT_KKA0007 = "FSEKIKR0110";
	private static final String ENDPOINT_KKA0008 = "FSEZAIR0010";
	private static final String ENDPOINT_KKA0009 = "FSEZAIU0010";
	private static final String ENDPOINT_KKA0010 = "FSEKIKU0130";
//ANK-4463-00-00 MOD END

	
	/**
	 * データ定義、XML要素変換テーブル
	 */
	private static HashMap<String, String> elementToMap = new HashMap<String, String>()
	{
		{
			//ＫＥＹ＿宅内機器型式コード->宅内機器型式コード
			put(EKKA0020501CBSMsg1List.KEY_KIHON_UPD_DTTM, "KIHON_UPD_DTTM");
			//ＫＥＹ＿機器製造番号->機器製造番号
			put(EKKA0020501CBSMsg1List.KEY_KK_SEIZO_NO, "KK_SEIZO_NO");
			//ＫＥＹ＿宅内機器基本Ｔ更新日付->宅内機器基本Ｔ更新日付
			put(EKKA0020501CBSMsg1List.KEY_TK_MDL_CD, "TK_MDL_CD");
			//ＫＥＹ＿上位宅内機器型式コード->上位宅内機器型式コード
			put(EKKA0020501CBSMsg1List.JOI_TK_MDL_CD, "JOI_TK_MDL_CD");
			//ＫＥＹ＿上位宅内機器製造番号->上位宅内機器製造番号
			put(EKKA0020501CBSMsg1List.JOI_KK_SEIZO_NO, "JOI_KK_SEIZO_NO");

			//ＫＥＹ＿管理場所識別コード->管理場所識別コード
			put(EKKA0020502CBSMsg1List.KEY_MAC_AD, "MAC_AD");

			//ＫＥＹ＿管理場所識別コード->管理場所識別コード
			put(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SKBT_CD, "KNRI_PLC_SKBT_CD");
			//ＫＥＹ＿管理場所棚コード->管理場所棚コード
			put(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SLF_CD, "KNRI_PLC_SLF_CD");

			
			//ＫＥＹ＿管理場所コード->管理場所コード
			put(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_CD, "KNRI_PLC_CD");
			
		    //実在庫数
		    put(EKKA0020504CBSMsg1List.JZAIKO_NUM,"JZAIKO_NUM");
		    //配送受付（受注）数
		    put(EKKA0020504CBSMsg1List.HAISO_UK_JUCHU_NUM,"HAISO_UK_JUCHU_NUM");
		    //配送出荷指示数
		    put(EKKA0020504CBSMsg1List.HAISO_SHKA_SJI_NUM,"HAISO_SHKA_SJI_NUM");
		    //予備機器配送指示数
		    put(EKKA0020504CBSMsg1List.YBKKHAI_SJI_NUM,"YBKKHAI_SJI_NUM");
		    //棚移動指示数
		    put(EKKA0020504CBSMsg1List.SLF_MV_SJI_NUM,"SLF_MV_SJI_NUM");
		    //予備機器配送中数
		    put(EKKA0020504CBSMsg1List.YBKKHAI_CHU_NUM,"YBKKHAI_CHU_NUM");
		    //当日入荷数
		    put(EKKA0020504CBSMsg1List.TJITU_NYUKA_NUM,"TJITU_NYUKA_NUM");
		    //当日配送出荷数
		    put(EKKA0020504CBSMsg1List.TJITU_HAISO_SHKA_NUM,"TJITU_HAISO_SHKA_NUM");
		    //当日解約撤去返品数
		    put(EKKA0020504CBSMsg1List.TJITU_DSL_TK_HMPIN_NUM,"TJITU_DSL_TK_HMPIN_NUM");
		    //当日故障交換返品数
		    put(EKKA0020504CBSMsg1List.TJITU_TRB_KOKAN_HMPIN_NUM,"TJITU_TRB_KOKAN_HMPIN_NUM");
		    //棚移動入荷完了数
		    put(EKKA0020504CBSMsg1List.SLF_MV_NYUKA_FIN_NUM,"SLF_MV_NYUKA_FIN_NUM");
		    //棚移動出荷完了数
		    put(EKKA0020504CBSMsg1List.SLF_MV_SHKA_FIN_NUM,"SLF_MV_SHKA_FIN_NUM");
		    //予備機器出荷完了数
		    put(EKKA0020504CBSMsg1List.YOBI_KKSHKA_FIN_NUM,"YOBI_KKSHKA_FIN_NUM");
		    //計画外入荷数
		    put(EKKA0020504CBSMsg1List.PLN_GAI_NYUKA_NUM,"PLN_GAI_NYUKA_NUM");
		    //計画外出荷数
		    put(EKKA0020504CBSMsg1List.PLN_GAI_SHKA_NUM,"PLN_GAI_SHKA_NUM");

			
			// ＫＥＹ＿ＫＥＹ＿設置場所番号
			put(EKKA0020001CBSMsg1List.KEY_SETPLACE_NO,"SETPLACE_NO");
		    //ＫＥＹ＿設置場所住所コード
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD,"SETPLACE_AD_CD");
		    //ＫＥＹ＿設置場所郵便番号
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD,"SETPLACE_PCD");
		    //ＫＥＹ＿設置場所都道府県名
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM,"SETPLACE_STATE_NM");
		    //ＫＥＹ＿設置場所市区町村名
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM,"SETPLACE_CITY_NM");
		    //ＫＥＹ＿設置場所大字通称名
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM,"SETPLACE_OAZTSU_NM");
		    //ＫＥＹ＿設置場所字丁目名
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM,"SETPLACE_AZCHO_NM");
		    //ＫＥＹ＿設置場所番地号
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO,"SETPLACE_BNCHIGO");
		    //ＫＥＹ＿設置場所住所補記建物名
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM,"SETPLACE_ADRTTM");
		    //ＫＥＹ＿設置場所住所補記部屋番号
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM,"SETPLACE_ADRRM");
			//ＫＥＹ＿設置場所住所手動入力フラグ
		    put(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_MAN_INPUT_FLG,"AD_MAN_INPUT_FLG");
		    //ＫＥＹ＿変更理由コード
		    put(EKKA0020004CBSMsg1List.KEY_CHG_RSN_CD,"CHGRE_CD");
		    //ＫＥＹ＿宅内機器基本Ｔ更新日付
		    put(EKKA0020004CBSMsg1List.KEY_BTRY_UPD_DTTM,"KIHON_UPD_DTTM");
		    //ＫＥＹ＿設置場所番号
		    put(EKKA0020004CBSMsg1List.SETPLACE_NO,"SETPLACE_NO");
		    //ＫＥＹ＿サービス契約番号
		    put(EKKA0020004CBSMsg1List.SVC_KEI_NO,"SVKEI_NO");

		    //ＫＥＹ＿商品状態コード
		    put(EKKA0020005CBSMsg1List.KEY_GDS_STAT_CD,"GDS_STAT_CD");
		}
	};

	/**
	 * データ定義、XML要素変換テーブル（戻り電文）
	 */
	private static HashMap<String, String> mapToElement = new HashMap<String, String>()
	{
		{
			//設置場所番号
			put("SETPLACE_NO",EKKA0020002CBSMsg2List.SETPLACE_NO);
			//設置場所住所コード
			put("SETPLACE_AD_CD",EKKA0020002CBSMsg2List.SETPLACE_AD_CD);
			//設置場所郵便番号
			put("SETPLACE_PCD",EKKA0020002CBSMsg2List.SETPLACE_PCD);
			//設置場所都道府県名
			put("SETPLACE_STATE_NM",EKKA0020002CBSMsg2List.SETPLACE_STATE_NM);
			//設置場所市区町村名
			put("SETPLACE_CITY_NM",EKKA0020002CBSMsg2List.SETPLACE_CITY_NM);
			//設置場所大字通称名
			put("SETPLACE_OAZTSU_NM",EKKA0020002CBSMsg2List.SETPLACE_OAZTSU_NM);
			//設置場所字丁目名
			put("SETPLACE_AZCHO_NM",EKKA0020002CBSMsg2List.SETPLACE_AZCHO_NM);
			//設置場所番地号
			put("SETPLACE_BNCHIGO",EKKA0020002CBSMsg2List.SETPLACE_BNCHIGO);
			//設置場所住所補記・建物名
			put("SETPLACE_ADRTTM",EKKA0020002CBSMsg2List.SETPLACE_ADRTTM);
			//設置場所住所補記・部屋番号
			put("SETPLACE_ADRRM",EKKA0020002CBSMsg2List.SETPLACE_ADRRM);
			//設置場所住所手動入力フラグ
			put("AD_MAN_INPUT_FLG",EKKA0020002CBSMsg2List.SETPLACE_AD_MAN_INPUT_FLG);
			//宅内機器型式コード
			put("TK_MDL_CD",EKKA0020003CBSMsg2List.TK_MDL_CD);
			put("KK_SEIZO_NO",EKKA0020003CBSMsg2List.KK_SEIZO_NO);
			//ＭＡＣアドレス
			put("MAC_AD",EKKA0020003CBSMsg2List.MAC_AD);
			//ＳＴＢＩＤ
			put("STBID",EKKA0020003CBSMsg2List.STBID);
			//仮鍵開年月日
			put("KR_KEY_STA_YMD",EKKA0020003CBSMsg2List.KR_KEY_STA_YMD);
			//宅内機器セット品番号
			put("TK_SETHN_NO",EKKA0020003CBSMsg2List.TAKNKIKI_SETHIN_NO);
			//宅内機器ステータス
			put("TK_STAT",EKKA0020003CBSMsg2List.TAKNKIKI_STAT);
			//設置場所番号
			put("SETPLACE_NO",EKKA0020003CBSMsg2List.SETPLACE_NO);
			//場所設置年月日
			put("PLC_STC_YMD",EKKA0020003CBSMsg2List.PLC_STC_YMD);
			//上位宅内機器型式コード
			put("JOI_TK_MDL_CD",EKKA0020003CBSMsg2List.JOI_TK_MDL_CD);
			//上位機器製造番号
			put("JOI_KK_SEIZO_NO",EKKA0020003CBSMsg2List.JOI_KK_SEIZO_NO);
			//保証開始年月日
			put("HOSHO_STAYMD",EKKA0020003CBSMsg2List.HOSHO_STAYMD);
			//保証終了年月日
			put("HOSHO_ENDYMD",EKKA0020003CBSMsg2List.HOSHO_ENDYMD);
			//ＵＱ認証ＩＤ
			put("UQ_NINSHOID",EKKA0020003CBSMsg2List.UQ_NINSHO_ID);
			//ＵＱパスワード
			put("UQ_PWD",EKKA0020003CBSMsg2List.UQ_PWD);
			//ＥＭ契約者コード
			put("EM_KSH_CD",EKKA0020003CBSMsg2List.EM_KEISHA_CD);
			//ＩＣＣＩＤ
			put("ICCID",EKKA0020003CBSMsg2List.ICC_ID);
			//ＭＡＣ認証ＩＤ
			put("MAC_NINSHOID",EKKA0020003CBSMsg2List.MAC_NINSHO_ID);
			//ＭＳＩＳＤＮ
			put("MSISDN",EKKA0020003CBSMsg2List.MSISDN);
			//メーカー名１
			put("MAKER_NM_1",EKKA0020003CBSMsg2List.MAKER_NM1);
			//メーカー名２
			put("MAKER_NM_2",EKKA0020003CBSMsg2List.MAKER_NM2);
			//宅内機器種別コード
			put("TK_SBT_CD",EKKA0020003CBSMsg2List.TK_SBT_CD);
			//ＨＤＤ容量コード
			put("HDD_CAPA_CD",EKKA0020003CBSMsg2List.HDD_SIZE_CD);
			//無料ルーター表示文言
			put("MRYO_ROUTER_DSP_MONGON",EKKA0020003CBSMsg2List.MURYO_ROUTER_DISP_MONGON);
			//保有ルータコード
			put("HOYU_ROUTER_CD",EKKA0020003CBSMsg2List.HOYU_ROUTER_CD);
			//宅内機器型式略称名
			put("ALI_NM",EKKA0020003CBSMsg2List.TK_MDL_ALI_NM);
			//宅内機器型式名
			put("TK_MDL_NM",EKKA0020003CBSMsg2List.TK_MDL_NM);
			//メーカーコード
			put("MAKER_CD",EKKA0020003CBSMsg2List.MAKER_CD);
			//設置場所住所コード
			put("SETPLACE_AD_CD",EKKA0020003CBSMsg2List.SETPLACE_AD_CD);
			//設置場所郵便番号
			put("SETPLACE_PCD",EKKA0020003CBSMsg2List.SETPLACE_PCD);
			//設置場所都道府県名
			put("SETPLACE_STATE_NM",EKKA0020003CBSMsg2List.SETPLACE_STATE_NM);
			//設置場所市区町村名
			put("SETPLACE_CITY_NM",EKKA0020003CBSMsg2List.SETPLACE_CITY_NM);
			//設置場所大字通称名
			put("SETPLACE_OAZTSU_NM",EKKA0020003CBSMsg2List.SETPLACE_OAZTSU_NM);
			//設置場所字丁目名
			put("SETPLACE_AZCHO_NM",EKKA0020003CBSMsg2List.SETPLACE_AZCHO_NM);
			//設置場所番地号
			put("SETPLACE_BNCHIGO",EKKA0020003CBSMsg2List.SETPLACE_BNCHIGO);
			//設置場所住所補記・建物名
			put("SETPLACE_ADRTTM",EKKA0020003CBSMsg2List.SETPLACE_ADRTTM);
			//設置場所住所補記・部屋番号
			put("SETPLACE_ADRRM",EKKA0020003CBSMsg2List.SETPLACE_ADRRM);
			//宅内機器ＳＴＢＴ更新日付
			put("STBT_UPD_DTTM",EKKA0020003CBSMsg2List.STBT_UPD_DTTM);
			//宅内機器基本Ｔ更新日付
			put("KIHONT_UPD_DTTM",EKKA0020003CBSMsg2List.KIHONT_UPD_DTTM);
			//宅内機器ＣＡＳＴ更新日付
			put("CAST_UPD_DTTM",EKKA0020003CBSMsg2List.CAST_UPD_DTTM);

			//管理場所識別コード
			put("KNRI_PLC_SKBT_CD",EKKA0020005CBSMsg2List.KNRI_PLC_SKBT_CD);
			//管理場所コード
			put("KNRI_PLC_CD",EKKA0020005CBSMsg2List.KNRI_PLC_CD);
			//管理場所棚コード
			put("KNRI_PLC_SLF_CD",EKKA0020005CBSMsg2List.KNRI_PLC_SLF_CD);
			//宅内機器型式コード
			put("TK_MDL_CD",EKKA0020005CBSMsg2List.TK_MDL_CD);
			//実在庫数
			put("JZAIKO_NUM",EKKA0020005CBSMsg2List.JZAIKO_CNT);
			//配送受付（受注）数
			put("HAISO_UK_JUCHU_NUM",EKKA0020005CBSMsg2List.HAISO_UK_JUCHU_CNT);
			//配送出荷指示数
			put("HAISO_SHKA_SJI_NUM",EKKA0020005CBSMsg2List.HAISO_SHKA_SJI_CNT);
			//予備機器配送指示数
			put("YBKKHAI_SJI_NUM",EKKA0020005CBSMsg2List.YBKIKI_HAISO_SJI_CNT);
			//棚移動指示数
			put("SLF_MV_SJI_NUM",EKKA0020005CBSMsg2List.SHELF_MV_SJI_CNT);
			//予備機器配送中数
			put("YBKKHAI_CHU_NUM",EKKA0020005CBSMsg2List.YBKIKI_HAISO_CHU_CNT);
			//当日入荷数
			put("TJITU_NYUKA_NUM",EKKA0020005CBSMsg2List.TJITU_NYUKA_CNT);
			//当日配送出荷数
			put("TJITU_HAISO_SHKA_NUM",EKKA0020005CBSMsg2List.TJITU_HAISO_SHKA_CNT);
			//当日解約撤去返品数
			put("TJITU_DSL_TK_HMPIN_NUM",EKKA0020005CBSMsg2List.TJITU_DSL_TEKKYO_HMPIN_CNT);
			//当日故障交換返品数
			put("TJITU_TRB_KOKAN_HMPIN_NUM",EKKA0020005CBSMsg2List.TJITU_TRB_KOKAN_HMPIN_CNT);
			//棚移動入荷完了数
			put("SLF_MV_NYUKA_FIN_NUM",EKKA0020005CBSMsg2List.SHELF_MV_NYUKA_FIN_CNT);
			//棚移動出荷完了数
			put("SLF_MV_SHKA_FIN_NUM",EKKA0020005CBSMsg2List.SHELF_MV_SHKA_FIN_CNT);
			//予備機器出荷完了数
			put("YOBI_KKSHKA_FIN_NUM",EKKA0020005CBSMsg2List.YBKIKI_SHKA_FIN_CNT);
			//計画外入荷数
			put("PLN_GAI_NYUKA_NUM",EKKA0020005CBSMsg2List.PLAN_GAI_NYUKA_CNT);
			//計画外出荷数
			put("PLN_GAI_SHKA_NUM",EKKA0020005CBSMsg2List.PLAN_GAI_SHKA_CNT);

			//商品状態コード
			put("GDS_STAT_CD",EKKA0020005CBSMsg2List.GDS_STAT_CD);

			//機器製造番号
			put("KK_SEIZO_NO",EKKA0020502CBSMsg2List.KK_SEIZO_NO);
			//MACアドレス
			put("MAC_AD",EKKA0020502CBSMsg2List.MAC_AD);
			//宅内機器ステータス
			put("TK_STAT",EKKA0020502CBSMsg2List.TK_STAT);
			//宅内機器基本Ｔ更新日付
			put("KIHON_UPD_DTTM",EKKA0020502CBSMsg2List.KIHON_UPD_DTTM);

			//管理場所識別コード
			put("KNRI_PLC_SKBT_CD",EKKA0020503CBSMsg2List.KNRI_PLC_SKBT_CD);
			
			//管理場所棚コード
			put("KNRI_PLC_SLF_CD",EKKA0020503CBSMsg2List.KNRI_PLC_SLF_CD);
			
			//宅内機器型式コード
			put("TK_MDL_CD",EKKA0020503CBSMsg2List.TK_MDL_CD);
			
			//管理場所コード
			put("KNRI_PLC_CD",EKKA0020503CBSMsg2List.KNRI_PLC_CD);
			
			//宅内機器物流在庫T更新日時
			put("BRZIKO_UPD_DTTM",EKKA0020503CBSMsg2List.BRZIKO_UPD_DTTM);
		}
	};

	/**
	 * SOAP電文送信処理を実行する。
	 * 
	 * @param serviceMap 視聴制御オーダ送信のインターフェイス情報
	 * @param resultFlg コマンド結果発行処理電文有無 true:コマンド結果発行処理 false：視聴制御コマンド実行処理
	 * @return 処理結果コード値　0：正常　1:異常
	 */
	private Hashtable<Object, Object> execute(ArrayList<Hashtable<String, Object>> serviceMapLst, String kbn)
	{
		trace_kbn = kbn;
		Hashtable<Object, Object> result = new Hashtable<Object, Object>();
		HttpURLConnection connection = null;
		InputStream is = null;
		InetAddress inetaddress = null;
		String responseContentType = null;
		try
		{
			this.sw = new StringWriter();
			URL url = null;

			String urlString = (String)JCCModelCommon.getApplicationConst(TN_URL);

			if(trace_kbn.equals(TRACE_KBN_KKA0001))
			{
				urlString = urlString + ENDPOINT_KKA0001;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0002))
			{
				urlString = urlString + ENDPOINT_KKA0002;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0003))
			{
				urlString = urlString + ENDPOINT_KKA0003;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0004))
			{
				urlString = urlString + ENDPOINT_KKA0004;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0005))
			{
				urlString = urlString + ENDPOINT_KKA0005;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0006))
			{
				urlString = urlString + ENDPOINT_KKA0006;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0007))
			{
				urlString = urlString + ENDPOINT_KKA0007;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0008))
			{
				urlString = urlString + ENDPOINT_KKA0008;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0009))
			{
				urlString = urlString + ENDPOINT_KKA0009;
			}
			else if(trace_kbn.equals(TRACE_KBN_KKA0010))
			{
				urlString = urlString + ENDPOINT_KKA0010;
			}

			url = new URL(urlString);
			// 電文を送信
			connection = (HttpURLConnection)url.openConnection();
			connection.setDoInput(true);
			connection.setDoOutput(true);
			connection.setReadTimeout(Integer.parseInt(JCCModelCommon.getApplicationConst("TN_SOAP_TIMEOUT")));
			
			connection.setRequestMethod(JKKCtrlTnInfoImpl.HTTP_REQUEST_METHOD);
			connection.setRequestProperty(JKKCtrlTnInfoImpl.CONTENT_TYPE, JKKCtrlTnInfoImpl.CONTENT_TYPE_VALUE);
			
			// chunkモードで送信するかどうかを判断するために、ダミーのストリームを生成する
			// あとで中身を取り出してサイズを確認後、ソケットにつながっているストリームに書き出す
			OutputStream os = new OutputStream () {
				private List<Integer> buffer = new ArrayList<Integer>();
				@Override
				public void write(int i) throws IOException {
					buffer.add(i);
				}
				@Override
				public String toString() {
					byte bs [] = new byte[buffer.size()];
					int i = 0;
					for (Integer b : buffer) {
						bs[i++] = b.byteValue();
					}
					return new String(bs);
				}
				@Override
				public void close() throws IOException {
					super.close();
				}
			};

			this.write(serviceMapLst, os);
			String xml = os.toString();
//			if (xml.length() >= (32 * KB + 1))
//			{
//				connection.setRequestProperty("Transfer-Encoding", "Chunked");
//			}

			byte [] bytes = xml.getBytes("UTF-8");
			OutputStream realOs = connection.getOutputStream();
//			realOs.write(bytes);
			
			int len=0;
			for (int i=0; i<bytes.length; i=i+SOCKET_SEND_SIZE) {
				len = (i+SOCKET_SEND_SIZE > bytes.length ? bytes.length-i: SOCKET_SEND_SIZE);
				realOs.write(bytes, i, len);
			}
			
			realOs.flush();
			realOs.close();
			
			connection.connect();

			inetaddress = InetAddress.getLocalHost();

			// 電文の戻りを取得
			is = connection.getInputStream();

			responseContentType = connection.getHeaderField("Content-Type");

			result = this.read(inetaddress.getHostName(), inetaddress.getHostAddress(), responseContentType, is);

			return result;
		}
		catch (XMLStreamException e)
		{
			e.printStackTrace();
			result.put(CMD_RESULT_CD, "1");
			result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return result;
		}
		catch (MalformedURLException e)
		{
			e.printStackTrace();
			result.put(CMD_RESULT_CD, "1");
			result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return result;
		}
		catch (IOException e)
		{

			result.put(CMD_RESULT_CD, "1");
			if (connection != null && inetaddress != null)
			{
				is = connection.getErrorStream();
				responseContentType = connection.getHeaderField("Content-Type");
				try
				{
					if (is != null)
					{
						String msg = connection.getResponseMessage();
						result = this.read(inetaddress.getHostName(), inetaddress.getHostAddress(), responseContentType, is);
					}
					else
					{
						result.put(CMD_RESULT_CD, "1");
						result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
					}
				}
				catch (Exception ex)
				{
					result.put(CMD_RESULT_CD, "1");
					result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + ex.getMessage());
					return result;
				}
			}
			if (result != null && result.get(CMD_ERROR_MESSAGE) != null)
			{
				result.put(CMD_RESULT_CD, "1");
			}
			else
			{
				result.put(CMD_RESULT_CD, "1");
				result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			}
			return result;
		}
		catch (ParserConfigurationException e)
		{
			result.put(CMD_RESULT_CD, "1");
			result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return result;
		}
		catch (SAXException e)
		{
			result.put(CMD_RESULT_CD, "1");
			result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return result;
		}
		catch (Exception e)
		{
			result.put(CMD_RESULT_CD, "1");
			result.put(CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return result;

		}

	}

	/**
	 * 電文送信初期処理
	 * @param wt Writerオブジェクト
	 */
	private void init(Writer wt) throws FactoryConfigurationError, XMLStreamException
	{
		this.wt = wt;

		XMLOutputFactory outfactory = XMLOutputFactory.newInstance();
		this.writer = outfactory.createXMLStreamWriter(this.sw);
		this.writer.setPrefix(SOAP_PREFIX, SOAP12);

	}

	/**
	 * クローズ処理
	 */
	private void close() throws XMLStreamException, IOException
	{

		writer.flush();
		writer.close();

		String xml = sw.toString();
		JSYejbLog.outlog(inContext, JSYejbLog.DEBUG, this.getClass(), xml);
		
		// 最後に全部出す。
		this.wt.write(sw.toString());

		
		if(this.sw != null)
		{
			this.sw.close();
			this.sw = null;
		}
	}

	/**
	 * XML名前空間書き込み処理
	 * 
	 * @param prefix Prefix
	 * @param uri 名前空間URL
	 * @throws XMLStreamException
	 */
	private void writeNamespace(String prefix, String uri) throws XMLStreamException
	{
		this.writer.writeNamespace(prefix, uri);
	}

	/**
	 * XMLドキュメント開始タグ出力処理
	 * 
	 * @param encoding
	 * @throws XMLStreamException
	 */
	private void writeStartDocument(String encoding) throws XMLStreamException
	{
		this.writer.writeStartDocument(encoding, "1.0");
	}

	/**
	 * XMLドキュメント終了タグ出力処理
	 * @throws XMLStreamException
	 * 
	 */
	private void writeEndDocument() throws XMLStreamException
	{
		this.writer.writeEndDocument();
	}

	/**
	 * XML要素開始タグ出力処理
	 * 
	 * @param name
	 * @throws XMLStreamException
	 */
	private void writeStartElement(String name) throws XMLStreamException
	{
		this.writer.writeStartElement(JKKCtrlTnInfoImpl.BODY_NAMESPACE, name);
	}

	/**
	 * XMLSoap要素開始タグ出力処理
	 * 
	 * @param name
	 * @throws XMLStreamException
	 */
	private void writeStartSOAPElement(String name) throws XMLStreamException
	{
		this.writer.writeStartElement(SOAP_PREFIX, name, SOAP12);
	}

	/**
	 * XML要素終了タグ出力処理
	 * 
	 * @param name
	 * @throws XMLStreamException
	 */
	private void writeEndElement(String name) throws XMLStreamException
	{
		this.writer.writeEndElement();
	}

	/**
	 * XML要素終了タグ出力処理
	 * 
	 * @param name
	 * @throws XMLStreamException
	 */
	private void writeEndSOAPElement(String name) throws XMLStreamException
	{
		this.writer.writeEndElement();
	}

	/**
	 * XMLデータ出力処理
	 * 
	 * @param str
	 * @throws XMLStreamException
	 */
	private void writeCharacters(String str) throws XMLStreamException
	{
		if (str == null)
		{
			this.writer.writeCharacters("");
		}
		else
		{
			this.writer.writeCharacters(str);
		}
	}

	/**
	 * XML出力処理
	 * 
	 * @param userData
	 * @param osw
	 * @throws XMLStreamException
	 */
	private int writeXML(ArrayList<Hashtable<String, Object>> serviceMapLst, OutputStreamWriter osw) throws XMLStreamException, IOException
	{

		int result = 0;
		this.init(osw);

		this.writeStartDocument("UTF-8");
		this.writeStartSOAPElement("Envelope");
		this.writeNamespace(SOAP_PREFIX, SOAP12);

		result = this.writeUserData(serviceMapLst);

		this.writeEndSOAPElement("Envelope");
		this.writeEndDocument();

		this.close();

		return result;
	}

	/**
	 * 書き込み
	 * 
	 * @param userData
	 * @param os
	 * @throws IOException
	 * @throws XMLStreamException
	 */
	public int write(ArrayList<Hashtable<String, Object>> serviceMapLst, OutputStream os) throws IOException, XMLStreamException
	{
		OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
		try
		{

			// 本文
			int result = this.writeXML(serviceMapLst, osw);
			osw.write(JKKCtrlTnInfoImpl.CRLF);

			return result;
		}
		finally
		{
			if (osw != null)
			{
				osw.flush();
				osw.close();
			}
			if (os != null)
			{
				os.flush();
				os.close();
			}

		}

	}

	/**
	 * Header 書き込み処理
	 * 
	 * @param userData ユーザーデータ
	 * @return int 0 正常終了
	 *              1 異常終了
	 * @throws XMLStreamException
	 */
	private int writeHeader(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		int result = 0;
		Hashtable<String, Object> userData = serviceMapLst.get(0);
		serviceMapLst.remove(0);
		
		this.writeStartSOAPElement("Header");

		// リクエストＩＤ
		this.writeStartElement("requestID");
		/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
		this.writeCharacters(EO_IFID.get(trace_kbn)+"_reqId" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
		/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
		this.writeEndElement("requestID");

		// サービスＩＤ
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		String serviceID = inContext == null ? "KKSVTEST" : (String)inContext.getClientHashMapObjectByKey(AgentConstant.USECASE_ID_KEY);
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		this.writeStartElement("serviceID");
		/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
		this.writeCharacters(serviceID);
		/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
		this.writeEndElement("serviceID");

		// 依頼元区分
		this.writeStartElement("channel");
		this.writeCharacters("3");
		this.writeEndElement("channel");

		// ViewID
		this.writeStartElement("viewID");
		this.writeCharacters("CLA1");
		this.writeEndElement("viewID");

		// ipAdress
		this.writeStartElement("ipAddress");
		this.writeEndElement("ipAddress");

		// オペレータＩＤ
		if (userData.containsKey(JWCCtrlTnInfo.OPERATORID))
		{
			this.writeStartElement(getElementName(JWCCtrlTnInfo.OPERATORID));
			this.writeCharacters(convString(userData.get(JWCCtrlTnInfo.OPERATORID)));
			this.writeEndElement(getElementName(JWCCtrlTnInfo.OPERATORID));
		}

		// operateDateTime
		if (userData.containsKey(JWCCtrlTnInfo.OPERATEDATETIME))
		{
			this.writeStartElement(getElementName(JWCCtrlTnInfo.OPERATEDATETIME));
			this.writeCharacters(convString(userData.get(JWCCtrlTnInfo.OPERATEDATETIME)));
			this.writeEndElement(getElementName(JWCCtrlTnInfo.OPERATEDATETIME));
		}

		this.writeEndSOAPElement("Header");

		return result;

	}

	/**
	 * ユーザデータ部分のメッセージ生成
	 * @param writer
	 * @param userData
	 * @throws XMLStreamException
	 */
	private int writeUserData(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		int result = 0;

		this.writeHeader(serviceMapLst);

		this.writeStartSOAPElement(BODY);

		result = this.trace(serviceMapLst);

		this.writeEndSOAPElement(BODY);

		return result;

	}

	/**
	 * UserData内をトレースする。
	 * @param writer
	 * @param map
	 * @param serviceIfFlag
	 * @throws XMLStreamException
	 */
	private int trace(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		if (TRACE_KBN_KKA0001.equals(trace_kbn))
		{
			this.traceKKA0001(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0002.equals(trace_kbn))
		{
			this.traceKKA0002(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0003.equals(trace_kbn))
		{
			this.traceKKA0003(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0004.equals(trace_kbn))
		{
			this.traceKKA0004(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0005.equals(trace_kbn))
		{
			this.traceKKA0005(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0006.equals(trace_kbn))
		{
			this.traceKKA0006(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0007.equals(trace_kbn))
		{
			this.traceKKA0007(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0008.equals(trace_kbn))
		{
			this.traceKKA0008(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0009.equals(trace_kbn))
		{
			this.traceKKA0009(serviceMapLst);
		}
		else if (TRACE_KBN_KKA0010.equals(trace_kbn))
		{
			this.traceKKA0010(serviceMapLst);
		}
		else
		{
			return -1;
		}

		return 0;
	}

	/**
	 *  オブジェクトを文字列に変換します。
	 *  
	 * @param obj 変換するオブジェクト
	 * @return 変換された文字列
	 */
	private String convString(Object obj)
	{
		if (obj == null)
		{
			return "";
		}
		else if (obj instanceof Integer)
		{
			return String.valueOf((Integer)obj);
		}
		else if (obj instanceof Long)
		{
			return String.valueOf((Long)obj);
		}
		else if (obj instanceof Short)
		{
			return String.valueOf((Short)obj);
		}
		else if (obj instanceof Double)
		{
			return String.valueOf((Double)obj);
		}
		else if (obj instanceof Float)
		{
			return String.valueOf((Float)obj);
		}
		else if (obj instanceof Byte)
		{
			return String.valueOf((Byte)obj);
		}
		else if (obj instanceof Boolean)
		{
			return String.valueOf((Boolean)obj);
		}
		else if (obj instanceof String)
		{
			return (String)obj;
		}
		return obj.toString();
	}

	/**
	 * 項目名からSoapElement名を取得します。
	 * 
	 * @param obj 項目名
	 * @return XMLElement名
	 */
	private String getElementName(String obj)
	{
		if (elementToMap.containsKey(obj))
		{
			return elementToMap.get(obj);
		}
		else
		{
			return obj;
		}
	}

	/**
	 * Soap項目名から項目名を取得します。
	 * 
	 * @param obj　Soap項目名
	 * @return 項目名
	 */
	private String getMapName(String obj)
	{
		if (mapToElement.containsKey(obj))
		{
			return mapToElement.get(obj);
		}
		else
		{
			return obj;
		}
	}

	/**
	 * 設置場所一意照会(EKKA0020001)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0001(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
		     // ＫＥＹ＿設置場所番号
			if (serviceMap.containsKey(EKKA0020001CBSMsg1List.KEY_SETPLACE_NO))
			{
				this.writeStartElement(getElementName(EKKA0020001CBSMsg1List.KEY_SETPLACE_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020001CBSMsg1List.KEY_SETPLACE_NO)));
				this.writeEndElement(getElementName(EKKA0020001CBSMsg1List.KEY_SETPLACE_NO));
			}
		    this.writeEndElement(CONDITION);
			this.writeEndElement(RECORD);
		}
		//		this.writeEndElement(new String());
	}

	/**
	 * 設置場所番号取得(EKKA0020002)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0002(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
		     //ＫＥＹ＿設置場所住所コード
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD));
			}
		     //ＫＥＹ＿設置場所郵便番号
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD));
			}

		    //ＫＥＹ＿設置場所都道府県名
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM));
			}

			//ＫＥＹ＿設置場所市区町村名
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM));
			}
			
		     //ＫＥＹ＿設置場所大字通称名
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM));
			}

			//ＫＥＹ＿設置場所字丁目名
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM));
			}

		     //ＫＥＹ＿設置場所番地号
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO));
			}

		     //ＫＥＹ＿設置場所住所補記建物名
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM));
			}

		    //ＫＥＹ＿設置場所住所補記部屋番号
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM));
			}
			
		    //ＫＥＹ＿設置場所手動入力フラグ
			if (serviceMap.containsKey(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_MAN_INPUT_FLG))
			{
				this.writeStartElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_MAN_INPUT_FLG));
				this.writeCharacters(convString(serviceMap.get(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_MAN_INPUT_FLG)));
				this.writeEndElement(getElementName(EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_MAN_INPUT_FLG));
			}

		    this.writeEndElement(CONDITION);
			this.writeEndElement(RECORD);
		}
	}

	/**
	 * 宅内機器一意照会（４）(EKKA0020003)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0003(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);

			// ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020003CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020003CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020003CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020003CBSMsg1List.KEY_TK_MDL_CD));
			}
	
		    // ＫＥＹ＿機器製造番号
			if (serviceMap.containsKey(EKKA0020003CBSMsg1List.KEY_KK_SEIZO_NO))
			{
				this.writeStartElement(getElementName(EKKA0020003CBSMsg1List.KEY_KK_SEIZO_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020003CBSMsg1List.KEY_KK_SEIZO_NO)));
				this.writeEndElement(getElementName(EKKA0020003CBSMsg1List.KEY_KK_SEIZO_NO));
			}
			this.writeEndElement(CONDITION);
			this.writeEndElement(RECORD);
		}
	}

	/**
	 * 機器場所番号変更(EKKA0020004)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0004(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
			   //ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020004CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020004CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020004CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020004CBSMsg1List.KEY_TK_MDL_CD));
			}
		    
		    //ＫＥＹ＿機器製造番号
			if (serviceMap.containsKey(EKKA0020004CBSMsg1List.KEY_KK_SEIZO_NO))
			{
				this.writeStartElement(getElementName(EKKA0020004CBSMsg1List.KEY_KK_SEIZO_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020004CBSMsg1List.KEY_KK_SEIZO_NO)));
				this.writeEndElement(getElementName(EKKA0020004CBSMsg1List.KEY_KK_SEIZO_NO));
			}

			//ＫＥＹ＿変更理由コード
			if (serviceMap.containsKey(EKKA0020004CBSMsg1List.KEY_CHG_RSN_CD))
			{
				this.writeStartElement(getElementName(EKKA0020004CBSMsg1List.KEY_CHG_RSN_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020004CBSMsg1List.KEY_CHG_RSN_CD)));
				this.writeEndElement(getElementName(EKKA0020004CBSMsg1List.KEY_CHG_RSN_CD));
			}
			
		    //ＫＥＹ＿宅内機器基本Ｔ更新日付
			if (serviceMap.containsKey(EKKA0020004CBSMsg1List.KEY_BTRY_UPD_DTTM))
			{
				this.writeStartElement(getElementName(EKKA0020004CBSMsg1List.KEY_BTRY_UPD_DTTM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020004CBSMsg1List.KEY_BTRY_UPD_DTTM)));
				this.writeEndElement(getElementName(EKKA0020004CBSMsg1List.KEY_BTRY_UPD_DTTM));
			}
			
			this.writeEndElement(CONDITION);

			this.writeStartElement("update");

			//設置場所番号
			if (serviceMap.containsKey(EKKA0020004CBSMsg1List.SETPLACE_NO))
			{
				this.writeStartElement(getElementName(EKKA0020004CBSMsg1List.SETPLACE_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020004CBSMsg1List.SETPLACE_NO)));
				this.writeEndElement(getElementName(EKKA0020004CBSMsg1List.SETPLACE_NO));
			}
			

			//サービス契約番号
			if (serviceMap.containsKey(EKKA0020004CBSMsg1List.SVC_KEI_NO))
			{
				this.writeStartElement(getElementName(EKKA0020004CBSMsg1List.SVC_KEI_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020004CBSMsg1List.SVC_KEI_NO)));
				this.writeEndElement(getElementName(EKKA0020004CBSMsg1List.SVC_KEI_NO));
			}
			

			this.writeEndElement("update");
			
			this.writeEndElement(RECORD);
		}
	}

	/**
	 * 宅内機器物流在庫一意照会(EKKA0020005)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0005(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
			
		    //ＫＥＹ＿管理場所識別コード
			if (serviceMap.containsKey(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SKBT_CD))
			{
				this.writeStartElement(getElementName(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SKBT_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SKBT_CD)));
				this.writeEndElement(getElementName(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SKBT_CD));
			}
	
		    //ＫＥＹ＿管理場所コード
			if (serviceMap.containsKey(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_CD))
			{
				this.writeStartElement(getElementName(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_CD)));
				this.writeEndElement(getElementName(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_CD));
			}
	
		    //ＫＥＹ＿管理場所棚コード
			if (serviceMap.containsKey(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SLF_CD))
			{
				this.writeStartElement(getElementName(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SLF_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SLF_CD)));
				this.writeEndElement(getElementName(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SLF_CD));
			}
	
		    //ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020005CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020005CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020005CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020005CBSMsg1List.KEY_TK_MDL_CD));
			}

		    //ＫＥＹ＿商品状態コード
			if (serviceMap.containsKey(EKKA0020005CBSMsg1List.KEY_GDS_STAT_CD))
			{
				this.writeStartElement(getElementName(EKKA0020005CBSMsg1List.KEY_GDS_STAT_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020005CBSMsg1List.KEY_GDS_STAT_CD)));
				this.writeEndElement(getElementName(EKKA0020005CBSMsg1List.KEY_GDS_STAT_CD));
			}
			
			this.writeEndElement(CONDITION);
			this.writeEndElement(RECORD);
		}
	}

	/**
	 * 上位機器製造番号更新(EKKA0020501)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0006(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		//		this.writeStartBodyElement(JKKCtrlTnInfoImpl.BODY_PREFIX, new String(), JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		//		this.writeNamespace(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
			//ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020501CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020501CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020501CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020501CBSMsg1List.KEY_TK_MDL_CD));
			}
			//ＫＥＹ＿機器製造番号
			if (serviceMap.containsKey(EKKA0020501CBSMsg1List.KEY_KK_SEIZO_NO))
			{
				this.writeStartElement(getElementName(EKKA0020501CBSMsg1List.KEY_KK_SEIZO_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020501CBSMsg1List.KEY_KK_SEIZO_NO)));
				this.writeEndElement(getElementName(EKKA0020501CBSMsg1List.KEY_KK_SEIZO_NO));
			}
			//ＫＥＹ＿宅内機器基本Ｔ更新日付
			if (serviceMap.containsKey(EKKA0020501CBSMsg1List.KEY_KIHON_UPD_DTTM))
			{
				this.writeStartElement(getElementName(EKKA0020501CBSMsg1List.KEY_KIHON_UPD_DTTM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020501CBSMsg1List.KEY_KIHON_UPD_DTTM)));
				this.writeEndElement(getElementName(EKKA0020501CBSMsg1List.KEY_KIHON_UPD_DTTM));
			}

			this.writeEndElement(CONDITION);
			this.writeStartElement("update");
			//上位宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020501CBSMsg1List.JOI_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020501CBSMsg1List.JOI_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020501CBSMsg1List.JOI_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020501CBSMsg1List.JOI_TK_MDL_CD));
			}
			//上位機器製造番号
			if (serviceMap.containsKey(EKKA0020501CBSMsg1List.JOI_KK_SEIZO_NO))
			{
				this.writeStartElement(getElementName(EKKA0020501CBSMsg1List.JOI_KK_SEIZO_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020501CBSMsg1List.JOI_KK_SEIZO_NO)));
				this.writeEndElement(getElementName(EKKA0020501CBSMsg1List.JOI_KK_SEIZO_NO));
			}

			this.writeEndElement("update");
			this.writeEndElement(RECORD);
		}

		//		this.writeEndElement(new String());
	}

	/**
	 * 宅内機器一意照会（６）(EKKA0020502)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0007(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		//		this.writeStartBodyElement(JKKCtrlTnInfoImpl.BODY_PREFIX, new String(), JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		//		this.writeNamespace(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
			//ＫＥＹ＿MACアドレス
			if (serviceMap.containsKey(EKKA0020502CBSMsg1List.KEY_MAC_AD))
			{
				this.writeStartElement(getElementName(EKKA0020502CBSMsg1List.KEY_MAC_AD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020502CBSMsg1List.KEY_MAC_AD)));
				this.writeEndElement(getElementName(EKKA0020502CBSMsg1List.KEY_MAC_AD));
			}

			this.writeEndElement(CONDITION);
			this.writeEndElement(RECORD);
		}

		//		this.writeEndElement(new String());
	}

	/**
	 * 宅内機器物流在庫一覧照会２(EKKA0020503)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0008(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		//		this.writeStartBodyElement(JKKCtrlTnInfoImpl.BODY_PREFIX, new String(), JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		//		this.writeNamespace(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(CONDITION);
			//ＫＥＹ＿管理場所識別コード
			if (serviceMap.containsKey(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SKBT_CD))
			{
				this.writeStartElement(getElementName(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SKBT_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SKBT_CD)));
				this.writeEndElement(getElementName(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SKBT_CD));
			}
			//ＫＥＹ＿管理場所棚コード
			if (serviceMap.containsKey(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SLF_CD))
			{
				this.writeStartElement(getElementName(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SLF_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SLF_CD)));
				this.writeEndElement(getElementName(EKKA0020503CBSMsg1List.KEY_KNRI_PLC_SLF_CD));
			}
			//ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020503CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020503CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020503CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020503CBSMsg1List.KEY_TK_MDL_CD));
			}

			this.writeEndElement(CONDITION);
		}

		//		this.writeEndElement(new String());
	}

	/**
	 * 宅内機器物流在庫更新(EKKA0020504)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0009(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		//		this.writeStartBodyElement(JKKCtrlTnInfoImpl.BODY_PREFIX, new String(), JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		//		this.writeNamespace(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);

		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
			this.writeStartElement(RECORD);
			this.writeStartElement(CONDITION);
			//ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.KEY_TK_MDL_CD));
			}
			//ＫＥＹ＿管理場所コード
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_CD))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_CD)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_CD));
			}
			//ＫＥＹ＿管理場所識別コード
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SKBT_CD))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SKBT_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SKBT_CD)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SKBT_CD));
			}
			//ＫＥＹ＿管理場所棚コード
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SLF_CD))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SLF_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SLF_CD)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.KEY_KNRI_PLC_SLF_CD));
			}

			this.writeEndElement(CONDITION);
			this.writeStartElement("update");
			//実在庫数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.JZAIKO_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.JZAIKO_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.JZAIKO_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.JZAIKO_NUM));
			}
			//配送受付（受注）数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.HAISO_UK_JUCHU_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.HAISO_UK_JUCHU_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.HAISO_UK_JUCHU_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.HAISO_UK_JUCHU_NUM));
			}
			//配送出荷指示数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.HAISO_SHKA_SJI_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.HAISO_SHKA_SJI_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.HAISO_SHKA_SJI_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.HAISO_SHKA_SJI_NUM));
			}
			//予備機器配送指示数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.YBKKHAI_SJI_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.YBKKHAI_SJI_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.YBKKHAI_SJI_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.YBKKHAI_SJI_NUM));
			}
			//棚移動指示数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.SLF_MV_SJI_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.SLF_MV_SJI_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.SLF_MV_SJI_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.SLF_MV_SJI_NUM));
			}
			//予備機器配送中数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.YBKKHAI_CHU_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.YBKKHAI_CHU_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.YBKKHAI_CHU_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.YBKKHAI_CHU_NUM));
			}
			//当日入荷数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.TJITU_NYUKA_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.TJITU_NYUKA_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.TJITU_NYUKA_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.TJITU_NYUKA_NUM));
			}
			//当日配送出荷数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.TJITU_HAISO_SHKA_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.TJITU_HAISO_SHKA_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.TJITU_HAISO_SHKA_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.TJITU_HAISO_SHKA_NUM));
			}
			//当日解約撤去返品数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.TJITU_DSL_TK_HMPIN_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.TJITU_DSL_TK_HMPIN_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.TJITU_DSL_TK_HMPIN_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.TJITU_DSL_TK_HMPIN_NUM));
			}
			//当日故障交換返品数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.TJITU_TRB_KOKAN_HMPIN_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.TJITU_TRB_KOKAN_HMPIN_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.TJITU_TRB_KOKAN_HMPIN_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.TJITU_TRB_KOKAN_HMPIN_NUM));
			}
			//棚移動入荷完了数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.SLF_MV_NYUKA_FIN_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.SLF_MV_NYUKA_FIN_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.SLF_MV_NYUKA_FIN_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.SLF_MV_NYUKA_FIN_NUM));
			}
			//棚移動出荷完了数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.SLF_MV_SHKA_FIN_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.SLF_MV_SHKA_FIN_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.SLF_MV_SHKA_FIN_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.SLF_MV_SHKA_FIN_NUM));
			}
			//予備機器出荷完了数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.YOBI_KKSHKA_FIN_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.YOBI_KKSHKA_FIN_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.YOBI_KKSHKA_FIN_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.YOBI_KKSHKA_FIN_NUM));
			}
			//計画外入荷数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.PLN_GAI_NYUKA_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.PLN_GAI_NYUKA_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.PLN_GAI_NYUKA_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.PLN_GAI_NYUKA_NUM));
			}
			//計画外出荷数
			if (serviceMap.containsKey(EKKA0020504CBSMsg1List.PLN_GAI_SHKA_NUM))
			{
				this.writeStartElement(getElementName(EKKA0020504CBSMsg1List.PLN_GAI_SHKA_NUM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020504CBSMsg1List.PLN_GAI_SHKA_NUM)));
				this.writeEndElement(getElementName(EKKA0020504CBSMsg1List.PLN_GAI_SHKA_NUM));
			}

			this.writeEndElement("update");
			this.writeEndElement(RECORD);
		}

		//		this.writeEndElement(new String());
	}


	/**
	 * サービス契約番号更新(EKKA0020006)の電文を組み立てます。
	 * 
	 * @param serviceMap
	 * @throws XMLStreamException
	 */
	private void traceKKA0010(ArrayList<Hashtable<String, Object>> serviceMapLst) throws XMLStreamException
	{
		this.writer.setPrefix(JKKCtrlTnInfoImpl.BODY_PREFIX, JKKCtrlTnInfoImpl.BODY_NAMESPACE);
		int count = 0;
		
		for (Hashtable<String, Object> serviceMap : serviceMapLst)
		{
//			this.writeStartElement(RECORD);
			
			// 複数件更新があった場合も１件のみ送信する。
			count++;
			
			if(count > 1)
			{
				break;
			}
			
			this.writeStartElement(CONDITION);
			//ＫＥＹ＿宅内機器型式コード
			if (serviceMap.containsKey(EKKA0020006CBSMsg1List.KEY_TK_MDL_CD))
			{
				this.writeStartElement(getElementName(EKKA0020006CBSMsg1List.KEY_TK_MDL_CD));
				this.writeCharacters(convString(serviceMap.get(EKKA0020006CBSMsg1List.KEY_TK_MDL_CD)));
				this.writeEndElement(getElementName(EKKA0020006CBSMsg1List.KEY_TK_MDL_CD));
			}
			//ＫＥＹ＿製造番号
			if (serviceMap.containsKey(EKKA0020006CBSMsg1List.KEY_KK_SEIZO_NO))
			{
				this.writeStartElement(getElementName(EKKA0020006CBSMsg1List.KEY_KK_SEIZO_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020006CBSMsg1List.KEY_KK_SEIZO_NO)));
				this.writeEndElement(getElementName(EKKA0020006CBSMsg1List.KEY_KK_SEIZO_NO));
			}
			//ＫＥＹ＿宅内機器基本Ｔ更新年月日
			if (serviceMap.containsKey(EKKA0020006CBSMsg1List.KEY_KIHON_UPD_DTTM))
			{
				this.writeStartElement(getElementName(EKKA0020006CBSMsg1List.KEY_KIHON_UPD_DTTM));
				this.writeCharacters(convString(serviceMap.get(EKKA0020006CBSMsg1List.KEY_KIHON_UPD_DTTM)));
				this.writeEndElement(getElementName(EKKA0020006CBSMsg1List.KEY_KIHON_UPD_DTTM));
			}
			this.writeEndElement(CONDITION);
			this.writeStartElement("update");
			//ＫＥＹ＿サービス契約番号
			if (serviceMap.containsKey(EKKA0020006CBSMsg1List.SVC_KEI_NO))
			{
				this.writeStartElement(getElementName(EKKA0020006CBSMsg1List.SVC_KEI_NO));
				this.writeCharacters(convString(serviceMap.get(EKKA0020006CBSMsg1List.SVC_KEI_NO)));
				this.writeEndElement(getElementName(EKKA0020006CBSMsg1List.SVC_KEI_NO));
			}

			this.writeEndElement("update");
//			this.writeEndElement(RECORD);
		}

		//		this.writeEndElement(new String());
	}

	/**
	 * 電文読み込み処理
	 * 
	 * @param host
	 * @param ip
	 * @param contentType
	 * @param is
	 * @return XML電文解析結果
	 * @throws IOException
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 */
	private Hashtable<Object, Object> read(String host, String ip, String contentType, InputStream is) throws IOException,
			ParserConfigurationException, SAXException
	{
		String charset = this.getEncoding(contentType);
		StringReader sr = readSingleResource(charset, is);
		Hashtable<Object, Object> result = null;

		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		dbf.setNamespaceAware(true);
		DocumentBuilder db = dbf.newDocumentBuilder();

		Document doc = db.parse(new InputSource(sr));

		Element elem = doc.getDocumentElement();

		// XMLの実行結果を取得する。
		result = analyzeXml(elem, true);

		return result;
	}

	/**
	 * 電文読み取り処理（添付ファイルなし）
	 * 
	 * @param charSet
	 * @param is
	 * @return
	 * @throws IOException
	 */
	private StringReader readSingleResource(String charSet, InputStream is) throws IOException
	{

		this.soapMessage = true;

		ByteArrayOutputStream baos = new ByteArrayOutputStream();

		byte[] buf = new byte[1024 * 8];

		int length = readLine(is, buf, 0, buf.length);

		while (length != -1)
		{
			// ボディ部
			baos.write(buf, 0, length);
			length = readLine(is, buf, 0, buf.length);
		}

		byte[] contents = baos.toByteArray();

		// コンテントタイプから、encoding指定を得る。
		StringReader reader = new StringReader(new String(contents, charSet));

		return reader;
	}

	/**
	 * 行データ取得処理
	 * 
	 * @param is InputStream 
	 * @param abyte0 abyte0[]
	 * @param i i
	 * @param j j
	 * @return int 実行結果
	 * @throws IOException
	 */
	private int readLine(InputStream is, byte abyte0[], int i, int j) throws IOException
	{
		if (j <= 0)
		{
			return 0;
		}
		int k = 0;
		int l;
		do
		{
			if ((l = is.read()) == -1)
			{
				break;
			}
			abyte0[i++] = (byte)l;
			k++;
		}
		while (l != 10 && k != j);

		return k <= 0 ? -1 : k;
	}

	/**
	 * エンコーディングデータ取得処理
	 * 
	 * @param contentType HTTPContentType文字列
	 * @return エンコーディング
	 */
	private String getEncoding(String contentType)
	{

		if (contentType != null)
		{

			// 半角空白で切って、
			String[] contentTypes = contentType.split(" ");

			// 開始がcharsetで始まるものを探して、
			for (String ct : contentTypes)
			{
				if (ct.startsWith("charset="))
				{
					ct = ct.trim();
					return ct.substring("charset=".length());
				}
			}
		}

		// 見つけられなかった場合
		return "UTF-8";

	}

	/**
	 * コマンド送信戻り電文解析処理
	 * 
	 * @param elem コマンド解析電文rootXML要素
	 * @return XML解析結果
	 */
	private Hashtable<Object, Object> analyzeXml(Node elem,boolean rootflag) 
	{
		Node node = elem.getFirstChild();
		Hashtable<Object, Object> resultMap = null;

		ArrayList<Map<Object, Object>>Bodynodelist = new ArrayList<Map<Object, Object>>();
		
		//電文の要素をすべて解析する。
		while(node != null)
		{
			JSYejbLog.outlog(inContext, JSYejbLog.DEBUG , this.getClass(), node.getLocalName() + "：" + node.getTextContent());

			if(node.getNodeType() == Node.ELEMENT_NODE) 
			{
				
				String nodename = node.getLocalName();
				String childname = "";
				
				NodeList nodelist = node.getChildNodes();
				if(nodelist != null)
				{
					for(int i = 0 ; i < nodelist.getLength() ; i++)
					{
						Node child = nodelist.item(i);
						
						if(child.getNodeType() == Node.ELEMENT_NODE)
						{
							childname = child.getLocalName();
							break;
						}
					}
				}
				
				// SOAP例外の場合

				if(JKKCtrlTnInfoImpl.SOAP_FAULT.equals(nodename.toLowerCase()) || JKKCtrlTnInfoImpl.SOAP_FAULT.equals(childname.toLowerCase()))
				{
					resultMap = new Hashtable<Object, Object>();
					String faultinfo = analyzeFaultXml(node);
					resultMap.put(JWCStrConst.CMD_RESULT_CD,"1");
					resultMap.put(JWCStrConst.CMD_ERROR_MESSAGE,faultinfo);	
					return resultMap;
				}
				else
				{
					if(resultMap == null) {
						resultMap = new Hashtable<Object, Object>();
					}
///* ++++++++++ v4.00.01 修正開始 ++++++++++ */
//					Hashtable<Object, Object>resultinfo = analyzeResultXml(node);
					Hashtable<Object, Object>resultinfo = analyzeXml(node, false);
///* ++++++++++ v4.00.01 修正終了 ++++++++++ */
					resultMap.put(JWCStrConst.CMD_RESULT_CD,"0");
					if((nodename.equals("Body") &&  !childname.equals("record")) || nodename.equals("record"))
					{
///* ++++++++++ v3.00.00 修正開始 ++++++++++ */
//						Bodynodelist.add(resultinfo);
						if(resultinfo != null && !resultinfo.isEmpty())
						{
							Bodynodelist.add(resultinfo);
						}
///* ++++++++++ v3.00.00 修正終了 ++++++++++ */
						

						if (trace_kbn.equals(TRACE_KBN_KKA0001))
						{
							resultMap.put(EKKA0020001CBSMsg.EKKA0020001CBSMSG2LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0002))
						{
							resultMap.put(EKKA0020002CBSMsg.EKKA0020002CBSMSG2LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0003))
						{
							resultMap.put(EKKA0020003CBSMsg.EKKA0020003CBSMSG2LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0005))
						{
							resultMap.put(EKKA0020005CBSMsg.EKKA0020005CBSMSG2LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0006))
						{
							resultMap.put(EKKA0020501CBSMsg.EKKA0020501CBSMSG1LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0007))
						{
							resultMap.put(EKKA0020502CBSMsg.EKKA0020502CBSMSG2LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0008))
						{
							resultMap.put(EKKA0020503CBSMsg.EKKA0020503CBSMSG2LIST,Bodynodelist);
						}
						else if (trace_kbn.equals(TRACE_KBN_KKA0009))
						{
							resultMap.put(EKKA0020504CBSMsg.EKKA0020504CBSMSG1LIST,Bodynodelist);
						}
						else
						{
							Hashtable retHash = analyzeXml(node,false);
							if(retHash != null)
							{
								resultMap.putAll(retHash);
							}
						}
					}
					else if(nodename.equals("Body"))
					{
						resultMap.putAll(analyzeXml(node, false));
					}
					else if(nodename.equals("Header"))
					{
						resultMap.putAll(analyzeXml(node, false));
					}
					else if(nodename.equals("condition"))
					{
						resultMap.putAll(analyzeXml(node, false));
					}
					else
					{
///* ++++++++++ v4.00.01 修正開始 ++++++++++ */
//						resultMap.put(nodename,node.getTextContent());
						String convNodeName = nodename;
						String elementString = this.getMapName(nodename);
						if (elementString != null)
						{
							convNodeName = elementString;
						}
						
						resultMap.put(convNodeName,node.getTextContent());
						if(node.getAttributes().getNamedItem("err") != null)
						{
							String StrErr = node.getAttributes().getNamedItem("err").getTextContent();
							int intErr = Integer.parseInt(StrErr.substring(1));
							if(intErr == 1)
							{
//								resultMap.put(nodename + "_ERR", "E1");
								resultMap.put(convNodeName + "_ERR", "E1");
							}
							else if(intErr <= 52)
							{
//								resultMap.put(nodename + "_ERR", "E2");
								resultMap.put(convNodeName + "_ERR", "E2");
							}
							else if(intErr <= 55)
							{
//								resultMap.put(nodename + "_ERR", "E3");
								resultMap.put(convNodeName + "_ERR", "E3");
							}
							else
							{
//								resultMap.put(nodename + "_ERR", "EA");
								resultMap.put(convNodeName + "_ERR", "EA");
							}
						}
///* ++++++++++ v4.00.01 修正終了 ++++++++++ */
					}
					
				}
			}
			
			node = node.getNextSibling();
		}
		
		if(rootflag && resultMap == null)
		{
			resultMap = new Hashtable<Object, Object>();
			resultMap.put(JWCStrConst.CMD_RESULT_CD,"0");
			return resultMap;
		}
		
		return resultMap;
	}
	
	/**
	 * ノードチェック
	 * 
	 * @param Node ノード
	 * @return boolean true:子ノードに要素ノードを持つ。false:子ノードに要素ノードを持たない。
	 * 
	 */
	public boolean hasRecElementNode(Node node)
	{

		if (!node.hasChildNodes())
		{
			return false;
		}
		else
		{
			Node chnode = node.getFirstChild();
			while (chnode != null)
			{
				if (chnode.getNodeType() == Node.ELEMENT_NODE)
				{
					return true;
				}

				chnode = chnode.getNextSibling();
			}

		}

		return false;
	}

	/**
	 * ノードチェック
	 * 子ノードに要素ノード "record"を持つかどうかチェックする。孫ノードはチェックしない。
	 * @param Node ノード
	 * @return boolean true:子ノードに要素ノード "record"を持つ。false:子ノードに要素ノード "record"を持たない。
	 * 
	 */
	public boolean hasRecordNode(Node node)
	{

		if (!node.hasChildNodes())
		{
			return false;
		}
		else
		{
			Node chnode = node.getFirstChild();
			while (chnode != null)
			{
				if (chnode.getNodeType() == Node.ELEMENT_NODE && RECORD.equals(chnode.getNodeName()))
				{
					return true;
				}

				chnode = chnode.getNextSibling();
			}

		}

		return false;
	}

	/**
	 * XMLFAULT電文解析処理
	 * 
	 * @param elem XMLFAULT電文
	 * @return ArrayListエラー情報
	 */
	private String analyzeFaultXml(Node elem)
	{
		Node node = elem.getFirstChild();
		//		ArrayList<Object> list = new ArrayList<Object>();
		String errmsg = "";

		while (node != null)
		{

			if (node.getNodeType() == Node.ELEMENT_NODE)
			{
				String nodename = node.getLocalName();

				if (JKKCtrlTnInfoImpl.SOAP_FAULT_CODE.equals(nodename.toLowerCase()))
				{

					//					list.add(node.getTextContent());
					Node child = node.getFirstChild();
					if (child != null)
					{
						errmsg = errmsg + "エラーコード：" + child.getTextContent();
					}
				}
				if (JKKCtrlTnInfoImpl.SOAP_FAULT_STRING.equals(nodename.toLowerCase()))
				{

					//					list.add(node.getTextContent());
					errmsg = errmsg + "エラー詳細：" + node.getTextContent();
				}
			}

			node = node.getNextSibling();
		}

		return errmsg;
	}

	/**
	 * コマンド結果発行戻り電文解析処理
	 * 
	 * @param elem XMLコマンド発行電文戻りNode
	 * @return コマンド結果発行戻値
	 */
	private Hashtable<Object, Object> analyzeResultXml(Node elem)
	{

		Node node = elem.getFirstChild();
		Hashtable<Object, Object> result = new Hashtable<Object, Object>();

		while (node != null)
		{

			if (node.getNodeType() == Node.ELEMENT_NODE)
			{
				String nodename = node.getLocalName();
				String elementString = this.getMapName(nodename);

				JSYejbLog.outlog(inContext, JSYejbLog.DEBUG, this.getClass(), node.getLocalName() + "：" + node.getTextContent());

				if (elementString != null)
				{
					result.put(elementString, node.getTextContent());
				}
			}

			node = node.getNextSibling();
		}
		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0001(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();
		
		trace_kbn = TRACE_KBN_KKA0001;
		
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020001CBSMsg.EKKA0020001CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0002(Hashtable serviceMap, Connection con) throws Exception
	{

		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0002;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0003(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0003;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0004(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0004;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0005(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0005;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020005CBSMsg.EKKA0020005CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	//顧客計約TV追加 start
	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0006(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0006;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020501CBSMsg.EKKA0020501CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0007(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0007;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020502CBSMsg.EKKA0020502CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable<String, Object> ctrlTnInfo_KKA0008(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0008;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020503CBSMsg.EKKA0020503CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0009(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0009;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020504CBSMsg.EKKA0020504CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	//顧客計約TV追加 end

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @param Connection コネクション
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0010(Hashtable serviceMap, Connection con) throws Exception
	{
		JKKCtrlTnInfoImpl exe = new JKKCtrlTnInfoImpl();

		trace_kbn = TRACE_KBN_KKA0010;
		Hashtable result = null;

		// 電文送信処理の実行
		ArrayList<Hashtable<String, Object>> inMapLst = (ArrayList<Hashtable<String, Object>>)serviceMap
				.get(EKKA0020006CBSMsg.EKKA0020006CBSMSG1LIST);
		if (inMapLst != null && !inMapLst.isEmpty())
		{
			result = exe.execute(inMapLst, trace_kbn);
		}
		else
		{
			result = new Hashtable<Object, Object>();
		}

		return result;
	}

	@Override
	public void setConnection(Connection con)
	{
		this.connection = con;

	}

	public Connection getConnection()
	{
		return this.connection;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0001(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0001;
		return ctrlTnInfo_KKA0001(serviceMap, this.getConnection());
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0002(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0002;
		return ctrlTnInfo_KKA0002(serviceMap, this.getConnection());
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0003(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0003;
		return ctrlTnInfo_KKA0003(serviceMap, this.getConnection());
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0004(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0004;
		return ctrlTnInfo_KKA0004(serviceMap, this.getConnection());
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0005(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0005;
		return ctrlTnInfo_KKA0005(serviceMap, this.getConnection());
	}

	//顧客計約TV追加 start
	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0006(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0006;
		return ctrlTnInfo_KKA0006(serviceMap, this.getConnection());
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0007(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0007;

		Hashtable<String, Object> retMap = null;
		retMap = ctrlTnInfo_KKA0007(serviceMap, this.getConnection());

		return retMap;

	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0008(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0008;

		Hashtable<String, Object> retMap = null;
		retMap = ctrlTnInfo_KKA0008(serviceMap, this.getConnection());

		return retMap;
	}

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0009(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0009;
		return ctrlTnInfo_KKA0009(serviceMap, this.getConnection());
	}
	//顧客契約TV追加 end	

	/**
	 * コマンド発行部品
	 * 
	 * @param ArrayList サービスマップハッシュテーブルリスト
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	public Hashtable ctrlTnInfo_KKA0010(Hashtable serviceMap) throws Exception
	{

		trace_kbn = TRACE_KBN_KKA0010;
		return ctrlTnInfo_KKA0010(serviceMap, this.getConnection());
	}

}
