/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JZMCtrlCisInfoImpl
*   ソースファイル名：JZMCtrlCisInfoImpl.java
*   作成者          ：富士通
*   日付            ：2015年05月25日
*＜機能概要＞
*   eo電気サービス契約お客様変更 SOAP連携（本番向け）コマンド発行部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v16.00.00   2015/05/25	FJ)酒井		【ANK-2480-00-00】対応 新電力
*   v16.00.01   2015/08/13  FJ)松尾		 IT1-2015-0000075
*   v16.00.02   2015/08/25  FJ)松尾		 IT1-2015-0000087
*   v41.00.00   2019/03/05	FJ)中原		【OM-2019-0000247】eo電気契約一意照(KKIFE260)で異常なタイムアウト
**********************************************************************/
package eo.ejb.common;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0040001CBSMsg1List;

/**
 * eo電気サービス契約お客様変更処理部品（本番）クラスです。
 * @author 富士通
 */
public class JZMCtrlCisInfoImpl extends JZMCtrlCisInfo
{
	
	/**
	 * インスタンス
	 */
	private static JZMCtrlCisInfoImpl instance = null;

	/**
	 * XML作成時のエンコーディング
	 */
	private static final String ENCODING = "UTF-8";
	
	/**
	 * HTTPヘッダ リクエストメソッド定数
	 */
	private static final String HTTP_REQUEST_METHOD = "POST";

	/**
	 * 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";

	/**
	 * CIS_URL
	 */
	private static final String CIS_URL = "CIS_URL";

	/**
	 * CIS_OUT_SYS_CD
	 */
	private static final String CIS_OUT_SYS_CD = "CIS_OUT_SYS_CD";

	/**
	 * タグ名
	 */
	private static final String[] tagNames = {"Envelope","Body","Header","initResponse"};
	
	/**
	 * タグ属性(=TYPE)
	 */
	private static final String[] typeValues = {"service_if","service_if_list"};

	// IT1-2015-0000087 ADD START
	/**
	 *CIS連携タイムアウト値
	 */
	
	protected static final String CIS_SOAP_TIMEOUT = "CIS_SOAP_TIMEOUT";
	
	/**
	 * HTTPヘッダ Content-TYPE
	 */
	protected static final String CONTENT_TYPE = "Content-Type";
	
	/**
	 * HTTPヘッダ Conten-TYPE（値）
	 */
	protected static final String CONTENT_TYPE_VALUE = "text/xml; charset=UTF-8";
	
    /**
     * エラーレベル
     */
    public static final String ERROR_LEVEL = "errorLevel";

    /**
     * リターンコード
     */
    public static final String RETURN_CD = "returnCode";
	
	// IT1-2015-0000087 ADD END
	
	/**
	 * コンストラクタです。
	 */
	private JZMCtrlCisInfoImpl()
	{
	}

	/**
	 * インスタンス取得用のメソッド
	 * 
	 * @return JZMCtrlCisInfoImpl
	 */
	public static synchronized JZMCtrlCisInfoImpl getInstance()
	{
		if(instance == null) 
		{
			instance = new JZMCtrlCisInfoImpl();
		}
		return instance;
	}

	private Connection connection = null;
	public void setConnection(Connection con) {
		this.connection = con;
		
	}
	
	/**
	 * コマンド発行部品
	 * 
	 * @param serviceMap サービスマップハッシュテーブル
	 * @return サービスマップ戻り値
	 * @throws Exception
	 */
	@Override
	@SuppressWarnings("unchecked")
	public Map<String, Object> ctrlCisInfo_ZMA0001(Map serviceMap)
	{
		Hashtable<String, Object> ret = new Hashtable<String, Object>();
		HttpURLConnection conURL = null;
		InputStream is = null;
		InetAddress inetaddress = null;
		Transformer transformer = null;
		OutputStream os = null;
		StringWriter sw = null;
		Document requestXml = null;
		Document responseXml = null;
		String request = null;
		String response = null;
		
		try
		{
			/** 
			 * リクエストXML作成
			 */
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "リクエストXML作成 START");
			requestXml = createXml(serviceMap);
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "リクエストXML作成 END");
			
			/**
			 * URLをプロパティファイルから取得
			 */
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "URL取得 START");
			String url = (String)JCCModelCommon.getApplicationConst(CIS_URL);
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "URL取得 "+url);
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "URL取得 END");
			
			/**
			 * CISサーバへ接続
			 */
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "CISサーバ接続 START");
			URL cisServer = new URL(url);
			conURL = (HttpURLConnection)cisServer.openConnection();
			conURL.setRequestMethod(HTTP_REQUEST_METHOD);
			conURL.setDoOutput(true);
			// OM-2019-0000247 ADD START
			int timeoutMilliSec = Integer.parseInt(JCCModelCommon.getApplicationConst(CIS_SOAP_TIMEOUT));
			conURL.setConnectTimeout(timeoutMilliSec);
			// OM-2019-0000247 ADD END
			// IT1-2015-0000087 ADD START
			// OM-2019-0000247 MOD START
//			conURL.setReadTimeout(Integer.parseInt(JCCModelCommon.getApplicationConst(CIS_SOAP_TIMEOUT)));
			conURL.setReadTimeout(timeoutMilliSec);
			// OM-2019-0000247 MOD END
			conURL.setRequestProperty(CONTENT_TYPE, CONTENT_TYPE_VALUE);
			// IT1-2015-0000087 ADD END
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "CISサーバ接続 END");
			
			/**
			 * CISサーバへSOAPリクエストを送信
			 */
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "SOAPリクエスト送信 START");
			// IT1-2015-0000087 ADD START
			conURL.connect();
			// IT1-2015-0000087 ADD END
			os = conURL.getOutputStream();
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			transformer = transformerFactory.newTransformer();
			//エンコーディング
			transformer.setOutputProperty(OutputKeys.ENCODING, ENCODING);
			//XML形式
			transformer.setOutputProperty(OutputKeys.METHOD, "xml");
			transformer.transform(new DOMSource(requestXml), new StreamResult(os));
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "SOAPリクエスト送信 END");
			
			
			/**
			 * 上り電文のログ出力
			 */
			sw = new StringWriter();
			transformer.transform(new DOMSource(requestXml), new StreamResult(sw));
			request = sw.toString();
			inetaddress = InetAddress.getLocalHost();
			
			/**
			 * CISサーバからSOAPレスポンスを受信（同期処理なのでCISからの応答を待つ）
			 */
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "SOAPレスポンス受信 START");
			is = conURL.getInputStream();
			DOMResult dr = new DOMResult();
			transformer.transform(new StreamSource(is), dr);
			responseXml = (Document)dr.getNode();
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "SOAPレスポンス受信 END");
			
			/**
			 * 下り電文のログ出力
			 */
			sw = new StringWriter();
			transformer.transform(new DOMSource(responseXml), new StreamResult(sw));
			response = sw.toString();

			/**
			 * SOAPレスポンス読込処理
			 */
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "SOAPレスポンス読込処理 START");
			ret = read(responseXml);
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), ret);
			JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "SOAPレスポンス読込処理 END");
			
			return ret;
		}
		catch(MalformedURLException e) 
		{
			e.printStackTrace();
			ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
			ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return ret;
		}
		catch(ProtocolException e) 
		{
			e.printStackTrace();
			ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
			ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return ret;
		}
		catch(UnknownHostException e) 
		{
			e.printStackTrace();
			ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
			ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return ret;
		}
		catch (IOException e) 
		{
			e.printStackTrace();
			
			if(conURL != null && inetaddress != null)
			{
				is = conURL.getErrorStream();
				try 
				{
					if(is != null)
					{
						DOMResult dr = new DOMResult();
						transformer.transform(new StreamSource(is), dr);
						responseXml = (Document)dr.getNode();
						ret = read(responseXml);
					}
					else 
					{
						ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
						ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
					}
				}
				catch(Exception ex) 
				{
					ex.printStackTrace();
					ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
					ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + ex.getMessage());
					return ret;
				}
			}
			else
			{
				ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
				ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			}
			return ret;
		}
		catch(TransformerException e) 
		{
			e.printStackTrace();
			ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
			ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return ret;
		}
		catch(Exception e) 
		{
			e.printStackTrace();
			ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
			ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
			return ret;
			
		}
		finally
		{
			if (os != null)
			{
				try
				{
					os.close();
				}
				catch(Exception e) 
				{
					e.printStackTrace();
					ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
					ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
					return ret;
				}
			}
			if (is != null)
			{
				try
				{
					is.close();
				}
				catch(Exception e) 
				{
					e.printStackTrace();
					ret.put(JZMCtrlCisInfo.CMD_RESULT_CD, "1");
					ret.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE, "XML電文処理でエラーが発生しました。" + e.getMessage());
					return ret;
				}
			}
			
			// IT1-2015-0000087 MOD START
			//if("1".equals(ret.get(JZMCtrlCisInfo.CMD_RESULT_CD))){
			if("1".equals(ret.get(JZMCtrlCisInfo.CMD_RESULT_CD))
					|| !"000".equals((String)ret.get(JZMCtrlCisInfoImpl.ERROR_LEVEL))
					|| !"0000".equals((String)ret.get(JZMCtrlCisInfoImpl.RETURN_CD))){
			// IT1-2015-0000087 MOD END

				JSYejbLog.outlog(null, JSYejbLog.ERROR, this.getClass(), "リクエストXML：" + request);
				JSYejbLog.outlog(null, JSYejbLog.ERROR, this.getClass(), "レスポンスXML：" + response);
				
			}else{
				
				JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "リクエストXML：" + request);
				JSYejbLog.outlog(null, JSYejbLog.DEBUG, this.getClass(), "レスポンスXML：" + response);
			}
		}
	}

	/**
	 * リクエストXMLDocumentの作成
	 * 
	 * @param serviceMap サービスマップハッシュテーブル
	 * @return リクエストで送信するXMLドキュメント
	 * @throws Exception
	 */
	private Document createXml(Map<String, Object> serviceMap) throws Exception
	{
//		<?xml version="1.0" encoding="UTF-8"?>
//		<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
//		    <soapenv:Header>
//		        <requestID>a9jaieija98320110101160010000</requestID>
//		        <serviceID>KKSV0808</serviceID>	
//		        <channel>3</channel>
//		        <viewID>XXXX</viewID>
//		        <operatorID>XXXX</operatorID>
//		        <ipAddress></ipAddress>
//		        <operateDatetime></operateDatetime>
//		    </soapenv:Header>	

		// root要素が"<soapenv:Envelope>"のドキュメント
		DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = dbfactory.newDocumentBuilder();
		Document doc = builder.getDOMImplementation().createDocument("http://schemas.xmlsoap.org/soap/envelope/", "soapenv:Envelope", null);
		Element soap = doc.getDocumentElement();
		
		// Header部
		// <soapenv:Header>
		Element header = doc.createElement("soapenv:Header");
		soap.appendChild(header);
		
		// <requestID>
		Element requestId = doc.createElement(JZMCtrlCisInfo.REQUESTID);
		requestId.setTextContent((String)serviceMap.get(JZMCtrlCisInfo.OUT_IF_ID) + "_reqId" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
		header.appendChild(requestId);
		
		// <serviceID>
		Element serviceId = doc.createElement(JZMCtrlCisInfo.SERVICEID);
		serviceId.setTextContent((String)serviceMap.get(JZMCtrlCisInfo.SERVICEID));
		header.appendChild(serviceId);
		
		// <channel>
		Element channel = doc.createElement(JZMCtrlCisInfo.CHANNEL);
		channel.setTextContent("3");
		header.appendChild(channel);
		
		// <viewID>
		Element viewId = doc.createElement(JZMCtrlCisInfo.VIEWID);
		if(null != JCCModelCommon.getApplicationConst(CIS_OUT_SYS_CD))
		{
			viewId.setTextContent((String)JCCModelCommon.getApplicationConst(CIS_OUT_SYS_CD));
		}
		header.appendChild(viewId);
		// <operatorID>
		Element operatorId = doc.createElement(JZMCtrlCisInfo.OPERATORID);
		if(null != JCCModelCommon.getApplicationConst(CIS_OUT_SYS_CD))
		{
			operatorId.setTextContent((String)JCCModelCommon.getApplicationConst(CIS_OUT_SYS_CD));
		}
		header.appendChild(operatorId);
		// <ipAddress>
		Element ipAddress = doc.createElement(JZMCtrlCisInfo.IPADDRESS);
		ipAddress.setTextContent("");
		header.appendChild(ipAddress);
		// <operateDatetime>
		Element operateDatetime = doc.createElement(JZMCtrlCisInfo.OPERATEDATETIME);
		operateDatetime.setTextContent((String)serviceMap.get(JZMCtrlCisInfo.OPERATEDATETIME));
		header.appendChild(operateDatetime);
		
//		<soapenv:Body>
//		  <initResponse>
//		    <KKSV081501SC type="service_if">
//		        <service_if>
//		            <func_code>1</func_code>
//		            <kykychtn_tkt_no>99999999999999</kykychtn_tkt_no>
//		        </service_if>
//		    </KKSV081501SC >
//		  </initResponse>
//		</soapenv:Body>
//		</soapenv:Envelope>

		// Body部
		// <soapenv:Body>
		Element body = doc.createElement("soapenv:Body");
		soap.appendChild(body);
		
		// IT1-2015-0000075 2015/08/13 松尾 MOD START
//		// <initResponse>
//		Element init = doc.createElement("initResponse");
		// <init>
		Element init = doc.createElement("init");
		// IT1-2015-0000075 2015/08/13 松尾 MOD END
		
		body.appendChild(init);

		// <xxxxxxxxxxSC type="service_if">
		//Element serviceIfID = doc.createElement("KKSV004007SC");
		Element serviceIfID = doc.createElement((String)serviceMap.get(JZMCtrlCisInfo.SERVICEIFID));
		init.appendChild(serviceIfID);
		
		List<Map<String, Object>> serviceifList = (List<Map<String, Object>>) serviceMap.get(EKKA0040001CBSMsg.EKKA0040001CBSMSG1LIST);
		
		if(serviceifList.size() == 1){
			// <xxxxxxxxxxSC type="service_if">
			serviceIfID.setAttribute("type", JZMCtrlCisInfo.SERVICEIF);	
		}else {
			// <xxxxxxxxxxSC type="service_if_list">
			serviceIfID.setAttribute("type", JZMCtrlCisInfo.SERVICEIF + "_list");	
		}
		
		for(Map<String, Object> map : serviceifList){
		
			// <service_if>
			Element serviceIf = doc.createElement(JZMCtrlCisInfo.SERVICEIF);
			serviceIfID.appendChild(serviceIf);
			
			// <func_code>
			// <svc_kei_no>
			for(Entry<String,Object> entry : map.entrySet()){
				Element item = doc.createElement(entry.getKey());
				item.setTextContent((String)entry.getValue());
				serviceIf.appendChild(item);
			}
			
		}
		
		// スタンドアロンの設定
		doc.setXmlStandalone(true);
		
		return doc;
	}

	/**
	 * 電文読み込み処理
	 * @param soapResponse
	 * @return XML電文解析結果
	 * @throws IOException
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 */
	private Hashtable<String, Object> read(Document soapResponse) 
	throws IOException,ParserConfigurationException,SAXException
	{
		// レスポンス解析
		Element root =  soapResponse.getDocumentElement();//ルート要素(<SOAP-ENV:Envelope>)	
		Hashtable<String, Object> result = analyzeXml(root, true);

		return result;
	}
	
	/**
	 * XMLFAULT電文解析処理
	 * 
	 * @param elem XMLFAULT電文
	 * @return ArrayListエラー情報
	 */
	private String analyzeFaultXml(Node elem) 
	{
		Node node = elem.getFirstChild();
		String errmsg = "";
		
		while(node != null)
		{
			if(node.getNodeType() == Node.ELEMENT_NODE) 
			{
				String nodename = node.getLocalName();
				
				if(JZMCtrlCisInfoImpl.SOAP_FAULT_CODE.equals(nodename.toLowerCase()))
				{
					Node child = node.getFirstChild();
					if(child != null)
					{
						errmsg = errmsg + "エラーコード：" + child.getTextContent();
					}
				}
				if(JZMCtrlCisInfoImpl.SOAP_FAULT_STRING.equals(nodename.toLowerCase()))
				{
					errmsg = errmsg + "エラー詳細：" + node.getTextContent();
				}
			}
			
			node = node.getNextSibling();
		}
		
		return errmsg;
	}

	/**
	 * コマンド送信戻り電文解析処理
	 * @param elem コマンド解析電文rootXML要素
	 * @param rootflag ルートフラグ
	 * @return XML解析結果
	 */
	public Hashtable<String, Object> analyzeXml(Node elem, boolean rootflag) 
	{
		Node node = elem.getFirstChild();
		Hashtable<String, Object> resultMap = null;
		List<Map<String, Object>>Bodynodelist = new ArrayList<Map<String, Object>>();
		
		//電文の要素をすべて解析する。
		while(node != null)
		{
			JSYejbLog.outlog(null, JSYejbLog.DEBUG , this.getClass(), node.getLocalName() + "：" + node.getTextContent());

			if(node.getNodeType() == Node.ELEMENT_NODE) 
			{
				
				String nodename = node.getLocalName();
				String typeValue = null;
				if(node.getAttributes().getNamedItem("type") != null){
					typeValue = node.getAttributes().getNamedItem("type").getNodeValue();
				}
				
				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(JZMCtrlCisInfoImpl.SOAP_FAULT.equals(nodename.toLowerCase()) || JZMCtrlCisInfoImpl.SOAP_FAULT.equals(childname.toLowerCase()))
				{
					resultMap = new Hashtable<String, Object>();
					String faultinfo = analyzeFaultXml(node);
					resultMap.put(JZMCtrlCisInfo.CMD_RESULT_CD,"1");
					resultMap.put(JZMCtrlCisInfo.CMD_ERROR_MESSAGE,faultinfo);	
					return resultMap;
				}
				else
				{
					if(resultMap == null) {
						resultMap = new Hashtable<String, Object>();
					}
					Hashtable<String, Object>resultinfo = analyzeXml(node, false);
					if(JZMCtrlCisInfoImpl.RECORD.equals(nodename) || JZMCtrlCisInfoImpl.SERVICEIF.equals(nodename) || Arrays.asList(typeValues).contains(typeValue))
					{
						if(resultinfo != null && !resultinfo.isEmpty())
						{
							Bodynodelist.add(resultinfo);
						}
						
						resultMap.put(nodename,Bodynodelist);
					
					}
					
					else if(Arrays.asList(tagNames).contains(nodename))
					{
						resultMap.putAll(analyzeXml(node, false));
					}
					else
					{
						resultMap.put(nodename,node.getTextContent());
						if(node.getAttributes().getNamedItem("err") != null)
						{
							String StrErr = node.getAttributes().getNamedItem("err").getTextContent();
							resultMap.put(nodename + "_ERR", StrErr);
						}
					}
					
				}
			}
			
			node = node.getNextSibling();
		}
		
		if(rootflag)
		{
			if(resultMap == null)
			{
				resultMap = new Hashtable<String, Object>();
			}
			
			resultMap.put(JZMCtrlCisInfo.CMD_RESULT_CD,"0");
			return resultMap;
		}
		
		return resultMap;
	}
	
}
