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