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