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