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 *     <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 *     />
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 *                 直近の親タグ、及びフルの親タグ名(親タグの階層を">[タグA]>[タグB]>[タグC]>"で表現)を
113 *                 取得することができます。
114 * rtnKeys       : XMLのタグキーを指定して値を取り出します。取り出した値は、{@XX}形式で処理することが可能です。
115 * encode        : データの入出力を行うエンコードを指定します。
116 *
117 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します)
118 *         POSTデータを記述します。
119 *
120 * ●Tag定義:
121 *   <og:urlConnect
122 *       url              ○【TAG】アクセスする URL を指定します(必須)(必須)。
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 *   >   ... Body ...
154 *   </og:urlConnect>
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&period=5000&command=NEW&timerTask=org.opengion.hayabusa.report.ReportDaemon&name=ReportDaemon  デーモン起動
165 * http://localhost:8823/gf/jsp/REP08/result.jsp?cmd=CANCEL&period=5000&command=NEW&timerTask=org.opengion.hayabusa.report.ReportDaemon&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】アクセスする接続先URLを指定します。
522         *
523         * @og.tag
524         * 接続するURLを指定します。(例: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         * アクセスする URLに追加するパラメータのキーを指定します。
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}