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