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