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