    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;
    032// import org.opengion.fukurou.util.SOAPConnect;                                // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    033import org.opengion.fukurou.util.StringUtil;
    034// import org.opengion.fukurou.util.URLConnect;                                 // 6.9.0.0 (2018/01/31) URLConnect 廃止
    035import org.opengion.fukurou.util.HttpConnect;                                   // 6.9.0.0 (2018/01/31) 新規追加
    036// import org.opengion.fukurou.util.XHTMLTag;
    037import org.opengion.fukurou.xml.XML2TableParser;
    038import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    039import org.opengion.fukurou.xml.XSLT;
    040import org.opengion.hayabusa.common.HybsSystem;
    041import org.opengion.hayabusa.common.HybsSystemException;
    042import org.opengion.hayabusa.db.DBTableModel;
    043import org.opengion.hayabusa.db.DBTableModelUtil;
    044
    045import static org.opengion.fukurou.util.StringUtil.nval;
    046
    047/**
    048 * 指定のURLに接続します。
    049 *
    050 * エンジンでは、URL にアクセスすることで、デーモンを起動したり、
    051 * コマンドを実行(adminメニュー)することが出来ます。
    052 * もちろん、検索条件を指定して、結果を取得することも可能です。
    053 * このタグでは、URLにアクセスして、コマンドを実行したり結果を取得できます。
    054 * さらに、ファイルを POST で転送したり、処理結果を XSLT変換したり出来ます。
    055 *
    056 * @og.formSample
    057 * ●形式：
    058 *     &lt;og:urlConnect
    059 *         url           = "http://･･･ "    必須
    060 *         proxyHost     = "proxy.opengion.org"
    061 *         proxyPort     = "8080"
    062 *         timeout       = "1"
    063 *         keys          = "command,SYSTEM_ID"
    064 *         vals          = "NEW,GE"
    065 *         useSystemUser = "true/false"     初期値:true
    066 *         authUserPass  = "admin:******"   初期値:admin:******
    067 *         display       = "false/true"     初期値:false
    068 *         xslFile       = "filter.xsl"
    069 *         saveFile      = "outdata.xml"
    070 *    ×   soapNameSpace = "MyWebService"        6.9.0.0 (2018/01/31) 廃止
    071 *    ×   soapMethodName= "test"                        6.9.0.0 (2018/01/31) 廃止
    072 *         tableId       = "DEFAULT"
    073 *         rowKey        = "item"
    074 *         colKeys       = "person_id,person_name"
    075 *         rtnKeys       = "version,summary"
    076 *         encode        = "UTF-8"
    077 *     /&gt;
    078 *
    079 * url           : 接続するURLを指定します。必須属性です。
    080 * proxyHost     : proxy が存在する場合は、そのホスト名(例：proxy.opengion.org)
    081 * proxyPort     : proxy が存在する場合は、そのポート番号(例：8080)
    082 * timeout       : 通信リンクのオープン時に、指定された秒単位のタイム・アウト値を使用(例：1)
    083 * keys,vals     : URLの指定時に、パラメータ(引数)を追加します。URLに含めても構いません。
    084 *               : SOAPによる呼び出しの場合の詳細については、keysの属性定義を参照して下さい。
    085 * postKey       : POST を使って、postFile属性のファイル内容を送信する時のキーです。
    086 * postFile      : POST を使って、postFile属性のファイル内容を送信します。
    087 *                 postFile を指定せず、postKey のみ指定して、BODY部に何か書き込めば、
    088 *                 そのBODY部の文字列を POSTの内容として送信します。
    089 * authUserPass  : Basic認証を使用する場合の接続ユーザー：パスワードを指定します。
    090 *                 接続時のユーザーとパスワードを、USER:PASSWD 形式 で指定します。
    091 *                 useSystemUser="false" で何も指定しない場合は、Basic認証を使用しません。
    092 * useSystemUser : Basic認証の接続ユーザー：パスワードに、システムユーザーを使用
    093 *                 するかどうかを指定します(初期値:true)。
    094 *                 true の場合は、SYSTEM:***** を使用します。
    095 * xslFile       : 接続先データを取得し、そのデータを XSLT変換する場合のXSLファイルを指定します。
    096 * display       : 接続した結果のレスポンスを画面に表示するかどうかを指定します(初期値:false)。
    097 *                 エンジンの場合、コマンドを投げるだけであれば、結果を取得する必要は
    098 *                 ありません。イメージ的には、取得データが、このタグの位置に置き換わります。
    099 *                 xslFile が指定されている場合、XSLT変換してセーブします。
    100 * saveFile      : 接続先データを取得した結果を、ファイル出力します。
    101 *                 display="true" と、saveFile を併用することはできません。
    102 *                 xslFile が指定されている場合、XSLT変換してセーブします。
    103 * soapNameSpace : SOAPによるWebサービスの呼び出しで、メソッド名及びパラメーターの名前空間を指定します。
    104 *                 この名前空間は、通常WSDLファイルのdescriptionsタグのtargetNamespace属性の値により
    105 *                 定義されます。  6.9.0.0 (2018/01/31) 廃止
    106 * soapMethodName: SOAPによるWebサービスの呼び出しで、メソッド名を指定します。
    107 *                 WSDLファイルで定義されるoperationタグのname属性の値に相当します。 6.9.0.0 (2018/01/31) 廃止
    108 * tableId       : 結果のXMLファイルをDBTableModelに変換した際に、登録するTableIdを指定します。
    109 * rowKey        : XMLをDBTableModelに変換する際の、行を表すタグキーを指定します。
    110 * colKeys       : XMLをDBTableModelに変換する際の、項目を表すタグキーの一覧を指定します。
    111 *                 キーにPARENT_TAG、PARENT_FULL_TAGを指定することで、rowKeyで指定されたタグの
    112 *                 直近の親タグ、及びフルの親タグ名(親タグの階層を"&gt;[タグA]&gt;[タグB]&gt;[タグC]&gt;"で表現)を
    113 *                 取得することができます。
    114 * rtnKeys       : XMLのタグキーを指定して値を取り出します。取り出した値は、{&#064;XX}形式で処理することが可能です。
    115 * encode        : データの入出力を行うエンコードを指定します。
    116 *
    117 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    118 *         POSTデータを記述します。
    119 *
    120 * ●Tag定義：
    121 *   &lt;og:urlConnect
    122 *       url              ○【TAG】アクセスする ＵＲＬ を指定します(必須)(必須)。
    123 *       proxyHost          【TAG】プロキシ経由で接続する場合の、プロキシホスト名を指定します
    124 *       proxyPort          【TAG】プロキシ経由で接続する場合の、プロキシポート番号を指定します
    125 *       timeout            【TAG】通信リンクのオープン時に、指定された秒単位のタイム・アウト値を使用
    126 *                                  (初期値:URL_CONNECT_TIMEOUT[={@og.value SystemData#URL_CONNECT_TIMEOUT}])。)
    127 *       keys               【TAG】アクセスパラメータキーをCSV形式で複数指定します
    128 *       vals               【TAG】keys属性に対応する値をCSV形式で複数指定します
    129 *       useSystemUser      【TAG】Basic認証で接続するユーザーにSYSTEMユーザーを使用するかどうか[true/false]を指定します(初期値:true)
    130 *       authUserPass       【TAG】Basic認証を使用して接続する場合のユーザー:パスワードを指定します(初期値:null)
    131 *       display            【TAG】接続の結果を表示するかどうかを指定します(初期値:false)
    132 *       xslFile            【TAG】接続の結果を表示する場合にXSLT変換する場合のファイルを指定します
    133 *       saveFile           【TAG】接続の結果をファイルに保存します
    134 *       postKey            【TAG】POST を使って、postFile属性のファイル内容を送信する時のキーを指定します
    135 *       postFile           【TAG】POST を使って、postFile属性のファイル内容を送信します
    136 *       method             【TAG】送信メソッド[GET/POST/SOAP]を指定します(初期値:GET)
    137 *       errNeglect         【TAG】(通常は使いません) 接続エラーを無視する場合にtrueとします(初期値false)
    138 *   ×  soapNameSpace      【廃止】SOAPによるWebサービスの呼び出しで、メソッド名及びパラメーターの名前空間を指定します ( 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正)
    139 *   ×  soapMethodName     【廃止】SOAPによるWebサービスの呼び出しで、メソッド名を指定します ( 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正)
    140 *       tableId            【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します
    141 *       scope              【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session)
    142 *       rowKey             【TAG】結果のXMLをDBTableModelに変換する際に、行のキーとなるタグ名を指定します
    143 *       colKeys            【TAG】結果のXMLをDBTableModelに変換する際に、項目のキーとなるタグ名の一覧を指定します
    144 *       rtnKeys            【TAG】結果のXMLを変換する際に、パラメータ(Attributes)として取り込むキーの一覧を指定します
    145 *       encode             【TAG】データの入出力のエンコードを指定します(初期値:UTF-8)
    146 *       mainTrans          【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:false)
    147 *       caseKey            【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 5.7.7.2 (2014/06/20)
    148 *       caseVal            【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 5.7.7.2 (2014/06/20)
    149 *       caseNN             【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    150 *       caseNull           【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    151 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない)
    152 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    153 *   &gt;   ... Body ...
    154 *   &lt;/og:urlConnect&gt;
    155 *
    156 * ●例：
    157 * アドミン関連
    158 * http://localhost:8823/gf/jsp/admin?COMMAND=infomation     [状況表示]
    159 * http://localhost:8823/gf/jsp/admin?COMMAND=close          [プール削除]
    160 * http://localhost:8823/gf/jsp/admin?COMMAND=loginUser      [ログインユーザー]
    161 * http://localhost:8823/gf/jsp/admin?COMMAND=システムパラメータ [システムパラメータ]
    162 *
    163 * 帳票デーモン
    164 * 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  デーモン起動
    165 * 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  デーモン停止
    166 *
    167 *Tomcat Manager 画面
    168 * http://localhost:8823/manager/reload?path=/ver4 アプリケーションを再ロード
    169 *
    170 * @og.rev 3.6.0.0 (2004/09/17) 新規作成
    171 * @og.rev 4.1.0.0 (2007/12/22) POSTメソッドで複数キーを登録できるように属性追加
    172 * @og.rev 5.1.5.0 (2010/04/01) SOAP対応
    173 * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    174 * @og.group その他部品
    175 *
    176 * @version  4.0
    177 * @author   Kazuhiko Hasegawa
    178 * @since    JDK5.0,
    179 */
    180public class URLConnectTag extends CommonTagSupport {
    181        /** このプログラムのVERSION文字列を設定します。   {@value} */
    182        private static final String VERSION = "6.9.0.1 (2018/02/05)" ;
    183        private static final long serialVersionUID = 690120180205L ;
    184
    185//      private static final String DEFAULT_USER = "SYSTEM:MANAGER" ;
    186        private static final String DEFAULT_USER = "admin:admin" ;                      // 6.9.0.1 (2018/02/05) この際、変更しておきます。
    187
    188        private transient DBTableModel table;                   // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    189
    190        private String          urlStr                  ;
    191        private String[]        keys                    ;
    192        private String[]        vals                    ;
    193        private String          xslFile                 ;
    194        private String          saveFile                ;
    195        private String          postKey                 ;
    196        private String          postData                ;                       // postFile ファイルか、BODY部
    197        private int                     timeout                 = HybsSystem.sysInt( "URL_CONNECT_TIMEOUT" );   // 6.2.5.0 (2015/06/05) 新規追加
    198        private boolean         useSystemUser   = true;
    199        private String          authUserPass    ;
    200        private boolean         display                 ;
    201        private String          proxyHost               ;                       // 4.0.0 (2007/07/25)
    202        private int             proxyPort               = -1;           // 4.0.0 (2007/07/25)
    203        private String          method                  = "GET";        // 4.1.0.0 (2007/12/22) POSTorGETorSOAP
    204        private boolean         errNglctFlag    ;                       // 4.1.1.0 (2008/01/22) エラー無視フラグ
    205//      private String          soapNameSpace   ;                       // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    206//      private String          soapMethodName  ;                       // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    207        private String          tableId                 = HybsSystem.TBL_MDL_KEY; // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    208        private String          rowKey                  ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    209        private String[]        colKeys                 ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    210        private String[]        rtnKeys                 ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    211        private String          encode                  = "UTF-8";      // 5.1.6.0 (2010/05/01) エンコード指定対応
    212
    213        private boolean         isTableOut              ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    214        private boolean         isOutParse              ;                       // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    215        private boolean         isMainTrans             = true;         // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    216
    217        /**
    218         * デフォルトコンストラクター
    219         *
    220         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    221         */
    222        public URLConnectTag() { super(); }             // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。
    223
    224        /**
    225         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    226         *
    227         * @og.rev 5.1.5.0 (2010/04/01) SOAP・DBTableModel出力対応
    228         * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は、DBTableModelが新規作成された処理でのみ行う。
    229         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    230         *
    231         * @return      後続処理の指示
    232         */
    233        @Override
    234        public int doStartTag() {
    235                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    236                if( !useTag() ) { return SKIP_BODY ; }
    237
    238                // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    239                if( rowKey != null || colKeys != null || rtnKeys != null ) {
    240                        isOutParse = true;
    241                        if( rowKey != null || colKeys != null ) {
    242                                isTableOut = true;
    243                                useMainTrans( isMainTrans );                    // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    244                                startQueryTransaction( tableId );
    245                        }
    246                }
    247
    248                // 5.1.5.0 (2010/04/01) SOAPの場合は、postKeyが指定されない。
    249                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    250                return postData == null ? EVAL_BODY_BUFFERED : SKIP_BODY ;
    251        }
    252
    253        /**
    254         * Taglibのタグ本体を処理する doAfterBody() を オーバーライドします。
    255         *
    256         * @return      後続処理の指示(SKIP_BODY)
    257         */
    258        @Override
    259        public int doAfterBody() {
    260                postData = getBodyString();
    261
    262                return SKIP_BODY ;
    263        }
    264
    265        /**
    266         * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。
    267         *
    268         * @og.rev 4.0.1.0 (2007/12/12) PostKeys,PostVals処理を追加
    269         * @og.rev 5.1.5.0 (2010/04/01) SOAP・DBTableModel出力対応
    270         * @og.rev 5.2.0.0 (2010/09/01) エラー処理でNullPointerExceptionが発生するバグを修正
    271         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    272         * @og.rev 6.3.8.0 (2015/09/11) FileUtil#getPrintWriter( OutputStream,String ) を使用。
    273         * @og.rev 6.9.0.0 (2018/01/31) URLConnect 廃止、HttpConnect に置き換えます。
    274         * @og.rev 6.9.0.1 (2018/02/05) IOException を、Throwable に変更して、すべてのｴﾗｰをキャッチするようにします。
    275         *
    276         * @return      後続処理の指示
    277         */
    278        @Override
    279        public int doEndTag() {
    280                debugPrint();           // 4.0.0 (2005/02/28)
    281
    282                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    283                if( !useTag() ) { return EVAL_PAGE ; }
    284
    285//              URLConnect conn = null;
    286                HttpConnect conn = null;                                                // 6.9.0.0 (2018/01/31) URLConnect 廃止、HttpConnect に置き換えます。
    287                ByteArrayOutputStream pipeOut = null;
    288                Writer outWriter = null;                                                // 6.3.8.0 (2015/09/11) rty の外に移動
    289                try {
    290                        conn = connect();
    291
    292                        // 出力先が、画面かファイルかを判断します。
    293                        // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    294                        if( isOutParse ) {
    295                        pipeOut = new ByteArrayOutputStream();
    296                                        // 6.3.8.0 (2015/09/11) FileUtil#getPrintWriter( OutputStream,String ) を使用。
    297                                        outWriter = FileUtil.getPrintWriter( pipeOut, "UTF-8" );                // 6.3.8.0 (2015/09/11)
    298                        }
    299                        else if( display ) {
    300                                outWriter = FileUtil.getNonFlushPrintWriter( pageContext.getOut() ) ;   // JspWriter の取得
    301                        }
    302                        else if( saveFile != null ) {
    303                                outWriter = FileUtil.getPrintWriter( new File( saveFile ),"UTF-8" );
    304                        }
    305
    306                        final String rtnData = conn.readData();         // 6.9.0.1 (2018/02/05)
    307
    308                        // 出力先が存在する場合。
    309                        if( outWriter != null ) {
    310                                // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..;
    311                                if( xslFile == null ) {
    312                                        outWriter.write( rtnData );
    313                                }
    314                                else {
    315                                        final XSLT xslt = new XSLT();
    316                                        xslt.setXslFile( xslFile );
    317                                        xslt.setOutFile( outWriter );
    318//                                      xslt.transform( conn.getReader() );
    319                                        xslt.transform( new StringReader( rtnData ) );          // 6.9.0.0 (2018/01/31) ﾘｰﾀﾞｰが取り出せないので、文字列から作成します。
    320                                        xslt.close();
    321                                }
    322                        }
    323                }
    324//              catch( final IOException ex ) {
    325                catch( final Throwable th ) {                                                   // 6.9.0.1 (2018/02/05)
    326                        final String errMsg = "データ取得中にエラーが発生しました。"      + CR
    327                                                + " url=[" + urlStr + "]"                                                       + CR
    328                                                // 5.2.0.0 (2010/09/01) エラー処理でNullPointerExceptionが発生するバグを修正
    329                                                + " message=[" + ( conn == null ? "NO_CONNECTION" : conn.getMessage() ) + "]" + CR
    330                                                + " Exception=[" + th.getMessage() + "]" ;
    331                        if( errNglctFlag ) { // 4.1.1.0 (2008/01/22) エラーを無視(標準エラー出力のみ)
    332                                LogWriter.log( errMsg );
    333                        }
    334                        else { // 通常は無視しない
    335                                throw new HybsSystemException( errMsg,th );
    336                        }
    337                }
    338                finally {
    339                        Closer.ioClose( outWriter );                                            // 6.3.8.0 (2015/09/11) finally に移動
    340//                      if( conn != null ) { conn.disconnect(); }
    341                }
    342
    343                // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    344                if( isOutParse ) {
    345                        // 6.3.8.0 (2015/09/11) AutoCloseableを使用したtry-with-resources構築に対応
    346                        try( final InputStream strm = new BufferedInputStream( new ByteArrayInputStream( pipeOut.toByteArray() ) ) ) {
    347                                parse( strm );
    348                        }
    349                        // 6.3.8.0 (2015/09/11) 今まで不要だった、IOException が発生。AutoCloseable のせい？。
    350                        catch( final IOException ex ) {         // catch は、close() されてから呼ばれます。
    351                                final String errMsg = "parse 処理中でエラーが発生しました。"   + CR
    352                                                        + "\t close() エラーです。"                                                   + CR
    353                                                        + "\t " + ex.getMessage()                                                       + CR ;
    354                                System.err.println( errMsg );
    355                        }
    356
    357                        if( isTableOut && table != null && !commitTableObject( tableId, table ) ) {
    358                                jspPrint( "URLConnectTag Query処理が割り込まれました。DBTableModel は登録しません。" );
    359                                return SKIP_PAGE ;
    360                        }
    361                }
    362
    363                return EVAL_PAGE ;
    364        }
    365
    366        /**
    367         * URLに対して接続を行います。
    368         *
    369         * @og.rev 5.1.6.0 (2010/05/01) エンコード指定対応
    370         * @og.rev 6.2.5.0 (2015/06/05) timeout属性追加
    371         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    372         * @og.rev 6.9.0.0 (2018/01/31) URLConnect 廃止、HttpConnect に置き換えます。
    373         *
    374         * @return 接続オブジェクト
    375         * @throws IOException 入出力エラーが発生したとき
    376         */
    377//      private URLConnect connect() throws IOException {
    378        private HttpConnect connect() throws IOException {
    379                if( useSystemUser ) { authUserPass = DEFAULT_USER; }
    380
    381                // 5.1.5.0 (2010/04/01) SOAP対応
    382                // SOAPの場合、PostDataは、SOAPConnectタグの中で生成します。
    383//              URLConnect conn = null;
    384                HttpConnect conn = null;                                                                        // 6.9.0.0 (2018/01/31)
    385                // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    386//              if( "SOAP".equalsIgnoreCase( method ) ) {
    387//                      if( soapNameSpace == null || soapNameSpace.isEmpty()
    388//                                      || soapMethodName == null || soapMethodName.isEmpty() ) {
    389//                              final String errMsg = "SOAP接続の場合、soapNameSpace及びsoapMethodNameは必ず指定して下さい。";
    390//                              throw new HybsSystemException( errMsg );
    391//                      }
    392//
    393//                      if( postData != null && postData.length() > 0 ) {
    394//                              conn = new SOAPConnect( urlStr,authUserPass, soapNameSpace, soapMethodName, postData );
    395//                      }
    396//                      else {
    397//                              conn = new SOAPConnect( urlStr,authUserPass, soapNameSpace, soapMethodName, keys, vals );
    398//                      }
    399//              }
    400//              else {
    401                        conn = new HttpConnect( urlStr,authUserPass );          // HttpConnect は、GET でも後付で引数を渡せます。
    402
    403                        conn.setDebug( isDebug() );
    404
    405                        if( keys != null ) {
    406                                for( int i=0; i<keys.length; i++ ) {
    407                                        conn.addRequestProperty( keys[i] , vals[i] );
    408                                }
    409                        }
    410
    411                        if( "POST".equalsIgnoreCase( method ) ) { conn.usePost( true ); }               // 6.9.0.1 (2018/02/05)
    412
    413//                      String urlEnc = XHTMLTag.urlEncode( keys,vals );
    414                        if( postKey != null ) { // 4.1.0.0 (2007/12/22)
    415//                              method = "POST";
    416//                              urlEnc = urlEnc + "&" + postKey + "=" + postData;       // &連結
    417                                conn.usePost( true );           // 6.9.0.1 (2018/02/05)
    418                                conn.addRequestProperty( postKey , postData );
    419                        }
    420
    421//                      if( ! "POST".equals( method ) ) { // 4.1.0.0 (2007/12/22)
    422//                              // String urlEnc = XHTMLTag.urlEncode( keys,vals );
    423//                              urlStr = XHTMLTag.addUrlEncode( urlStr,urlEnc );
    424//                      }
    425//                      conn = new URLConnect( urlStr,authUserPass );
    426
    427                        // if( postKey != null ) {
    428                        //      conn.setPostData( postKey,postData );
    429                        // }
    430//                      if( "POST".equals( method ) && keys != null && vals != null ) { // 4.1.0.0 (2007/12/22)
    431//                              conn.setPostData( urlEnc );
    432//                      }
    433//              }
    434
    435                // 4.0.0 (2007/07/25) プロキシの設定追加
    436                if( proxyHost != null ) {
    437                        conn.setProxy( proxyHost,proxyPort );
    438                }
    439
    440                // 5.1.6.0 (2010/05/01) エンコード指定対応
    441                if( encode != null && encode.length() > 0 ) {
    442                        conn.setCharset( encode );
    443                }
    444
    445                // 6.2.5.0 (2015/06/05) timeout属性追加
    446                if( timeout >= 0 ) {
    447                        conn.setTimeout( timeout );
    448                }
    449//              conn.connect();
    450
    451                return conn;
    452        }
    453
    454        /**
    455         * 出力データをパースし、DBTableModel及び属性パラメーターに分解します。
    456         * 現時点では、XMLデータのみパースすることが可能です。
    457         *
    458         * @og.rev 6.4.3.4 (2016/03/11) forループを、forEach メソッドに置き換えます。
    459         *
    460         * @param input インプットストリーム
    461         */
    462        private void parse( final InputStream input ) {
    463                final XML2TableParser parser = new XML2TableParser( input );
    464                parser.setTableCols( rowKey, colKeys );
    465                parser.setReturnCols( rtnKeys );
    466                parser.parse();
    467
    468                // DBTableModelを生成します。
    469                if( isTableOut ) {
    470                        table = DBTableModelUtil.makeDBTable( parser.getCols(), parser.getData(), getResource() );
    471                }
    472
    473                // 戻り値を取得し、Attributeに登録します。
    474                if( rtnKeys != null ) {
    475                        final Map<String,String> rtn = parser.getRtn();
    476                        // 6.4.3.4 (2016/03/11) forループを、forEach メソッドに置き換えます。
    477                        rtn.forEach( (k,v) -> setRequestAttribute( k,v ) );
    478                }
    479        }
    480
    481        /**
    482         * タグリブオブジェクトをリリースします。
    483         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    484         *
    485         * @og.rev 5.1.6.0 (2010/05/01) DBLastSqlの処理は、DBTableModelが新規作成された処理でのみ行う。
    486         * @og.rev 6.2.5.0 (2015/06/05) timeout属性追加
    487         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    488         */
    489        @Override
    490        protected void release2() {
    491                super.release2();
    492                urlStr                  = null;
    493                proxyHost               = null;         // 4.0.0 (2007/07/25)
    494                proxyPort               = -1;           // 4.0.0 (2007/07/25)
    495                keys                    = null;
    496                vals                    = null;
    497                xslFile                 = null;
    498                saveFile                = null;
    499                postKey                 = null;
    500                postData                = null;
    501                timeout                 = HybsSystem.sysInt( "URL_CONNECT_TIMEOUT" );   // 6.2.5.0 (2015/06/05) 新規追加
    502                useSystemUser   = true;
    503                authUserPass    = null;
    504                display                 = false;
    505                method                  = "GET";        // 4.1.0.0 (2007/12/22)
    506                errNglctFlag    = false;        // 4.1.1.0 (2008/01/22)
    507//              soapNameSpace   = null;         // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    508//              soapMethodName  = null;         // 5.1.5.0 (2010/04/01) SOAP対応  // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    509                table                   = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    510                tableId                 = HybsSystem.TBL_MDL_KEY; // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    511                rowKey                  = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    512                colKeys                 = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    513                rtnKeys                 = null;         // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    514                isTableOut              = false;        // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    515                isOutParse              = false;        // 5.1.5.0 (2010/04/01) DBTableModel出力対応
    516                encode                  = "UTF-8";      // 5.1.6.0 (2010/05/01) エンコード指定対応
    517                isMainTrans             = true;         // 5.1.6.0 (2010/05/01) DBLastSqlの処理の見直し
    518        }
    519
    520        /**
    521         * 【TAG】アクセスする接続先ＵＲＬを指定します。
    522         *
    523         * @og.tag
    524         * 接続するＵＲＬを指定します。(例：http:// ･･････)
    525         * ?以降のパラメータが含まれていても構いません。
    526         * このURL に、keys,vals で指定されたパラメータも追加されます。
    527         *
    528         * @param       url     接続先
    529         */
    530        public void setUrl( final String url ) {
    531                urlStr = nval( getRequestParameter( url ),urlStr );
    532        }
    533
    534        /**
    535         * 【TAG】プロキシ経由で接続する場合の、プロキシホスト名を指定します。
    536         *
    537         * @og.tag
    538         * 接続先が、プロキシ経由の場合、プロキシのホスト名を指定します。
    539         * 例：proxy.opengion.org
    540         *
    541         * @param       host    プロキシホスト名
    542         */
    543        public void setProxyHost( final String host ) {
    544                proxyHost = nval( getRequestParameter( host ),proxyHost );
    545                useSystemUser = false;  // プロキシ接続時は、システムユーザーは使えません。
    546        }
    547
    548        /**
    549         * 【TAG】プロキシ経由で接続する場合の、プロキシポート番号を指定します。
    550         *
    551         * @og.tag
    552         * 接続先が、プロキシ経由の場合、プロキシのポート番号を指定します。
    553         * 例：8080
    554         *
    555         * @param       port    プロキシポート番号
    556         */
    557        public void setProxyPort( final String port ) {
    558                proxyPort = nval( getRequestParameter( port ),proxyPort );
    559        }
    560
    561        /**
    562         * 【TAG】アクセスパラメータキーをCSV形式で複数指定します。
    563         *
    564         * @og.tag
    565         * アクセスする ＵＲＬに追加するパラメータのキーを指定します。
    566         * CSV形式で複数指定できます。
    567         * vals 属性には、キーに対応する値を、設定してください。
    568         * 例:<b>keys="command,SYSTEM_ID"</b> vals="NEW,GE"
    569         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
    570         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    571         *
    572         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    573//       * [SOAP対応]
    574//       * SOAPによるWebサービスの呼び出しの場合、keys,valsに指定された値より、env:Envelopタグを
    575//       * rootタグとするXMLデータを生成します。
    576//       * (BODY部分に直接XMLデータを出力することも可能です。)
    577//       * この際、項目名に'&gt;'を含めることで、階層的なXMLデータを表現することができます。
    578//       * 例)
    579//       *   [属性定義]
    580//       *   keys="param0&gt;AAA,param0&gt;BBB,param1&gt;CCC,DDD"
    581//       *   vals="v1,v2,v3,v4"
    582//       *   [XMLデータ(※データ部のみ)]
    583//       *   &lt;param0&gt;
    584//       *     &lt;AAA&gt;v1&lt;/AAA&gt;
    585//       *     &lt;BBB&gt;v2&lt;/BBB&gt;
    586//       *   &lt;/param0&gt;
    587//       *   &lt;param1&gt;
    588//       *     &lt;CCC&gt;v3&lt;/CCC&gt;
    589//       *   &lt;/param1&gt;
    590//       *   &lt;DDD&gt;v4&lt;/DDD&gt;
    591//       * 項目の値を"null"とすることで、XMLで言うところの「xsi:nil=\"true\"」のデータを表現すること
    592//       * もできます。
    593//       * また、キー名の先頭を'&#064;'にすることで、項目名に名前空間のPREFIXを付加することができます。
    594//       * 一般的には、JavaやRubyで実装されたWebサービスを呼び出しする場合は、必要ありませんが、
    595//       * .NETで実装されたWebサービスを呼び出しする場合は、各項目にPREFIXを付与しないと、正しく
    596/        * パラメーターを渡すことができません。
    597//       * ※現時点では、keysの階層定義は、2階層まで対応しています。
    598//       *   3階層以上のXML構造を定義する場合は、postFile属性によるファイル指定又は、Body部分で直接
    599//       *   XMLデータを記述して下さい。
    600         *
    601         * @param       key リンク先に渡すキー (CSV形式)
    602         * @see         #setVals( String )
    603         */
    604        public void setKeys( final String key ) {
    605                keys = getCSVParameter( key );
    606        }
    607
    608        /**
    609         * 【TAG】keys属性に対応する値をCSV形式で複数指定します。
    610         *
    611         * @og.tag
    612         * キーに設定した値を、CSV形式で複数して出来ます。
    613         * 指定順序は、キーと同じにしておいて下さい。
    614         * 例:<b>keys="command,SYSTEM_ID"</b> vals="NEW,GE"
    615         * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。
    616         * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。
    617         *
    618         * @param       val 設定値 keys属性に対応する値(CSV形式)
    619         * @see         #setKeys( String )
    620         */
    621        public void setVals( final String val ) {
    622                vals = getCSVParameter( val );
    623        }
    624
    625        /**
    626         * 【TAG】送信メソッド[GET/POST]を指定します(初期値:GET)。
    627//       * 【TAG】送信メソッド[GET/POST/SOAP]を指定します(初期値:GET)。
    628         *
    629         * @og.tag
    630         * URLConnectTagのメソッドの初期設定はGETです。
    631         * ここで"POST"(大文字)を指定するとkyes,valsの値セットをPOSTで送信します。
    632         * (postKeyが設定されている場合はこの値に関係なくPOSTです)
    633         *
    634         * @og.rev 4.1.0.0 (2007/12/22) 新規作成
    635         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    636         *
    637         * @param       post_get        送信メソッド [GET/POST]
    638//       * @param       post_get        送信メソッド [GET/POST/SOAP]
    639         */
    640        public void setMethod ( final String post_get ) {
    641                method = nval( getRequestParameter( post_get ), method );
    642        }
    643
    644        /**
    645         * 【TAG】Basic認証で接続するユーザーにSYSTEMユーザーを使用するかどうか[true/false]を指定します(初期値:true)。
    646         *
    647         * @og.tag
    648         * useSystemUser="true"(初期値) の場合、URL接続時のコネクションに、Basic認証を
    649         * 使用しますが、その時のユーザーにシステムユーザー(SYSTEM)を使用します。
    650         * useSystemUser="false"の場合は、authUserPass で指定したユーザー：パスワードを
    651         * 使用します。authUserPass で、何も指定されなかった場合は、Basic認証を使用しません。
    652         * 初期値は、true(SYSTEMユーザー認証する) です。
    653         *
    654         * @param   flag SYSTEMユーザー認証 [true:SYSTEMユーザー認証する/false:この接続のユーザーで認証する]
    655         * @see #setAuthUserPass( String )
    656         */
    657        public void setUseSystemUser( final String flag ) {
    658                useSystemUser = nval( getRequestParameter( flag ),useSystemUser );
    659        }
    660
    661        /**
    662         * 【TAG】Basic認証を使用して接続する場合のユーザー:パスワードを指定します(初期値:null)。
    663         *
    664         * @og.tag
    665         * 接続時のユーザーとパスワードを、USER:PASSWD 形式で指定します。
    666         * useSystemUser="false"の場合は、ここで指定したユーザーとパスワードを使用します。
    667         * その場合に、何も指定しない場合は、Basic認証を使用しません。
    668         *
    669         * @param       userPass        ユーザーとパスワード (USER:PASSWD形式)
    670         * @see #setUseSystemUser( String )
    671         */
    672        public void setAuthUserPass( final String userPass ) {
    673                authUserPass = nval( getRequestParameter( userPass ),authUserPass );
    674        }
    675
    676        /**
    677         * 【TAG】接続の結果を表示する場合にXSLT変換する場合のファイルを指定します。
    678         *
    679         * @og.tag
    680         *
    681         * 接続先のデータが、XML形式の場合、そのままでは、画面出力できない場合が
    682         * あります。通常は、HTML形式に変換しますが、その変換に、 XSL ファイルを
    683         * 指定することが可能です。
    684         * display="true" の場合や、saveFile を指定した場合に、適用されます。
    685         *
    686         * @param       file    XSLTファイル
    687         * @see #setSaveFile( String )
    688         * @see #setDisplay( String )
    689         */
    690        public void setXslFile( final String file ) {
    691                xslFile = HybsSystem.url2dir( nval( getRequestParameter( file ),xslFile ) );
    692        }
    693
    694        /**
    695         * 【TAG】接続の結果を表示するかどうかを指定します(初期値:false)。
    696         *
    697         * @og.tag
    698         * true で、接続結果を表示します。 false では、何も表示しません(初期値:false)
    699         * 接続結果を表示する使い方より、admin 画面に接続して、キャッシュクリアするような
    700         * 使い方が多いと考え、初期値は、false になっています。
    701         * xslFile が指定されている場合、XSLT変換して画面表示します。
    702         * display="true" と、saveFile を併用することはできません。
    703         *
    704         * @param       flag    結果表示 [true:する/false:しない]
    705         * @see #setSaveFile( String )
    706         * @see #setXslFile( String )
    707         */
    708        public void setDisplay( final String flag ) {
    709                display = nval( getRequestParameter( flag ),display );
    710
    711                if( display && saveFile != null ) {
    712                        final String errMsg = "display=\"true\" と、saveFile を併用することはできません。";
    713                        throw new HybsSystemException( errMsg );
    714                }
    715        }
    716
    717        /**
    718         * 【TAG】接続の結果をファイルに保存します。
    719         *
    720         * @og.tag
    721         * 接続先のデータを受け取って、ファイルに保存します。その場合、
    722         * xslFile が指定されている場合、XSLT変換してセーブします。
    723         * display="true" と、saveFile を併用することはできません。
    724         *
    725         * @param       file    保存先ファイル
    726         * @see #setXslFile( String )
    727         * @see #setDisplay( String )
    728         */
    729        public void setSaveFile( final String file ) {
    730                saveFile = HybsSystem.url2dir( nval( getRequestParameter( file ),saveFile ) );
    731
    732                if( display ) {
    733                        final String errMsg = "display=\"true\" と、saveFile を併用することはできません。";
    734                        throw new HybsSystemException( errMsg );
    735                }
    736        }
    737
    738        /**
    739         * 【TAG】POST を使って、postFile属性のファイル内容を送信する時のキーを指定します。
    740         *
    741         * @og.tag
    742         * 接続先にパラメータ(引数)を投げる場合に、POST を使用できます。
    743         * そのときの キーをここで指定します。
    744         * POSTするデータは、postFileで指定されたファイルか、BODY部に記述された文字列です。
    745         *
    746         * @param       key     ファイル内容送信キー
    747         * @see  #setPostFile( String )
    748         */
    749        public void setPostKey( final String key ) {
    750                postKey = nval( getRequestParameter( key ),postKey );
    751        }
    752
    753        /**
    754         * 【TAG】接続タイムアウト時間を(秒)で指定します
    755         *              (初期値:URL_CONNECT_TIMEOUT[={@og.value SystemData#URL_CONNECT_TIMEOUT}])。
    756         *
    757         * @og.tag
    758         * 実際には、java.net.URLConnection#setConnectTimeout(int) に 1000倍して設定されます。
    759         * 0 は、無限のタイムアウト、マイナスは、設定しません。(つまりJavaの初期値のまま)
    760         * (初期値:システム定数のURL_CONNECT_TIMEOUT[={@og.value SystemData#URL_CONNECT_TIMEOUT}])。
    761         *
    762         * @og.rev 6.2.5.0 (2015/06/05) timeout属性追加
    763         *
    764         * @param       tout    タイムアウト時間(秒) (ゼロは、無制限)
    765         * @see         org.opengion.fukurou.util.HttpConnect#setTimeout(int)
    766         * @see         java.net.URLConnection#setConnectTimeout(int)
    767         */
    768        public void setTimeout( final String tout ) {
    769                timeout = nval( getRequestParameter( tout ),timeout );
    770        }
    771
    772        /**
    773         * 【TAG】POST を使って、postFile属性のファイル内容を送信します。
    774         *
    775         * @og.tag
    776         * 接続先にパラメータ(引数)を投げる場合に、POST を使用できます。
    777         * そのときの 送信データのファイルをここで指定します。
    778         * postKey のみ指定されて、postFile が指定されない場合は、BODY部を送信します。
    779//       * SOAPによる呼び出しの場合は、ここ(BODY部での定義を含む)で、送信するXMLデータを
    780//       * 定義することができます。
    781         *
    782         * @og.rev 6.4.5.1 (2016/04/28) FileStringのコンストラクター変更
    783         * @og.rev 6.4.5.2 (2016/05/06) fukurou.util.FileString から、fukurou.util.FileUtil に移動。
    784         * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    785         *
    786         * @param       file    送信ファイル
    787         * @see  #setPostKey( String )
    788         */
    789        public void setPostFile( final String file ) {
    790                final String postFile = nval( getRequestParameter( file ),null );
    791
    792                if( postFile != null ) {
    793                        // 6.4.5.1 (2016/04/28) FileStringのコンストラクター変更
    794                        postData = FileUtil.getValue( HybsSystem.url2dir( postFile ) , HybsConst.UTF_8 );
    795                }
    796        }
    797
    798        /**
    799         * 【TAG】(通常は使いません) 接続エラーを無視する場合にtrueとします(初期値false)。
    800         *
    801         * @og.tag
    802         * trueにするとConnectで発生したエラーを投げずに処理を続行します。
    803         * (標準エラー出力にエラー内容は出力されます)
    804         * 接続エラーが発生しても処理を中断したくない場合に設定します。
    805         *
    806         * @og.rev 4.1.1.0 (2008/01/22) 新規追加
    807         *
    808         * @param       flag    エラーを無視するか [true:する/false:しない]
    809         */
    810        public void setErrNeglect( final String flag ) {
    811                errNglctFlag = nval( getRequestParameter( flag ), errNglctFlag );
    812        }
    813
    814//      /**
    815//       * 【TAG】SOAPによるWebサービスの呼び出しで、メソッド名及びパラメーターの名前空間を指定します。
    816//       *
    817//       * @og.tag
    818//       * SOAPによるWebサービスの呼び出しで、メソッド名及びパラメーターの名前空間を指定します。
    819//       * この名前空間は、通常WSDLファイルのdescriptionsタグのtargetNamespace属性の値により
    820//       * 定義されます。
    821//       *
    822//       * @og.rev 5.1.5.0 (2010/04/01) 新規追加
    823//       * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    824//       *
    825//       * @param       ns      名前空間
    826//       */
    827//      public void setSoapNameSpace( final String ns ) {
    828//              soapNameSpace = nval( getRequestParameter( ns ), soapNameSpace );
    829//      }
    830//
    831//      /**
    832//       * 【TAG】SOAPによるWebサービスの呼び出しで、メソッド名を指定します。
    833//       *
    834//       * @og.tag
    835//       * SOAPによるWebサービスの呼び出しで、メソッド名を指定します。
    836//       * WSDLファイルで定義されるoperationタグのname属性の値に相当します。
    837//       *
    838//       * @og.rev 5.1.5.0 (2010/04/01) 新規追加
    839//       * @og.rev 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    840//       *
    841//       * @param       method  メソッド名
    842//       */
    843//      public void setSoapMethodName( final String method ) {
    844//              soapMethodName = nval( getRequestParameter( method ), soapMethodName );
    845//      }
    846
    847        /**
    848         * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します
    849         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
    850         *
    851         * @og.tag
    852         * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に
    853         * 渡す場合に、通常は、session を利用します。その場合の登録キーです。
    854         * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、
    855         * この tableId 属性を利用して、メモリ空間を分けます。
    856         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
    857         *
    858         * @param       id テーブルID (sessionに登録する時のID)
    859         */
    860        public void setTableId( final String id ) {
    861                tableId   = nval( getRequestParameter( id ),tableId );
    862        }
    863
    864        /**
    865         * 【TAG】結果のXMLをDBTableModelに変換する際に、行のキーとなるタグ名を指定します。
    866         *
    867         * @og.tag
    868         * 結果のXMLを表形式に変換する際に、行のキーとなるタグ名を指定します。
    869         * このキーのタグを基点として、colKeysで指定されたタグの値を各項目の値として取り込みます。
    870         * (詳細は、colKeysのタグリブ属性マニュアルを参照して下さい。)
    871         *
    872         * @param       key 行のキーとなるタグ名
    873         * @see #setColKeys( String )
    874         */
    875        public void setRowKey( final String key ) {
    876                rowKey = nval( getRequestParameter( key ),rowKey );
    877        }
    878
    879        /**
    880         * 【TAG】結果のXMLをDBTableModelに変換する際に、項目のキーとなるタグ名の一覧を指定します。
    881         *
    882         * @og.tag
    883         * 結果のXMLをDBTableModelに変換する際に、項目のキーとなるタグ名の一覧を指定します。
    884         * rowKeyで行を、colKeysで項目を表現し、rowKeyのタグで囲われた固まりを1つの行とみなします。
    885         * このため、colKeysに指定されたキーのタグでも、rowKeyの外にある場合は、取り込み対象となりません。
    886         *
    887         * また、キーにPARENT_TAG、PARENT_FULL_TAGを指定することで、rowKeyで指定されたタグの
    888         * 直近の親タグ、及びフルの親タグ名(親タグの階層を"&gt;[タグA]&gt;[タグB]&gt;[タグC]&gt;"で表現)を
    889         * 取得することができます。
    890         *
    891         * @param       keys 項目キー タグ名の一覧(CSV形式)
    892         */
    893        public void setColKeys( final String keys ) {
    894                colKeys = StringUtil.csv2Array( getRequestParameter( keys ) );
    895        }
    896
    897        /**
    898         * 【TAG】結果のXMLを変換する際に、パラメータ(Attributes)として取り込むキーの一覧を指定します。
    899         *
    900         * @og.tag
    901         * 結果のXMLを変換する際に、パラメータ(Attributes)として取り込むキーの一覧を指定します。
    902         * ここで指定されたキーのタグの値を取り出し、{&#064;XX}形式(Attributes)として処理できるようにします。
    903         *
    904         * @param       keys 戻り値キー パラメーター(Attributes)のキーとなるタグ名の一覧(CSV形式)
    905         */
    906        public void setRtnKeys( final String keys ) {
    907                rtnKeys = StringUtil.csv2Array( getRequestParameter( keys ) );
    908        }
    909
    910        /**
    911         * 【TAG】データの入出力のエンコードを指定します(初期値:UTF-8)。
    912         *
    913         * @og.tag
    914         * データの入出力のエンコードを指定します。
    915         * 初期値は、"UTF-8"です。
    916         *
    917         * @og.rev 5.1.6.0 (2010/05/01) 新規作成
    918         * @param       enc     エンコード
    919         */
    920        public void setEncode( final String enc ) {
    921                encode = nval( getRequestParameter( enc ), encode );
    922        }
    923
    924        /**
    925         * タグの名称を、返します。
    926         * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。
    927         *
    928         * @og.rev 4.0.0.0 (2005/01/31) 新規追加
    929         *
    930         * @return  タグの名称
    931         * @og.rtnNotNull
    932         */
    933        @Override
    934        protected String getTagName() {
    935                return "urlConnect" ;
    936        }
    937
    938        /**
    939         * 【TAG】(通常は使いません)タグで処理される処理がメインとなるトランザクション処理かどうかを指定します(初期値:true)。
    940         *
    941         * @og.tag
    942         * この値は、ファイルダウンロード処理に影響します。この値がtrueに指定された時にcommitされたDBTableModelが
    943         * ファイルダウンロードの対象の表になります。
    944         *
    945         * このパラメーターは、通常、各タグにより実装され、ユーザーが指定する必要はありません。
    946         * 但し、1つのJSP内でDBTableModelが複数生成される場合に、前に処理したDBTableModelについてファイルダウンロードをさせたい
    947         * 場合は、後ろでDBTableModelを生成するタグで、明示的にこの値をfalseに指定することで、ファイルダウンロード処理の対象から
    948         * 除外することができます。
    949         *
    950         * @og.rev 5.1.6.0 (2010/05/01) 新規作成
    951         *
    952         * @param  flag メイントランザクションかどうか [true:メイン/false:その他]
    953         */
    954        public void setMainTrans( final String flag ) {
    955                isMainTrans = nval( getRequestParameter( flag ),isMainTrans );
    956        }
    957
    958        /**
    959         * このオブジェクトの文字列表現を返します。
    960         * 基本的にデバッグ目的に使用します。
    961         *
    962         * @return このクラスの文字列表現
    963         * @og.rtnNotNull
    964         */
    965        @Override
    966        public String toString() {
    967                return ToString.title( this.getClass().getName() )
    968                                .println( "VERSION"                     ,VERSION                )
    969                                .println( "method"                      ,method                 )
    970                                .println( "urlStr"                      ,urlStr                 )
    971                                .println( "keys"                        ,StringUtil.array2csv( keys ) )
    972                                .println( "vals"                        ,StringUtil.array2csv( vals ) )
    973                                .println( "proxyHost"           ,proxyHost              )
    974                                .println( "proxyPort"           ,proxyPort              )
    975                                .println( "timeout"                     ,timeout                )               // 6.2.5.0 (2015/06/05) 新規追加
    976                                .println( "useSystemUser"       ,useSystemUser  )
    977                                .println( "authUserPass"        ,authUserPass   )
    978                                .println( "display"                     ,display                )
    979                                .println( "postKey"                     ,postKey                )
    980                                .println( "postData"            ,postData               )
    981                                .println( "xslFile"                     ,xslFile                )
    982                                .println( "saveFile"            ,saveFile               )
    983                                .println( "errNglctFlag"        ,errNglctFlag   )
    984//                              .println( "soapNameSpace"       ,soapNameSpace  )               // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    985//                              .println( "soapMethodName"      ,soapMethodName )               // 6.9.0.0 (2018/01/31) SOAPConnect 廃止に伴う修正
    986                                .println( "tableId"                     ,tableId                )
    987                                .println( "rowKey"                      ,rowKey                 )
    988                                .println( "colKeys"                     ,StringUtil.array2csv( colKeys ) )
    989                                .println( "rtnKeys"                     ,StringUtil.array2csv( rtnKeys ) )
    990                                .println( "Other..."            ,getAttributes().getAttribute() )
    991                                .fixForm().toString() ;
    992        }
    993}