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 }