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