    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.hayabusa.taglib;
    017
    018import java.io.BufferedInputStream;
    019import java.io.ByteArrayInputStream;
    020import java.io.ByteArrayOutputStream;
    021import java.io.File;
    022import java.io.IOException;
    023import java.io.InputStream;
    024import java.io.StringReader;                                                                    // 6.9.0.0 (2018/01/31)
    025import java.io.Writer;
    026import java.util.Map;
    027
    028import org.opengion.fukurou.system.LogWriter;
    029import org.opengion.fukurou.system.Closer;
    030import org.opengion.fukurou.system.HybsConst;                                   // 6.4.5.2 (2016/05/06)
    031import org.opengion.fukurou.util.FileUtil;
    032import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    033import org.opengion.fukurou.util.ArraySet;                                              // 5.10.10.0 (2019/03/29)
    034// import org.opengion.fukurou.util.SOAPConnect;                                // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    035import org.opengion.fukurou.util.StringUtil;
    036// import org.opengion.fukurou.util.URLConnect;                                 // 6.9.0.0 (2018/01/31) URLConnect 廃止
    037import org.opengion.fukurou.util.HttpConnect;                                   // 6.9.0.0 (2018/01/31) 新規追加
    038// import org.opengion.fukurou.util.XHTMLTag;
    039import org.opengion.fukurou.xml.XML2TableParser;
    040import org.opengion.fukurou.xml.XSLT;
    041import org.opengion.hayabusa.common.HybsSystem;
    042import org.opengion.hayabusa.common.HybsSystemException;
    043import org.opengion.hayabusa.db.DBTableModel;
    044import org.opengion.hayabusa.db.DBTableModelUtil;
    045import org.opengion.hayabusa.io.HybsFileOperationFactory;               // 8.0.0.1 (2021/10/08)
    046// import org.opengion.fukurou.model.FileOperation;                             // 8.0.0.1 (2021/10/08)
    047
    048import static org.opengion.fukurou.util.StringUtil.nval;
    049
    050import java.util.Set;                                                                                   // 5.10.10.0 (2019/03/29)
    051
    052/**
    053 * 指定のURLに接続します｡
    054 *
    055 * ｴﾝｼﾞﾝでは､URL にｱｸｾｽすることで､ﾃﾞｰﾓﾝを起動したり､
    056 * ｺﾏﾝﾄﾞを実行(adminﾒﾆｭｰ)することが出来ます｡
    057 * もちろん､検索条件を指定して､結果を取得することも可能です｡
    058 * このﾀｸﾞでは､URLにｱｸｾｽして､ｺﾏﾝﾄﾞを実行したり結果を取得できます｡
    059 * さらに､ﾌｧｲﾙを POST で転送したり､処理結果を XSLT変換したり出来ます｡
    060 *
    061 * @og.formSample
    062 * ●形式：
    063 *     &lt;og:urlConnect
    064 *         url           = "http://･･･ "    必須
    065 *         proxyHost     = "proxy.opengion.org"
    066 *         proxyPort     = "8080"
    067 *         timeout       = "1"
    068 *         keys          = "command,SYSTEM_ID"
    069 *         vals          = "NEW,GE"
    070 *         useSystemUser = "true/false"     初期値:true
    071 *         authUserPass  = "admin:******"   初期値:admin:******
    072 *         display       = "false/true"     初期値:false
    073 *         xslFile       = "filter.xsl"
    074 *         saveFile      = "outdata.xml"
    075 *    ×   soapNameSpace = "MyWebService"        6.9.0.0 (2018/01/31) 廃止
    076 *    ×   soapMethodName= "test"                        6.9.0.0 (2018/01/31) 廃止
    077 *         tableId       = "DEFAULT"
    078 *         rowKey        = "item"
    079 *         colKeys       = "person_id,person_name"
    080 *         rtnKeys       = "version,summary"
    081 *         encode        = "UTF-8"
    082 *     /&gt;
    083 *
    084 * url           : 接続するURLを指定します｡必須属性です｡
    085 * proxyHost     : proxy が存在する場合は､そのﾎｽﾄ名(例：proxy.opengion.org)
    086 * proxyPort     : proxy が存在する場合は､そのﾎﾟｰﾄ番号(例：8080)
    087 * timeout       : 通信ﾘﾝｸのｵｰﾌﾟﾝ時に､指定された秒単位のﾀｲﾑ･ｱｳﾄ値を使用(例：1)
    088 * keys,vals     : URLの指定時に､ﾊﾟﾗﾒｰﾀ(引数)を追加します｡URLに含めても構いません｡
    089 *               : SOAPによる呼び出しの場合の詳細については､keysの属性定義を参照して下さい｡
    090 * postKey       : POST を使って､postFile属性のﾌｧｲﾙ内容を送信する時のｷｰです｡
    091 * postFile      : POST を使って､postFile属性のﾌｧｲﾙ内容を送信します｡
    092 *                 postFile を指定せず､postKey のみ指定して､BODY部に何か書き込めば､
    093 *                 そのBODY部の文字列を POSTの内容として送信します｡
    094 * authUserPass  : Basic認証を使用する場合の接続ﾕｰｻﾞｰ：ﾊﾟｽﾜｰﾄﾞを指定します｡
    095 *                 接続時のﾕｰｻﾞｰとﾊﾟｽﾜｰﾄﾞを､USER:PASSWD 形式 で指定します｡
    096 *                 useSystemUser="false" で何も指定しない場合は､Basic認証を使用しません｡
    097 * useSystemUser : Basic認証の接続ﾕｰｻﾞｰ：ﾊﾟｽﾜｰﾄﾞに､ｼｽﾃﾑﾕｰｻﾞｰを使用
    098 *                 するかどうかを指定します(初期値:true)｡
    099 *                 true の場合は､SYSTEM:***** を使用します｡
    100 * xslFile       : 接続先ﾃﾞｰﾀを取得し､そのﾃﾞｰﾀを XSLT変換する場合のXSLﾌｧｲﾙを指定します｡
    101 * display       : 接続した結果のﾚｽﾎﾟﾝｽを画面に表示するかどうかを指定します(初期値:false)｡
    102 *                 ｴﾝｼﾞﾝの場合､ｺﾏﾝﾄﾞを投げるだけであれば､結果を取得する必要は
    103 *                 ありません｡ｲﾒｰｼﾞ的には､取得ﾃﾞｰﾀが､このﾀｸﾞの位置に置き換わります｡
    104 *                 xslFile が指定されている場合､XSLT変換してｾｰﾌﾞします｡
    105 * saveFile      : 接続先ﾃﾞｰﾀを取得した結果を､ﾌｧｲﾙ出力します｡
    106 *                 display="true" と､saveFile を併用することはできません｡
    107 *                 xslFile が指定されている場合､XSLT変換してｾｰﾌﾞします｡
    108 * X soapNameSpace : 廃止：SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名及びﾊﾟﾗﾒｰﾀｰの名前空間を指定します｡
    109 *                 この名前空間は､通常WSDLﾌｧｲﾙのdescriptionsﾀｸﾞのtargetNamespace属性の値により
    110 *                 定義されます｡  6.9.0.0 (2018/01/31) 廃止
    111 * X soapMethodName: 廃止：SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名を指定します｡
    112 *                 WSDLﾌｧｲﾙで定義されるoperationﾀｸﾞのname属性の値に相当します｡ 6.9.0.0 (2018/01/31) 廃止
    113 * tableId       : 結果のXMLﾌｧｲﾙをDBTableModelに変換した際に､登録するTableIdを指定します｡
    114 * rowKey        : XMLをDBTableModelに変換する際の､行を表すﾀｸﾞｷｰを指定します｡
    115 * colKeys       : XMLをDBTableModelに変換する際の､項目を表すﾀｸﾞｷｰの一覧を指定します｡
    116 *                 ｷｰにPARENT_TAG､PARENT_FULL_TAGを指定することで､rowKeyで指定されたﾀｸﾞの
    117 *                 直近の親ﾀｸﾞ､及びﾌﾙの親ﾀｸﾞ名(親ﾀｸﾞの階層を"&gt;[ﾀｸﾞA]&gt;[ﾀｸﾞB]&gt;[ﾀｸﾞC]&gt;"で表現)を
    118 *                 取得することができます｡
    119 * rtnKeys       : XMLのﾀｸﾞｷｰを指定して値を取り出します｡取り出した値は､{&#064;XX}形式で処理することが可能です｡
    120 * encode        : ﾃﾞｰﾀの入出力を行うｴﾝｺｰﾄﾞを指定します｡
    121 * authJson      : JSONｺｰﾄﾞで認証する場合に使用します｡8.0.0.0 (2021/08/31)
    122 * authURL       : JSONｺｰﾄﾞで認証するURLを指定します｡8.0.0.0 (2021/08/31)
    123 * reqJson       : JSONｺｰﾄﾞでﾘｸｴｽﾄするﾊﾟﾗﾒｰﾀを指定します｡8.0.0.0 (2021/09/30)
    124 *
    125 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し､{&#064;XXXX} を解析します)
    126 *         POSTﾃﾞｰﾀを記述します｡
    127 *
    128 * ●Tag定義：
    129 *   &lt;og:urlConnect
    130 *       url              ○【TAG】ｱｸｾｽする ＵＲＬ を指定します(必須)(必須)｡
    131 *       proxyHost          【TAG】ﾌﾟﾛｷｼ経由で接続する場合の､ﾌﾟﾛｷｼﾎｽﾄ名を指定します
    132 *       proxyPort          【TAG】ﾌﾟﾛｷｼ経由で接続する場合の､ﾌﾟﾛｷｼﾎﾟｰﾄ番号を指定します
    133 *       timeout            【TAG】通信ﾘﾝｸのｵｰﾌﾟﾝ時に､指定された秒単位のﾀｲﾑ･ｱｳﾄ値を使用
    134 *                                  (初期値:URL_CONNECT_TIMEOUT[={@og.value SystemData#URL_CONNECT_TIMEOUT}])｡)
    135 *       keys               【TAG】ｱｸｾｽﾊﾟﾗﾒｰﾀｷｰをCSV形式で複数指定します
    136 *       vals               【TAG】keys属性に対応する値をCSV形式で複数指定します
    137 *       useSystemUser      【TAG】Basic認証で接続するﾕｰｻﾞｰにSYSTEMﾕｰｻﾞｰを使用するかどうか[true/false]を指定します(初期値:true)
    138 *       authUserPass       【TAG】Basic認証を使用して接続する場合のﾕｰｻﾞｰ:ﾊﾟｽﾜｰﾄﾞを指定します(初期値:null)
    139 *       display            【TAG】接続の結果を表示するかどうかを指定します(初期値:false)
    140 *       xslFile            【TAG】接続の結果を表示する場合にXSLT変換する場合のﾌｧｲﾙを指定します
    141 *       saveFile           【TAG】接続の結果をﾌｧｲﾙに保存します
    142 *       postKey            【TAG】POST を使って､postFile属性のﾌｧｲﾙ内容を送信する時のｷｰを指定します
    143 *       postFile           【TAG】POST を使って､postFile属性のﾌｧｲﾙ内容を送信します
    144 *       method             【TAG】送信ﾒｿｯﾄﾞ[GET/POST/PUT/DELETE/SOAP]を指定します(初期値:GET)
    145 *       errNeglect         【TAG】(通常は使いません) 接続ｴﾗｰを無視する場合にtrueとします(初期値false)
    146 *       tableId            【TAG】(通常は使いません)結果のDBTableModelを､sessionに登録するときのｷｰを指定します
    147 *       scope              【TAG】ｷｬｯｼｭする場合のｽｺｰﾌﾟ[request/page/session/application]を指定します(初期値:session)
    148 *       rowKey             【TAG】結果のXMLをDBTableModelに変換する際に､行のｷｰとなるﾀｸﾞ名を指定します
    149 *       colKeys            【TAG】結果のXMLをDBTableModelに変換する際に､項目のｷｰとなるﾀｸﾞ名の一覧を指定します
    150 *       rtnKeys            【TAG】結果のXMLを変換する際に､ﾊﾟﾗﾒｰﾀ(Attributes)として取り込むｷｰの一覧を指定します
    151 *       encode             【TAG】ﾃﾞｰﾀの入出力のｴﾝｺｰﾄﾞを指定します(初期値:UTF-8)
    152 *       mainTrans          【TAG】(通常は使いません)ﾀｸﾞで処理される処理がﾒｲﾝとなるﾄﾗﾝｻﾞｸｼｮﾝ処理かどうかを指定します(初期値:false)
    153 *       propKeys           【TAG】ｺﾈｸｼｮﾝのrequestParameterに渡すｷｰをCSV形式で複数指定します｡ 5.10.16.0 (2019/10/04)
    154 *       propVals           【TAG】ｺﾈｸｼｮﾝのrequestParameterに渡す値をCSV形式で複数指定します｡ 5.10.16.0 (2019/10/04)
    155 *       postDataOnly       【TAG】trueの場合はｷ-=値から､値のみ送信に変更します｡(jsonを送信する場合等に利用) 5.10.19.0 (2019/12/27)
    156 *       authJson           【TAG】JSONｺｰﾄﾞで認証する場合に使用します｡8.0.0.0 (2021/08/31)
    157 *       authURL            【TAG】JSONｺｰﾄﾞで認証するURLを指定します｡8.0.0.0 (2021/08/31)
    158 *       reqJson            【TAG】JSONｺｰﾄﾞでﾘｸｴｽﾄするﾊﾟﾗﾒｰﾀを指定します｡8.0.0.0 (2021/09/30)
    159 *       useLocal           【TAG】ｼｽﾃﾑ定数でｸﾗｳﾄﾞ設定されていても､ｸﾗｳﾄﾞ環境を使用しない場合､trueを指定します(初期値:false) 8.0.1.0 (2021/10/29)
    160 *       caseKey            【TAG】このﾀｸﾞ自体を利用するかどうかの条件ｷｰを指定します(初期値:null) 5.7.7.2 (2014/06/20)
    161 *       caseVal            【TAG】このﾀｸﾞ自体を利用するかどうかの条件値を指定します(初期値:null) 5.7.7.2 (2014/06/20)
    162 *       caseNN             【TAG】指定の値が､null/ｾﾞﾛ文字列 でない場合(Not Null=NN)は､このﾀｸﾞは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    163 *       caseNull           【TAG】指定の値が､null/ｾﾞﾛ文字列 の場合は､このﾀｸﾞは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    164 *       caseIf             【TAG】指定の値が､true/TRUE文字列の場合は､このﾀｸﾞは使用されます(初期値:判定しない)
    165 *       debug              【TAG】ﾃﾞﾊﾞｯｸﾞ情報を出力するかどうか[true/false]を指定します(初期値:false)
    166 *   &gt;   ... Body ...
    167 *   &lt;/og:urlConnect&gt;
    168 *
    169 * 【廃止】6.9.0.0 (2018/01/31) 物理削除
    170 *   //  soapNameSpace      【廃止】SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名及びﾊﾟﾗﾒｰﾀｰの名前空間を指定します ( 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正)
    171 *   //  soapMethodName     【廃止】SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名を指定します ( 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正)
    172 *   //  storageType        【廃止】保存先ｽﾄﾚｰｼﾞﾀｲﾌﾟを指定します 5.10.9.0 (2019/03/01) 8.0.1.0 (2021/10/29) del
    173 *   //  bucketName         【廃止】保存先ﾊﾞｹｯﾄ名を指定します 5.10.9.0 (2019/03/01) 8.0.1.0 (2021/10/29) del
    174 *
    175 * ●例：
    176 * ｱﾄﾞﾐﾝ関連
    177 * http://localhost:8823/gf/jsp/admin?COMMAND=infomation     [状況表示]
    178 * http://localhost:8823/gf/jsp/admin?COMMAND=close          [ﾌﾟｰﾙ削除]
    179 * http://localhost:8823/gf/jsp/admin?COMMAND=loginUser      [ﾛｸﾞｲﾝﾕｰｻﾞｰ]
    180 * http://localhost:8823/gf/jsp/admin?COMMAND=ｼｽﾃﾑﾊﾟﾗﾒｰﾀ [ｼｽﾃﾑﾊﾟﾗﾒｰﾀ]
    181 *
    182 * 帳票ﾃﾞｰﾓﾝ
    183 * http://localhost:8823/gf/jsp/REP08/result.jsp?cmd=SET&amp;period=5000&amp;command=NEW&amp;timerTask=org.opengion.hayabusa.report.ReportDaemon&amp;name=ReportDaemon  ﾃﾞｰﾓﾝ起動
    184 * http://localhost:8823/gf/jsp/REP08/result.jsp?cmd=CANCEL&amp;period=5000&amp;command=NEW&amp;timerTask=org.opengion.hayabusa.report.ReportDaemon&amp;name=ReportDaemon  ﾃﾞｰﾓﾝ停止
    185 *
    186 *Tomcat Manager 画面
    187 * http://localhost:8823/manager/reload?path=/ver4 ｱﾌﾟﾘｹｰｼｮﾝを再ﾛｰﾄﾞ
    188 *
    189 * ●その他:
    190 * DB.ERR_CODEに､実行結果のHTTPｽﾃｰﾀｽｺｰﾄﾞを設定します｡
    191 *
    192 * @og.rev 3.6.0.0 (2004/09/17) 新規作成
    193 * @og.rev 4.1.0.0 (2007/12/22) POSTﾒｿｯﾄﾞで複数ｷｰを登録できるように属性追加
    194 * @og.rev 5.1.5.0 (2010/04/01) SOAP対応
    195 * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    196 * @og.rev 8.0.0.0 (2021/08/31) httpclient5 対応のHttpConnectを使用
    197 * @og.group その他部品
    198 *
    199 * @version  8.0
    200 * @author   Kazuhiko Hasegawa
    201 * @since    JDK11.0,
    202 */
    203public class URLConnectTag extends CommonTagSupport {
    204        /** このﾌﾟﾛｸﾞﾗﾑのVERSION文字列を設定します｡ {@value} */
    205        private static final String VERSION = "8.0.1.0 (2021/10/29)" ;
    206        private static final long serialVersionUID = 801020211029L ;
    207
    208//      private static final String DEFAULT_USER = "SYSTEM:MANAGER" ;
    209        private static final String DEFAULT_USER = "admin:admin" ;                      // 6.9.0.1 (2018/02/05) この際､変更しておきます｡
    210
    211//      private static final String[] POST_LIST = new String[] { "POST","PUT","DELETE" };               // 5.10.10.0 (2019/03/29)
    212        private static final Set<String> POST_SET = new ArraySet<>( "POST","PUT","DELETE" );    // 5.10.10.0 (2019/03/29)
    213
    214        private transient DBTableModel table;                   // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    215
    216        private String          urlStr                  ;
    217        private String[]        keys                    ;
    218        private String[]        vals                    ;
    219        private String          xslFile                 ;
    220        private String          saveFile                ;
    221        private String          postKey                 ;
    222        private String          postData                ;                       // postFile ﾌｧｲﾙか､BODY部
    223        private int                     timeout                 = HybsSystem.sysInt( "URL_CONNECT_TIMEOUT" );   // 6.2.5.0 (2015/06/05) 新規追加
    224        private boolean         useSystemUser   = true;
    225        private String          authUserPass    ;
    226        private boolean         display                 ;
    227        private String          proxyHost               ;                       // 4.0.0 (2007/07/25)
    228        private int             proxyPort               = -1;           // 4.0.0 (2007/07/25)
    229        private String          method                  = "GET";        // 4.1.0.0 (2007/12/22) POSTorGETorSOAP
    230        private boolean         errNglctFlag    ;                       // 4.1.1.0 (2008/01/22) ｴﾗｰ無視ﾌﾗｸﾞ
    231//      private String          soapNameSpace   ;                       // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    232//      private String          soapMethodName  ;                       // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    233        private String          tableId                 = HybsSystem.TBL_MDL_KEY; // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    234        private String          rowKey                  ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    235        private String[]        colKeys                 ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    236        private String[]        rtnKeys                 ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    237        private String          encode                  = "UTF-8";      // 5.1.6.0 (2010/05/01) ｴﾝｺｰﾄﾞ指定対応
    238
    239        private boolean         isTableOut              ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    240        private boolean         isOutParse              ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    241        private boolean         isMainTrans             = true;         // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    242
    243//      private String          storageType             ;                       // 5.10.9.0 (2019/03/01) ADD 8.0.1.0 (2021/10/29) del
    244//      private String          bucketName              ;                       // 5.10.9.0 (2019/03/01) ADD 8.0.1.0 (2021/10/29) del
    245        private String          contentType             ;                       // 5.10.10.2 (2019/04/12)
    246
    247        private String          propKeys                ;                       // 5.10.16.0 (2019/10/04)
    248        private String          propVals                ;                       // 5.10.16.0 (2019/10/04)
    249        private boolean         postDataOnly    ;                       // 5.10.19.0 (2019/12/27) postDataOnly対応 ････ Ver7では未対応
    250        private String          authJson                ;                       // 8.0.0.0 (2021/08/31)
    251        private String          authURL                 ;                       // 8.0.0.0 (2021/08/31)
    252        private String          reqJson                 ;                       // 8.0.0.0 (2021/09/30)
    253        private boolean         useLocal                ;                       // 8.0.1.0 (2021/10/29) ｸﾗｳﾄﾞ設定を使用しない場合は､true
    254
    255        /**
    256         * ﾃﾞﾌｫﾙﾄｺﾝｽﾄﾗｸﾀｰ
    257         *
    258         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    259         */
    260        public URLConnectTag() { super(); }             // これも､自動的に呼ばれるが､空のﾒｿｯﾄﾞを作成すると警告されるので､明示的にしておきます｡
    261
    262        /**
    263         * Taglibの開始ﾀｸﾞが見つかったときに処理する doStartTag() を ｵｰﾊﾞｰﾗｲﾄﾞします｡
    264         *
    265         * @og.rev 5.1.5.0 (2010/04/01) SOAP･DBTableModel出力対応
    266         * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は､DBTableModelが新規作成された処理でのみ行う｡
    267         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    268         *
    269         * @return      後続処理の指示
    270         */
    271        @Override
    272        public int doStartTag() {
    273                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    274                if( !useTag() ) { return SKIP_BODY ; }
    275
    276                // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    277                if( rowKey != null || colKeys != null || rtnKeys != null ) {
    278                        isOutParse = true;
    279                        if( rowKey != null || colKeys != null ) {
    280                                isTableOut = true;
    281                                useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    282                                startQueryTransaction( tableId );
    283                        }
    284                }
    285
    286                // 5.1.5.0 (2010/04/01) SOAPの場合は､postKeyが指定されない｡
    287                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    288                return postData == null ? EVAL_BODY_BUFFERED : SKIP_BODY ;
    289        }
    290
    291        /**
    292         * Taglibのﾀｸﾞ本体を処理する doAfterBody() を ｵｰﾊﾞｰﾗｲﾄﾞします｡
    293         *
    294         * @return      後続処理の指示(SKIP_BODY)
    295         */
    296        @Override
    297        public int doAfterBody() {
    298                postData = getBodyString();
    299
    300                return SKIP_BODY ;
    301        }
    302
    303        /**
    304         * Taglibの終了ﾀｸﾞが見つかったときに処理する doEndTag() を ｵｰﾊﾞｰﾗｲﾄﾞします｡
    305         *
    306         * @og.rev 4.0.1.0 (2007/12/12) PostKeys,PostVals処理を追加
    307         * @og.rev 5.1.5.0 (2010/04/01) SOAP･DBTableModel出力対応
    308         * @og.rev 5.2.0.0 (2010/09/01) ｴﾗｰ処理でNullPointerExceptionが発生するﾊﾞｸﾞを修正
    309         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    310         * @og.rev 6.3.8.0 (2015/09/11) FileUtil#getPrintWriter( OutputStream,String ) を使用｡
    311         * @og.rev 6.9.0.0 (2018/01/31) URLConnect 廃止､HttpConnect に置き換えます｡
    312         * @og.rev 6.9.0.1 (2018/02/05) IOException を､Throwable に変更して､すべてのｴﾗｰをｷｬｯﾁするようにします｡
    313         * @og.rev 5.10.19.0 (2019/12/27) 結果ｺｰﾄﾞをDB.ERR_CODEに設定
    314         * @og.rev 8.0.0.2 (2021/10/15) ﾛｰｶﾙﾌｧｲﾙとｸﾗｳﾄﾞﾌｧｲﾙ間の移動
    315         *
    316         * @return      後続処理の指示
    317         */
    318        @Override
    319        public int doEndTag() {
    320                debugPrint();           // 4.0.0 (2005/02/28)
    321
    322                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    323                if( !useTag() ) { return EVAL_PAGE ; }
    324
    325//              URLConnect conn = null;
    326                HttpConnect conn = null;                                                // 6.9.0.0 (2018/01/31) URLConnect 廃止､HttpConnect に置き換えます｡
    327                ByteArrayOutputStream pipeOut = null;
    328                Writer outWriter = null;                                                // 6.3.8.0 (2015/09/11) rty の外に移動
    329                try {
    330                        conn = connect();
    331
    332                        // 5.10.19.0 (2019/12/27) ADD
    333                        setRequestAttribute( "DB.ERR_CODE", String.valueOf( conn.getCode() ) );
    334
    335                        // 出力先が､画面かﾌｧｲﾙかを判断します｡
    336                        // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    337                        if( isOutParse ) {
    338                                pipeOut = new ByteArrayOutputStream();
    339                                        // 6.3.8.0 (2015/09/11) FileUtil#getPrintWriter( OutputStream,String ) を使用｡
    340                                        outWriter = FileUtil.getPrintWriter( pipeOut, "UTF-8" );                // 6.3.8.0 (2015/09/11)
    341                        }
    342                        else if( display ) {
    343                                outWriter = FileUtil.getNonFlushPrintWriter( pageContext.getOut() ) ;   // JspWriter の取得
    344                        }
    345                        else if( saveFile != null ) {
    346                                outWriter = FileUtil.getPrintWriter( new File( saveFile ),"UTF-8" );
    347                        }
    348
    349                        final String rtnData = conn.readData();         // 6.9.0.1 (2018/02/05)
    350
    351                        // 出力先が存在する場合｡
    352                        if( outWriter != null ) {
    353                                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    354                                if( xslFile == null ) {
    355                                        outWriter.write( rtnData );
    356                                }
    357                                else {
    358                                        final XSLT xslt = new XSLT();
    359                                        xslt.setXslFile( xslFile );
    360                                        xslt.setOutFile( outWriter );
    361//                                      xslt.transform( conn.getReader() );
    362                                        xslt.transform( new StringReader( rtnData ) );          // 6.9.0.0 (2018/01/31) ﾘｰﾀﾞｰが取り出せないので､文字列から作成します｡
    363                                        xslt.close();
    364                                }
    365
    366                                // 8.0.0.2 (2021/10/15) ﾛｰｶﾙﾌｧｲﾙとｸﾗｳﾄﾞﾌｧｲﾙ間の移動
    367                                // 5.10.9.0 (2019/03/01) ｸﾗｳﾄﾞｽﾄﾚｰｼﾞ指定の場合は､ｱｯﾌﾟﾛｰﾄﾞする｡
    368                                if( saveFile != null) { // 5.10.10.0 (2019/03/29)
    369                                        HybsFileOperationFactory.local2cloud( useLocal,() -> new File(saveFile) );
    370
    371//                                      final FileOperation cloudFile = HybsFileOperationFactory.create( saveFile );
    372//                                      if( cloudFile.isCloud() ) {
    373//                                              final File localFile = new File(saveFile);
    374//                                              FileUtil.copy( localFile, cloudFile );
    375//                                              localFile.delete();
    376//                                      }
    377                                }
    378                        }
    379                }
    380//              catch( final IOException ex ) {
    381                catch( final Throwable th ) {                                                   // 6.9.0.1 (2018/02/05)
    382                        final String errMsg = "ﾃﾞｰﾀ取得中にｴﾗｰが発生しました｡"     + CR
    383                                                + " url=[" + urlStr + "]"                                                       + CR
    384                                                // 5.2.0.0 (2010/09/01) ｴﾗｰ処理でNullPointerExceptionが発生するﾊﾞｸﾞを修正
    385                                                + " message=[" + ( conn == null ? "NO_CONNECTION" : conn.getMessage() ) + "]" + CR
    386                                                + " Exception=[" + th.getMessage() + "]" ;
    387                        if( errNglctFlag ) { // 4.1.1.0 (2008/01/22) ｴﾗｰを無視(標準ｴﾗｰ出力のみ)
    388                                LogWriter.log( errMsg );
    389                        }
    390                        else { // 通常は無視しない
    391                                throw new HybsSystemException( errMsg,th );
    392                        }
    393                }
    394                finally {
    395                        Closer.ioClose( outWriter );                                            // 6.3.8.0 (2015/09/11) finally に移動
    396//                      if( conn != null ) { conn.disconnect(); }
    397                }
    398
    399                // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    400                if( isOutParse ) {
    401                        // 6.3.8.0 (2015/09/11) AutoCloseableを使用したtry-with-resources構築に対応
    402                        try( InputStream strm = new BufferedInputStream( new ByteArrayInputStream( pipeOut.toByteArray() ) ) ) {
    403                                parse( strm );
    404                        }
    405                        // 6.3.8.0 (2015/09/11) 今まで不要だった､IOException が発生｡AutoCloseable のせい？｡
    406                        catch( final IOException ex ) {         // catch は､close() されてから呼ばれます｡
    407                                final String errMsg = "parse 処理中でｴﾗｰが発生しました｡"   + CR
    408                                                        + "\t close() ｴﾗｰです｡"                                                   + CR
    409                                                        + "\t " + ex.getMessage()                                                       + CR ;
    410                                System.err.println( errMsg );
    411                        }
    412
    413                        if( isTableOut && table != null && !commitTableObject( tableId, table ) ) {
    414                                jspPrint( "URLConnectTag Query処理が割り込まれました｡DBTableModel は登録しません｡" );
    415                                return SKIP_PAGE ;
    416                        }
    417                }
    418
    419                return EVAL_PAGE ;
    420        }
    421
    422        /**
    423         * URLに対して接続を行います｡
    424         *
    425         * @og.rev 5.1.6.0 (2010/05/01) ｴﾝｺｰﾄﾞ指定対応
    426         * @og.rev 6.2.5.0 (2015/06/05) timeout属性追加
    427         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    428         * @og.rev 6.9.0.0 (2018/01/31) URLConnect 廃止､HttpConnect に置き換えます｡
    429         * @og.rev 5.10.10.0 (2019/03/19) PUT.DELETE対応
    430         * @og.rev 5.10.10.2 (2019/04/12) contentType
    431         * @og.rev 5.10.16.0 (2019/10/04) propKeys,propVals指定追加
    432         * @og.rev 5.10.19.0 (2019/12/27) postDataOnly対応 ････ Ver7では未対応
    433         * @og.rev 8.0.0.0 (2021/08/31) authJson,authURL 追加
    434         *
    435         * @return 接続ｵﾌﾞｼﾞｪｸﾄ
    436         * @throws IOException 入出力ｴﾗｰが発生したとき
    437         */
    438//      private URLConnect connect() throws IOException {
    439        private HttpConnect connect() throws IOException {
    440                if( useSystemUser ) { authUserPass = DEFAULT_USER; }
    441
    442                // 5.1.5.0 (2010/04/01) SOAP対応
    443                // SOAPの場合､PostDataは､SOAPConnectﾀｸﾞの中で生成します｡
    444//              URLConnect conn = null;
    445                HttpConnect conn = null;                                                                        // 6.9.0.0 (2018/01/31)
    446                // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    447//              if( "SOAP".equalsIgnoreCase( method ) ) {
    448//                      if( soapNameSpace == null || soapNameSpace.isEmpty()
    449//                                      || soapMethodName == null || soapMethodName.isEmpty() ) {
    450//                              final String errMsg = "SOAP接続の場合､soapNameSpace及びsoapMethodNameは必ず指定して下さい｡";
    451//                              throw new HybsSystemException( errMsg );
    452//                      }
    453//
    454//                      if( postData != null && postData.length() > 0 ) {
    455//                              conn = new SOAPConnect( urlStr,authUserPass, soapNameSpace, soapMethodName, postData );
    456//                      }
    457//                      else {
    458//                              conn = new SOAPConnect( urlStr,authUserPass, soapNameSpace, soapMethodName, keys, vals );
    459//                      }
    460//              }
    461//              else {
    462                        conn = new HttpConnect( urlStr,authUserPass );          // HttpConnect は､GET でも後付で引数を渡せます｡
    463
    464                        conn.setDebug( isDebug() );
    465
    466                        if( keys != null ) {
    467                                for( int i=0; i<keys.length; i++ ) {
    468                                        conn.addRequestProperty( keys[i] , vals[i] );
    469                                }
    470                        }
    471
    472//                      if( "POST".equalsIgnoreCase( method ) ) { conn.usePost( true ); }               // 6.9.0.1 (2018/02/05)
    473                        if( check( method,POST_SET ) ) { conn.usePost( true ); }                                // 5.10.10.0 (2019/03/29)
    474
    475//                      String urlEnc = XHTMLTag.urlEncode( keys,vals );
    476                        if( postKey != null ) { // 4.1.0.0 (2007/12/22)
    477//                              method = "POST";
    478//                              urlEnc = urlEnc + "&" + postKey + "=" + postData;       // &連結
    479                                conn.usePost( true );           // 6.9.0.1 (2018/02/05)
    480                                conn.addRequestProperty( postKey , postData );
    481                                if( check( method,POST_SET ) && !"POST".equalsIgnoreCase( method ) ) {
    482                                        conn.addHeaderProperty( "X-HTTP-Method-Override" , method );            // 5.10.10.0 (2019/03/29)
    483                                }
    484                        }
    485
    486//                      if( ! "POST".equals( method ) ) { // 4.1.0.0 (2007/12/22)
    487//                              // String urlEnc = XHTMLTag.urlEncode( keys,vals );
    488//                              urlStr = XHTMLTag.addUrlEncode( urlStr,urlEnc );
    489//                      }
    490//                      conn = new URLConnect( urlStr,authUserPass );
    491
    492                        // if( postKey != null ) {
    493                        //      conn.setPostData( postKey,postData );
    494                        // }
    495//                      if( "POST".equals( method ) && keys != null && vals != null ) { // 4.1.0.0 (2007/12/22)
    496//                              conn.setPostData( urlEnc );
    497//                      }
    498//              }
    499
    500                // 4.0.0 (2007/07/25) ﾌﾟﾛｷｼの設定追加
    501                if( proxyHost != null ) {
    502                        conn.setProxy( proxyHost,proxyPort );
    503                }
    504
    505                // 5.1.6.0 (2010/05/01) ｴﾝｺｰﾄﾞ指定対応
    506                if( encode != null && encode.length() > 0 ) {
    507                        conn.setCharset( encode );
    508                }
    509
    510                // 6.2.5.0 (2015/06/05) timeout属性追加
    511                if( timeout >= 0 ) {
    512                        conn.setTimeout( timeout );
    513                }
    514
    515                // 5.10.10.2 (2019/04/12)
    516                if( contentType != null && contentType.length() > 0 ){
    517                        conn.addRequestProperty( "Content-Type", contentType );
    518//                      conn.setConentType( contentType );
    519                }
    520
    521                // 5.10.16.0 (2019/10/04)
    522                if( propKeys != null && propVals != null ) {
    523                        conn.setRequestProperty( propKeys,propVals );
    524                }
    525
    526                // 8.0.0.0 (2021/08/31) authJson,authURL 追加
    527                if( authJson != null && authURL != null ) {
    528                        conn.setAuthJson( authJson,authURL );
    529                }
    530
    531                // 8.0.0.0 (2021/09/30) reqJson 追加
    532                if( reqJson != null ) {
    533                        conn.setReqJson( reqJson );
    534                }
    535
    536//              conn.connect();
    537
    538                return conn;
    539        }
    540
    541        /**
    542         * 出力ﾃﾞｰﾀをﾊﾟｰｽし､DBTableModel及び属性ﾊﾟﾗﾒｰﾀｰに分解します｡
    543         * 現時点では､XMLﾃﾞｰﾀのみﾊﾟｰｽすることが可能です｡
    544         *
    545         * @og.rev 6.4.3.4 (2016/03/11) forﾙｰﾌﾟを､forEach ﾒｿｯﾄﾞに置き換えます｡
    546         *
    547         * @param input ｲﾝﾌﾟｯﾄｽﾄﾘｰﾑ
    548         */
    549        private void parse( final InputStream input ) {
    550                final XML2TableParser parser = new XML2TableParser( input );
    551                parser.setTableCols( rowKey, colKeys );
    552                parser.setReturnCols( rtnKeys );
    553                parser.parse();
    554
    555                // DBTableModelを生成します｡
    556                if( isTableOut ) {
    557                        table = DBTableModelUtil.makeDBTable( parser.getCols(), parser.getData(), getResource() );
    558                }
    559
    560                // 戻り値を取得し､Attributeに登録します｡
    561                if( rtnKeys != null ) {
    562                        final Map<String,String> rtn = parser.getRtn();
    563                        // 6.4.3.4 (2016/03/11) forﾙｰﾌﾟを､forEach ﾒｿｯﾄﾞに置き換えます｡
    564                        rtn.forEach( (k,v) -> setRequestAttribute( k,v ) );
    565                }
    566        }
    567
    568        /**
    569         * ﾀｸﾞﾘﾌﾞｵﾌﾞｼﾞｪｸﾄをﾘﾘｰｽします｡
    570         * ｷｬｯｼｭされて再利用されるので､ﾌｨｰﾙﾄﾞの初期設定を行います｡
    571         *
    572         * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は､DBTableModelが新規作成された処理でのみ行う｡
    573         * @og.rev 6.2.5.0 (2015/06/05) timeout属性追加
    574         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    575         * @og.rev 5.10.9.0 (2019/03/01) storageType,bucketNameの初期を追加
    576         * @og.rev 5.10.10.2 (2019/04/12) contentTypeを追加
    577         * @og.rev 5.10.16.0 (2019/10/04) propKeys,propVals指定追加
    578         * @og.rev 5.10.19.0 (2019/12/27) postDataOnly対応 ････ Ver7では未対応
    579         * @og.rev 8.0.0.0 (2021/08/31) authJson,authURL 追加
    580         * @og.rev 8.0.1.0 (2021/10/29) useLocal 属性を追加｡storageType , bucketName 削除
    581         */
    582        @Override
    583        protected void release2() {
    584                super.release2();
    585                urlStr                  = null;
    586                proxyHost               = null;         // 4.0.0 (2007/07/25)
    587                proxyPort               = -1;           // 4.0.0 (2007/07/25)
    588                keys                    = null;
    589                vals                    = null;
    590                xslFile                 = null;
    591                saveFile                = null;
    592                postKey                 = null;
    593                postData                = null;
    594                timeout                 = HybsSystem.sysInt( "URL_CONNECT_TIMEOUT" );   // 6.2.5.0 (2015/06/05) 新規追加
    595                useSystemUser   = true;
    596                authUserPass    = null;
    597                display                 = false;
    598                method                  = "GET";        // 4.1.0.0 (2007/12/22)
    599                errNglctFlag    = false;        // 4.1.1.0 (2008/01/22)
    600//              soapNameSpace   = null;         // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    601//              soapMethodName  = null;         // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    602                table                   = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    603                tableId                 = HybsSystem.TBL_MDL_KEY; // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    604                rowKey                  = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    605                colKeys                 = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    606                rtnKeys                 = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    607                isTableOut              = false;        // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    608                isOutParse              = false;        // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    609                encode                  = "UTF-8";      // 5.1.6.0 (2010/05/01) ｴﾝｺｰﾄﾞ指定対応
    610                isMainTrans             = true;         // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    611//              storageType             = null;         // 5.10.9.0 (2019/03/01) ADD
    612//              bucketName              = null;         // 5.10.9.0 (2019/03/01) ADD
    613                contentType             = null;         // 5.10.10.2 (2019/04/12)
    614                propKeys                = null;         // 5.10.16.0 (2019/10/04)
    615                propVals                = null;         // 5.10.16.0 (2019/10/04)
    616                postDataOnly    = false;        // 5.10.19.0 (2019/12/27)
    617                authJson                = null;         // 8.0.0.0 (2021/08/31)
    618                authURL                 = null;         // 8.0.0.0 (2021/08/31)
    619                reqJson                 = null;         // 8.0.0.0 (2021/09/30)
    620                useLocal                = false;        // 8.0.1.0 (2021/10/29) ｸﾗｳﾄﾞ設定を使用しない場合は､true
    621        }
    622
    623        /**
    624         * 【TAG】ｱｸｾｽする接続先ＵＲＬを指定します｡
    625         *
    626         * @og.tag
    627         * 接続するＵＲＬを指定します｡(例：http:// ･･････)
    628         * ?以降のﾊﾟﾗﾒｰﾀが含まれていても構いません｡
    629         * このURL に､keys,vals で指定されたﾊﾟﾗﾒｰﾀも追加されます｡
    630         *
    631         * @param       url     接続先
    632         */
    633        public void setUrl( final String url ) {
    634                urlStr = nval( getRequestParameter( url ),urlStr );
    635        }
    636
    637        /**
    638         * 【TAG】ﾌﾟﾛｷｼ経由で接続する場合の､ﾌﾟﾛｷｼﾎｽﾄ名を指定します｡
    639         *
    640         * @og.tag
    641         * 接続先が､ﾌﾟﾛｷｼ経由の場合､ﾌﾟﾛｷｼのﾎｽﾄ名を指定します｡
    642         * 例：proxy.opengion.org
    643         *
    644         * @param       host    ﾌﾟﾛｷｼﾎｽﾄ名
    645         */
    646        public void setProxyHost( final String host ) {
    647                proxyHost = nval( getRequestParameter( host ),proxyHost );
    648                useSystemUser = false;  // ﾌﾟﾛｷｼ接続時は､ｼｽﾃﾑﾕｰｻﾞｰは使えません｡
    649        }
    650
    651        /**
    652         * 【TAG】ﾌﾟﾛｷｼ経由で接続する場合の､ﾌﾟﾛｷｼﾎﾟｰﾄ番号を指定します｡
    653         *
    654         * @og.tag
    655         * 接続先が､ﾌﾟﾛｷｼ経由の場合､ﾌﾟﾛｷｼのﾎﾟｰﾄ番号を指定します｡
    656         * 例：8080
    657         *
    658         * @param       port    ﾌﾟﾛｷｼﾎﾟｰﾄ番号
    659         */
    660        public void setProxyPort( final String port ) {
    661                proxyPort = nval( getRequestParameter( port ),proxyPort );
    662        }
    663
    664        /**
    665         * 【TAG】ｱｸｾｽﾊﾟﾗﾒｰﾀｷｰをCSV形式で複数指定します｡
    666         *
    667         * @og.tag
    668         * ｱｸｾｽする ＵＲＬに追加するﾊﾟﾗﾒｰﾀのｷｰを指定します｡
    669         * CSV形式で複数指定できます｡
    670         * vals 属性には､ｷｰに対応する値を､設定してください｡
    671         * 例:<b>keys="command,SYSTEM_ID"</b> vals="NEW,GE"
    672         * 分解方法は､CSV変数を先に分解してから､getRequestParameter で値を取得します｡
    673         * こうしないとﾃﾞｰﾀ自身にｶﾝﾏを持っている場合に分解をﾐｽる為です｡
    674         *
    675         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    676//       * [SOAP対応]
    677//       * SOAPによるWebｻｰﾋﾞｽの呼び出しの場合､keys,valsに指定された値より､env:Envelopﾀｸﾞを
    678//       * rootﾀｸﾞとするXMLﾃﾞｰﾀを生成します｡
    679//       * (BODY部分に直接XMLﾃﾞｰﾀを出力することも可能です｡)
    680//       * この際､項目名に'&gt;'を含めることで､階層的なXMLﾃﾞｰﾀを表現することができます｡
    681//       * 例)
    682//       *   [属性定義]
    683//       *   keys="param0&gt;AAA,param0&gt;BBB,param1&gt;CCC,DDD"
    684//       *   vals="v1,v2,v3,v4"
    685//       *   [XMLﾃﾞｰﾀ(※ﾃﾞｰﾀ部のみ)]
    686//       *   &lt;param0&gt;
    687//       *     &lt;AAA&gt;v1&lt;/AAA&gt;
    688//       *     &lt;BBB&gt;v2&lt;/BBB&gt;
    689//       *   &lt;/param0&gt;
    690//       *   &lt;param1&gt;
    691//       *     &lt;CCC&gt;v3&lt;/CCC&gt;
    692//       *   &lt;/param1&gt;
    693//       *   &lt;DDD&gt;v4&lt;/DDD&gt;
    694//       * 項目の値を"null"とすることで､XMLで言うところの｢xsi:nil=\"true\"｣のﾃﾞｰﾀを表現すること
    695//       * もできます｡
    696//       * また､ｷｰ名の先頭を'&#064;'にすることで､項目名に名前空間のPREFIXを付加することができます｡
    697//       * 一般的には､JavaやRubyで実装されたWebｻｰﾋﾞｽを呼び出しする場合は､必要ありませんが､
    698//       * .NETで実装されたWebｻｰﾋﾞｽを呼び出しする場合は､各項目にPREFIXを付与しないと､正しく
    699/        * ﾊﾟﾗﾒｰﾀｰを渡すことができません｡
    700//       * ※現時点では､keysの階層定義は､2階層まで対応しています｡
    701//       *   3階層以上のXML構造を定義する場合は､postFile属性によるﾌｧｲﾙ指定又は､Body部分で直接
    702//       *   XMLﾃﾞｰﾀを記述して下さい｡
    703         *
    704         * @param       key ﾘﾝｸ先に渡すｷｰ (CSV形式)
    705         * @see         #setVals( String )
    706         */
    707        public void setKeys( final String key ) {
    708                keys = getCSVParameter( key );
    709        }
    710
    711        /**
    712         * 【TAG】keys属性に対応する値をCSV形式で複数指定します｡
    713         *
    714         * @og.tag
    715         * ｷｰに設定した値を､CSV形式で複数して出来ます｡
    716         * 指定順序は､ｷｰと同じにしておいて下さい｡
    717         * 例:<b>keys="command,SYSTEM_ID"</b> vals="NEW,GE"
    718         * 分解方法は､CSV変数を先に分解してから､getRequestParameter で値を取得します｡
    719         * こうしないとﾃﾞｰﾀ自身にｶﾝﾏを持っている場合に分解をﾐｽる為です｡
    720         *
    721         * @param       val 設定値 keys属性に対応する値(CSV形式)
    722         * @see         #setKeys( String )
    723         */
    724        public void setVals( final String val ) {
    725                vals = getCSVParameter( val );
    726        }
    727
    728        /**
    729         * 【TAG】送信ﾒｿｯﾄﾞ[GET/POST]を指定します(初期値:GET)｡
    730//       * 【TAG】送信ﾒｿｯﾄﾞ[GET/POST/SOAP]を指定します(初期値:GET)｡
    731         *
    732         * @og.tag
    733         * URLConnectTagのﾒｿｯﾄﾞの初期設定はGETです｡
    734         * ここで"POST"(大文字)を指定するとkyes,valsの値ｾｯﾄをPOSTで送信します｡
    735         * (postKeyが設定されている場合はこの値に関係なくPOSTです)
    736         *
    737         * @og.rev 4.1.0.0 (2007/12/22) 新規作成
    738         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    739         *
    740         * @param       post_get        送信ﾒｿｯﾄﾞ [GET/POST]
    741//       * @param       post_get        送信ﾒｿｯﾄﾞ [GET/POST/SOAP]
    742         */
    743        public void setMethod ( final String post_get ) {
    744                method = nval( getRequestParameter( post_get ), method );
    745        }
    746
    747        /**
    748         * 【TAG】Basic認証で接続するﾕｰｻﾞｰにSYSTEMﾕｰｻﾞｰを使用するかどうか[true/false]を指定します(初期値:true)｡
    749         *
    750         * @og.tag
    751         * useSystemUser="true"(初期値) の場合､URL接続時のｺﾈｸｼｮﾝに､Basic認証を
    752         * 使用しますが､その時のﾕｰｻﾞｰにｼｽﾃﾑﾕｰｻﾞｰ(SYSTEM)を使用します｡
    753         * useSystemUser="false"の場合は､authUserPass で指定したﾕｰｻﾞｰ：ﾊﾟｽﾜｰﾄﾞを
    754         * 使用します｡authUserPass で､何も指定されなかった場合は､Basic認証を使用しません｡
    755         * 初期値は､true(SYSTEMﾕｰｻﾞｰ認証する) です｡
    756         *
    757         * @param   flag SYSTEMﾕｰｻﾞｰ認証 [true:SYSTEMﾕｰｻﾞｰ認証する/false:この接続のﾕｰｻﾞｰで認証する]
    758         * @see #setAuthUserPass( String )
    759         */
    760        public void setUseSystemUser( final String flag ) {
    761                useSystemUser = nval( getRequestParameter( flag ),useSystemUser );
    762        }
    763
    764        /**
    765         * 【TAG】Basic認証を使用して接続する場合のﾕｰｻﾞｰ:ﾊﾟｽﾜｰﾄﾞを指定します(初期値:null)｡
    766         *
    767         * @og.tag
    768         * 接続時のﾕｰｻﾞｰとﾊﾟｽﾜｰﾄﾞを､USER:PASSWD 形式で指定します｡
    769         * useSystemUser="false"の場合は､ここで指定したﾕｰｻﾞｰとﾊﾟｽﾜｰﾄﾞを使用します｡
    770         * その場合に､何も指定しない場合は､Basic認証を使用しません｡
    771         *
    772         * @param       userPass        ﾕｰｻﾞｰとﾊﾟｽﾜｰﾄﾞ (USER:PASSWD形式)
    773         * @see #setUseSystemUser( String )
    774         */
    775        public void setAuthUserPass( final String userPass ) {
    776                authUserPass = nval( getRequestParameter( userPass ),authUserPass );
    777        }
    778
    779        /**
    780         * 【TAG】接続の結果を表示する場合にXSLT変換する場合のﾌｧｲﾙを指定します｡
    781         *
    782         * @og.tag
    783         *
    784         * 接続先のﾃﾞｰﾀが､XML形式の場合､そのままでは､画面出力できない場合が
    785         * あります｡通常は､HTML形式に変換しますが､その変換に､ XSL ﾌｧｲﾙを
    786         * 指定することが可能です｡
    787         * display="true" の場合や､saveFile を指定した場合に､適用されます｡
    788         *
    789         * @param       file    XSLTﾌｧｲﾙ
    790         * @see #setSaveFile( String )
    791         * @see #setDisplay( String )
    792         */
    793        public void setXslFile( final String file ) {
    794                xslFile = HybsSystem.url2dir( nval( getRequestParameter( file ),xslFile ) );
    795        }
    796
    797        /**
    798         * 【TAG】接続の結果を表示するかどうかを指定します(初期値:false)｡
    799         *
    800         * @og.tag
    801         * true で､接続結果を表示します｡ false では､何も表示しません(初期値:false)
    802         * 接続結果を表示する使い方より､admin 画面に接続して､ｷｬｯｼｭｸﾘｱするような
    803         * 使い方が多いと考え､初期値は､false になっています｡
    804         * xslFile が指定されている場合､XSLT変換して画面表示します｡
    805         * display="true" と､saveFile を併用することはできません｡
    806         *
    807         * @param       flag    結果表示 [true:する/false:しない]
    808         * @see #setSaveFile( String )
    809         * @see #setXslFile( String )
    810         */
    811        public void setDisplay( final String flag ) {
    812                display = nval( getRequestParameter( flag ),display );
    813
    814                if( display && saveFile != null ) {
    815                        final String errMsg = "display=\"true\" と､saveFile を併用することはできません｡";
    816                        throw new HybsSystemException( errMsg );
    817                }
    818        }
    819
    820        /**
    821         * 【TAG】接続の結果をﾌｧｲﾙに保存します｡
    822         *
    823         * @og.tag
    824         * 接続先のﾃﾞｰﾀを受け取って､ﾌｧｲﾙに保存します｡その場合､
    825         * xslFile が指定されている場合､XSLT変換してｾｰﾌﾞします｡
    826         * display="true" と､saveFile を併用することはできません｡
    827         *
    828         * @param       file    保存先ﾌｧｲﾙ
    829         * @see #setXslFile( String )
    830         * @see #setDisplay( String )
    831         */
    832        public void setSaveFile( final String file ) {
    833                saveFile = HybsSystem.url2dir( nval( getRequestParameter( file ),saveFile ) );
    834
    835                if( display ) {
    836                        final String errMsg = "display=\"true\" と､saveFile を併用することはできません｡";
    837                        throw new HybsSystemException( errMsg );
    838                }
    839        }
    840
    841        /**
    842         * 【TAG】POST を使って､postFile属性のﾌｧｲﾙ内容を送信する時のｷｰを指定します｡
    843         *
    844         * @og.tag
    845         * 接続先にﾊﾟﾗﾒｰﾀ(引数)を投げる場合に､POST を使用できます｡
    846         * そのときの ｷｰをここで指定します｡
    847         * POSTするﾃﾞｰﾀは､postFileで指定されたﾌｧｲﾙか､BODY部に記述された文字列です｡
    848         *
    849         * @param       key     ﾌｧｲﾙ内容送信ｷｰ
    850         * @see  #setPostFile( String )
    851         */
    852        public void setPostKey( final String key ) {
    853                postKey = nval( getRequestParameter( key ),postKey );
    854        }
    855
    856        /**
    857         * 【TAG】接続ﾀｲﾑｱｳﾄ時間を(秒)で指定します
    858         *              (初期値:URL_CONNECT_TIMEOUT[={@og.value SystemData#URL_CONNECT_TIMEOUT}])｡
    859         *
    860         * @og.tag
    861         * 実際には､java.net.URLConnection#setConnectTimeout(int) に 1000倍して設定されます｡
    862         * 0 は､無限のﾀｲﾑｱｳﾄ､ﾏｲﾅｽは､設定しません｡(つまりJavaの初期値のまま)
    863         * (初期値:ｼｽﾃﾑ定数のURL_CONNECT_TIMEOUT[={@og.value SystemData#URL_CONNECT_TIMEOUT}])｡
    864         *
    865         * @og.rev 6.2.5.0 (2015/06/05) timeout属性追加
    866         *
    867         * @param       tout    ﾀｲﾑｱｳﾄ時間(秒) (ｾﾞﾛは､無制限)
    868         * @see         org.opengion.fukurou.util.HttpConnect#setTimeout(int)
    869         * @see         java.net.URLConnection#setConnectTimeout(int)
    870         */
    871        public void setTimeout( final String tout ) {
    872                timeout = nval( getRequestParameter( tout ),timeout );
    873        }
    874
    875        /**
    876         * 【TAG】POST を使って､postFile属性のﾌｧｲﾙ内容を送信します｡
    877         *
    878         * @og.tag
    879         * 接続先にﾊﾟﾗﾒｰﾀ(引数)を投げる場合に､POST を使用できます｡
    880         * そのときの 送信ﾃﾞｰﾀのﾌｧｲﾙをここで指定します｡
    881         * postKey のみ指定されて､postFile が指定されない場合は､BODY部を送信します｡
    882//       * SOAPによる呼び出しの場合は､ここ(BODY部での定義を含む)で､送信するXMLﾃﾞｰﾀを
    883//       * 定義することができます｡
    884         *
    885         * @og.rev 6.4.5.1 (2016/04/28) FileStringのｺﾝｽﾄﾗｸﾀｰ変更
    886         * @og.rev 6.4.5.2 (2016/05/06) fukurou.util.FileString から､fukurou.util.FileUtil に移動｡
    887         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    888         *
    889         * @param       file    送信ﾌｧｲﾙ
    890         * @see  #setPostKey( String )
    891         */
    892        public void setPostFile( final String file ) {
    893                final String postFile = nval( getRequestParameter( file ),null );
    894
    895                if( postFile != null ) {
    896                        // 6.4.5.1 (2016/04/28) FileStringのｺﾝｽﾄﾗｸﾀｰ変更
    897                        postData = FileUtil.getValue( HybsSystem.url2dir( postFile ) , HybsConst.UTF_8 );
    898                }
    899        }
    900
    901        /**
    902         * 【TAG】(通常は使いません) 接続ｴﾗｰを無視する場合にtrueとします(初期値false)｡
    903         *
    904         * @og.tag
    905         * trueにするとConnectで発生したｴﾗｰを投げずに処理を続行します｡
    906         * (標準ｴﾗｰ出力にｴﾗｰ内容は出力されます)
    907         * 接続ｴﾗｰが発生しても処理を中断したくない場合に設定します｡
    908         *
    909         * @og.rev 4.1.1.0 (2008/01/22) 新規追加
    910         *
    911         * @param       flag    ｴﾗｰを無視するか [true:する/false:しない]
    912         */
    913        public void setErrNeglect( final String flag ) {
    914                errNglctFlag = nval( getRequestParameter( flag ), errNglctFlag );
    915        }
    916
    917//      /**
    918//       * 【TAG】SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名及びﾊﾟﾗﾒｰﾀｰの名前空間を指定します｡
    919//       *
    920//       * @og.tag
    921//       * SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名及びﾊﾟﾗﾒｰﾀｰの名前空間を指定します｡
    922//       * この名前空間は､通常WSDLﾌｧｲﾙのdescriptionsﾀｸﾞのtargetNamespace属性の値により
    923//       * 定義されます｡
    924//       *
    925//       * @og.rev 5.1.5.0 (2010/04/01) 新規追加
    926//       * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    927//       *
    928//       * @param       ns      名前空間
    929//       */
    930//      public void setSoapNameSpace( final String ns ) {
    931//              soapNameSpace = nval( getRequestParameter( ns ), soapNameSpace );
    932//      }
    933//
    934//      /**
    935//       * 【TAG】SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名を指定します｡
    936//       *
    937//       * @og.tag
    938//       * SOAPによるWebｻｰﾋﾞｽの呼び出しで､ﾒｿｯﾄﾞ名を指定します｡
    939//       * WSDLﾌｧｲﾙで定義されるoperationﾀｸﾞのname属性の値に相当します｡
    940//       *
    941//       * @og.rev 5.1.5.0 (2010/04/01) 新規追加
    942//       * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    943//       *
    944//       * @param       method  ﾒｿｯﾄﾞ名
    945//       */
    946//      public void setSoapMethodName( final String method ) {
    947//              soapMethodName = nval( getRequestParameter( method ), soapMethodName );
    948//      }
    949
    950        /**
    951         * 【TAG】(通常は使いません)結果のDBTableModelを､sessionに登録するときのｷｰを指定します
    952         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])｡
    953         *
    954         * @og.tag
    955         * 検索結果より､DBTableModelｵﾌﾞｼﾞｪｸﾄを作成します｡これを､下流のviewﾀｸﾞ等に
    956         * 渡す場合に､通常は､session を利用します｡その場合の登録ｷｰです｡
    957         * query ﾀｸﾞを同時に実行して､結果を求める場合､同一ﾒﾓﾘに配置される為､
    958         * この tableId 属性を利用して､ﾒﾓﾘ空間を分けます｡
    959         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])｡
    960         *
    961         * @param       id ﾃｰﾌﾞﾙID (sessionに登録する時のID)
    962         */
    963        public void setTableId( final String id ) {
    964                tableId   = nval( getRequestParameter( id ),tableId );
    965        }
    966
    967        /**
    968         * 【TAG】結果のXMLをDBTableModelに変換する際に､行のｷｰとなるﾀｸﾞ名を指定します｡
    969         *
    970         * @og.tag
    971         * 結果のXMLを表形式に変換する際に､行のｷｰとなるﾀｸﾞ名を指定します｡
    972         * このｷｰのﾀｸﾞを基点として､colKeysで指定されたﾀｸﾞの値を各項目の値として取り込みます｡
    973         * (詳細は､colKeysのﾀｸﾞﾘﾌﾞ属性ﾏﾆｭｱﾙを参照して下さい｡)
    974         *
    975         * @param       key 行のｷｰとなるﾀｸﾞ名
    976         * @see #setColKeys( String )
    977         */
    978        public void setRowKey( final String key ) {
    979                rowKey = nval( getRequestParameter( key ),rowKey );
    980        }
    981
    982        /**
    983         * 【TAG】結果のXMLをDBTableModelに変換する際に､項目のｷｰとなるﾀｸﾞ名の一覧を指定します｡
    984         *
    985         * @og.tag
    986         * 結果のXMLをDBTableModelに変換する際に､項目のｷｰとなるﾀｸﾞ名の一覧を指定します｡
    987         * rowKeyで行を､colKeysで項目を表現し､rowKeyのﾀｸﾞで囲われた固まりを1つの行とみなします｡
    988         * このため､colKeysに指定されたｷｰのﾀｸﾞでも､rowKeyの外にある場合は､取り込み対象となりません｡
    989         *
    990         * また､ｷｰにPARENT_TAG､PARENT_FULL_TAGを指定することで､rowKeyで指定されたﾀｸﾞの
    991         * 直近の親ﾀｸﾞ､及びﾌﾙの親ﾀｸﾞ名(親ﾀｸﾞの階層を"&gt;[ﾀｸﾞA]&gt;[ﾀｸﾞB]&gt;[ﾀｸﾞC]&gt;"で表現)を
    992         * 取得することができます｡
    993         *
    994         * @param       keys 項目ｷｰ ﾀｸﾞ名の一覧(CSV形式)
    995         */
    996        public void setColKeys( final String keys ) {
    997                colKeys = StringUtil.csv2Array( getRequestParameter( keys ) );
    998        }
    999
    1000        /**
    1001         * 【TAG】結果のXMLを変換する際に､ﾊﾟﾗﾒｰﾀ(Attributes)として取り込むｷｰの一覧を指定します｡
    1002         *
    1003         * @og.tag
    1004         * 結果のXMLを変換する際に､ﾊﾟﾗﾒｰﾀ(Attributes)として取り込むｷｰの一覧を指定します｡
    1005         * ここで指定されたｷｰのﾀｸﾞの値を取り出し､{&#064;XX}形式(Attributes)として処理できるようにします｡
    1006         *
    1007         * @param       keys 戻り値ｷｰ ﾊﾟﾗﾒｰﾀｰ(Attributes)のｷｰとなるﾀｸﾞ名の一覧(CSV形式)
    1008         */
    1009        public void setRtnKeys( final String keys ) {
    1010                rtnKeys = StringUtil.csv2Array( getRequestParameter( keys ) );
    1011        }
    1012
    1013        /**
    1014         * 【TAG】ﾃﾞｰﾀの入出力のｴﾝｺｰﾄﾞを指定します(初期値:UTF-8)｡
    1015         *
    1016         * @og.tag
    1017         * ﾃﾞｰﾀの入出力のｴﾝｺｰﾄﾞを指定します｡
    1018         * 初期値は､"UTF-8"です｡
    1019         *
    1020         * @og.rev 5.1.6.0 (2010/05/01) 新規作成
    1021         * @param       enc     ｴﾝｺｰﾄﾞ
    1022         */
    1023        public void setEncode( final String enc ) {
    1024                encode = nval( getRequestParameter( enc ), encode );
    1025        }
    1026
    1027        /**
    1028         * ﾀｸﾞの名称を､返します｡
    1029         * 自分自身のｸﾗｽ名より､自動的に取り出せないため､このﾒｿｯﾄﾞをｵｰﾊﾞｰﾗｲﾄﾞします｡
    1030         *
    1031         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
    1032         *
    1033         * @return  ﾀｸﾞの名称
    1034         * @og.rtnNotNull
    1035         */
    1036        @Override
    1037        protected String getTagName() {
    1038                return "urlConnect" ;
    1039        }
    1040
    1041        /**
    1042         * 【TAG】(通常は使いません)ﾀｸﾞで処理される処理がﾒｲﾝとなるﾄﾗﾝｻﾞｸｼｮﾝ処理かどうかを指定します(初期値:true)｡
    1043         *
    1044         * @og.tag
    1045         * この値は､ﾌｧｲﾙﾀﾞｳﾝﾛｰﾄﾞ処理に影響します｡この値がtrueに指定された時にcommitされたDBTableModelが
    1046         * ﾌｧｲﾙﾀﾞｳﾝﾛｰﾄﾞの対象の表になります｡
    1047         *
    1048         * このﾊﾟﾗﾒｰﾀｰは､通常､各ﾀｸﾞにより実装され､ﾕｰｻﾞｰが指定する必要はありません｡
    1049         * 但し､1つのJSP内でDBTableModelが複数生成される場合に､前に処理したDBTableModelについてﾌｧｲﾙﾀﾞｳﾝﾛｰﾄﾞをさせたい
    1050         * 場合は､後ろでDBTableModelを生成するﾀｸﾞで､明示的にこの値をfalseに指定することで､ﾌｧｲﾙﾀﾞｳﾝﾛｰﾄﾞ処理の対象から
    1051         * 除外することができます｡
    1052         *
    1053         * @og.rev 5.1.6.0 (2010/05/01) 新規作成
    1054         *
    1055         * @param  flag ﾒｲﾝﾄﾗﾝｻﾞｸｼｮﾝかどうか [true:ﾒｲﾝ/false:その他]
    1056         */
    1057        public void setMainTrans( final String flag ) {
    1058                isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
    1059        }
    1060
    1061//      /**
    1062//       * 【TAG】保存先ｽﾄﾚｰｼﾞﾀｲﾌﾟを設定します｡
    1063//       *
    1064//       * @og.tag
    1065//       * ﾌｧｲﾙを読み取り元の､ｽﾄﾚｰｼﾞﾀｲﾌﾟを設定します｡
    1066//       * 未設定の場合は､ｼｽﾃﾑﾘｿｰｽの｢CLOUD_TARGET｣が参照されます｡
    1067//       * 自身のｻｰﾊﾞを指定する場合は､｢default｣を設定してください｡
    1068//       *
    1069//       * @og.rev 5.10.9.0 (2019/03/01) 新規追加
    1070//       * @og.rev 8.0.1.0 (2021/10/29) 削除
    1071//       *
    1072//       * @param storage 保存先ｽﾄﾚｰｼﾞﾀｲﾌﾟ
    1073//       */
    1074//      public void setStorageType( final String storage ) {
    1075//              storageType = nval( getRequestParameter( storage ), storageType );
    1076//      }
    1077
    1078//      /**
    1079//       * 【TAG】保存先ﾊﾞｹｯﾄ名を設定します｡
    1080//       *
    1081//       * @og.tag
    1082//       * ﾌｧｲﾙを読み取り元の､ﾊﾞｹｯﾄ名を指定します｡
    1083//       * ｸﾗｳﾄﾞｽﾄﾚｰｼﾞ利用時のみ有効です｡
    1084//       * 未設定の場合は､ｼｽﾃﾑﾘｿｰｽの｢CLOUD_BUKET｣が参照されます｡
    1085//       *
    1086//       * @og.rev 5.10.9.0 (2019/03/01) 新規追加
    1087//       * @og.rev 8.0.1.0 (2021/10/29) 削除
    1088//       *
    1089//       * @param bucket 保存先ﾊﾞｹｯﾄ名
    1090//       */
    1091//      public void setBucketName( final String bucket ) {
    1092//              bucketName = nval( getRequestParameter( bucket ), bucketName );
    1093//      }
    1094
    1095        /**
    1096         * 【TAG】送信ﾍｯﾀﾞのｺﾝﾃﾝﾄﾀｲﾌﾟを指定します｡
    1097         *
    1098         * @og.tag
    1099         * 通常は指定不要です｡
    1100         * API等でapplication/json等を指定された場合に設定してください｡
    1101         *
    1102         * @og.rev 5.10.10.2 (2019/04/12) 追加
    1103         *
    1104         * @param ctype ｺﾝﾃﾝﾄﾀｲﾌﾟ
    1105         */
    1106        public void setContentType( final String ctype ) {
    1107                contentType = nval( getRequestParameter( ctype ), contentType );
    1108        }
    1109
    1110        /**
    1111         * 【TAG】ｺﾈｸｼｮﾝのrequestParameterに渡すｷｰをCSV形式で複数指定します｡
    1112         *
    1113         * @og.tag
    1114         * 分解方法は､CSV変数を先に分解してから､getRequestParameter で値を取得します｡
    1115         *
    1116         * @og.rev 5.10.16.0 (2019/10/04) propKeys,propVals指定追加
    1117         *
    1118         * @param       key ｷｰ(CSV形式)
    1119         */
    1120        public void setPropKeys( final String key ) {
    1121                propKeys = nval( getRequestParameter( key ), propKeys );
    1122        }
    1123
    1124        /**
    1125         * 【TAG】ｺﾈｸｼｮﾝのrequestParameterに渡す値をCSV形式で複数指定します｡
    1126         *
    1127         * @og.tag
    1128         * 分解方法は､CSV変数を先に分解してから､getRequestParameter で値を取得します｡
    1129         *
    1130         * @og.rev 5.10.16.0 (2019/10/04) propKeys,propVals指定追加
    1131         *
    1132         * @param       val 値(CSV形式) 新規追加
    1133         */
    1134        public void setPropVals( final String val ) {
    1135                propVals = nval( getRequestParameter( val ), propVals );
    1136        }
    1137
    1138        /**
    1139         * 【TAG】postDataのみ送信ﾌﾗｸﾞ｡
    1140         *
    1141         * @og.tag
    1142         * trueを設定時､keyなしでpostDataをそのまま送信します｡
    1143         * 主にapplication/json形式で送信時に利用します｡
    1144         *
    1145         * @og.rev 5.10.19.0 (2019/12/27) postDataOnly対応 ････ Ver7では未対応
    1146         * @param flg postDataのみ送信ﾌﾗｸﾞ
    1147         */
    1148        public void setPostDataOnly( final String flg ) {
    1149                postDataOnly = nval( getRequestParameter( flg ), postDataOnly);
    1150        }
    1151
    1152        /**
    1153         * 【TAG】JSONｺｰﾄﾞで認証する場合に使用します｡
    1154         *
    1155         * @og.tag
    1156         * JSONｺｰﾄﾞで認証する場合に使用します｡
    1157         *
    1158         * @og.rev 8.0.0.0 (2021/08/31) authJson,authURL 追加
    1159         *
    1160         * @param       json JSONｺｰﾄﾞの文字列
    1161         */
    1162        public void setAuthJson( final String json ) {
    1163                authJson = nval( getRequestParameter( json ), authJson );
    1164        }
    1165
    1166        /**
    1167         * 【TAG】JSONｺｰﾄﾞで認証するURLを指定します｡
    1168         *
    1169         * @og.tag
    1170         * JSONｺｰﾄﾞで認証するURLを指定します｡
    1171         *
    1172         * @og.rev 8.0.0.0 (2021/08/31) authJson,authURL 追加
    1173         *
    1174         * @param       url JSONｺｰﾄﾞで認証するURL
    1175         */
    1176        public void setAuthURL( final String url ) {
    1177                authURL = nval( getRequestParameter( url ), authURL );
    1178        }
    1179
    1180        /**
    1181         * 【TAG】JSONｺｰﾄﾞでﾘｸｴｽﾄするﾊﾟﾗﾒｰﾀを指定します｡
    1182         *
    1183         * @og.tag
    1184         * JSONｺｰﾄﾞでﾘｸｴｽﾄするﾊﾟﾗﾒｰﾀを指定します｡
    1185         *
    1186         * @og.rev 8.0.0.0 (2021/09/30) reqJson 追加
    1187         *
    1188         * @param       json JSONｺｰﾄﾞの文字列
    1189         */
    1190        public void setReqJson( final String json ) {
    1191                reqJson = nval( getRequestParameter( json ), reqJson );
    1192        }
    1193
    1194        /**
    1195         * 【TAG】ｼｽﾃﾑ定数でｸﾗｳﾄﾞ設定されていても､ｸﾗｳﾄﾞ環境を使用しない場合､trueを指定します(初期値:false)｡
    1196         *
    1197         * @og.tag
    1198         * ｸﾗｳﾄﾞ設定は､ｼｽﾃﾑ定数の『CLOUD_TARGET』と『CLOUD_BUCKET』の設定で自動的に使用しますが､
    1199         * どうしてもﾛｰｶﾙでのみ使いたい場合は､この属性を true に設定します｡
    1200         * 標準はfalse:設定どおりとなります｡
    1201         *
    1202         * true/false以外を指定した場合はfalse扱いとします｡
    1203         *
    1204         * @og.rev 8.0.1.0 (2021/10/29) useLocal 属性を追加｡
    1205         *
    1206         * @param flag ﾛｰｶﾙ環境のみ [true:ﾛｰｶﾙのみ/false:設定どおり]
    1207         */
    1208        public void setUseLocal( final String flag ) {
    1209                useLocal = nval( getRequestParameter( flag ),useLocal );
    1210        }
    1211
    1212        /**
    1213         * このｵﾌﾞｼﾞｪｸﾄの文字列表現を返します｡
    1214         * 基本的にﾃﾞﾊﾞｯｸﾞ目的に使用します｡
    1215         *
    1216         * @og.rev 5.10.16.0 (2019/10/04) propKeys,propVals指定追加
    1217         *
    1218         * @return このｸﾗｽの文字列表現
    1219         * @og.rtnNotNull
    1220         */
    1221        @Override
    1222        public String toString() {
    1223                return ToString.title( this.getClass().getName() )
    1224                                .println( "VERSION"                     ,VERSION                )
    1225                                .println( "method"                      ,method                 )
    1226                                .println( "urlStr"                      ,urlStr                 )
    1227                                .println( "keys"                        ,StringUtil.array2csv( keys ) )
    1228                                .println( "vals"                        ,StringUtil.array2csv( vals ) )
    1229                                .println( "proxyHost"           ,proxyHost              )
    1230                                .println( "proxyPort"           ,proxyPort              )
    1231                                .println( "timeout"                     ,timeout                )               // 6.2.5.0 (2015/06/05) 新規追加
    1232                                .println( "useSystemUser"       ,useSystemUser  )
    1233                                .println( "authUserPass"        ,authUserPass   )
    1234                                .println( "display"                     ,display                )
    1235                                .println( "postKey"                     ,postKey                )
    1236                                .println( "postData"            ,postData               )
    1237                                .println( "xslFile"                     ,xslFile                )
    1238                                .println( "saveFile"            ,saveFile               )
    1239                                .println( "errNglctFlag"        ,errNglctFlag   )
    1240//                              .println( "soapNameSpace"       ,soapNameSpace  )               // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    1241//                              .println( "soapMethodName"      ,soapMethodName )               // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    1242                                .println( "tableId"                     ,tableId                )
    1243                                .println( "rowKey"                      ,rowKey                 )
    1244                                .println( "colKeys"                     ,StringUtil.array2csv( colKeys ) )
    1245                                .println( "rtnKeys"                     ,StringUtil.array2csv( rtnKeys ) )
    1246//                              .println( "storageType"         ,storageType    )               // 5.10.10.2 (2019/04/12) 追加
    1247//                              .println( "bucketName"          ,bucketName             )               // 5.10.10.2 (2019/04/12) 追加
    1248                                .println( "contentType"         ,contentType    )               // 5.10.10.2 (2019/04/12) 追加
    1249                                .println( "propKeys"            ,propKeys               )               // 5.10.16.0 (2019/10/04) 追加
    1250                                .println( "propVals"            ,propVals               )               // 5.10.16.0 (2019/10/04) 追加
    1251                                .println( "Other..."            ,getAttributes().getAttribute() )
    1252                                .fixForm().toString() ;
    1253        }
    1254}