|
//こいつがコントロールから呼び出される。
public OperationInfo getOperationInfo(String pageID, String formID, Hashtable in)
throws SAXException, IllegalAccessException, ClassNotFoundException,
InstantiationException, IOException, Exception {
try{
Element element = getPageInfo(pageID);
if (element == null) {
Utilities.log( Log.ERR, "取得失敗を旨とするログ1" );
return null;
}
element = getFormInfo(element, formID);
if (element == null) {
Utilities.log( Log.ERR, "取得失敗を旨とするログ2" );
return null;
}
return getOperationInfo(element, in);
}catch( Exception e ){
Utilities.log( Log.ERR, "getOperationInfo(p3) error" + e.getMessage() ); <<-- ☆このメッセージはログに出ている
e.printStackTrace();
throw e; <<-- ☆読み直し処理をすっ飛ばしているのは例外のマタナゲのため
}
}
private OperationInfo getOperationInfo(Element form, Hashtable in) {
String session = null;
String direct = null;
String className = null;
String method = null;
Hashtable next = new Hashtable();
String id = null;
String value = null;
boolean opeExist = false;
for (Enumeration e = in.keys(); e.hasMoreElements();) {
id = (String) e.nextElement();
value = (String) in.get(id);
NodeList nodeList = form.getChildNodes();
if( nodeList.getLength() == 0 ){
Utilities.log( Log.ERR, "ID取得失敗を旨とするログ3" );
}
for (int i = 0; i < nodeList.getLength(); i++) {
if (Node.ELEMENT_NODE != nodeList.item(i).getNodeType()) {
continue;
}
Element element = (Element) nodeList.item(i);
if (!getAttribute(element, "id").equals(id) || !getAttribute(element, "value").equals(value)) {
continue;
}
opeExist = true;
session = getAttribute(element, "session");
direct = getAttribute(element, "direct");
nodeList = element.getChildNodes();
if( nodeList.getLength() == 0 ){
Utilities.log( Log.ERR, "値取得失敗を旨とするログ4" );
}
for (int j = 0; j < nodeList.getLength(); j++) {
if (Node.ELEMENT_NODE != nodeList.item(j).getNodeType()) {
continue;
}
element = (Element) nodeList.item(j);
NodeList textNode = element.getChildNodes();
Text text = (Text) textNode.item(0);
if (element.getNodeName().equals("class")) {
className = text.getNodeValue();
method = getAttribute(element, "method");
} else if (element.getNodeName().equals("next")) {
//読み直し方式を採用した理由が、getAttribute() がなんらかのタイミングで
//正常動作しないと判断したことによるものと思われる。
String ret = getAttribute(element, "return");
//ここで ret の null チェックを行っているのでロジック上
//第一引数に null が渡ることは有り得ないが、実機検証はしてない。
if (ret != null) {
next.put(ret, text.getNodeValue());
} else {
next.put("0", text.getNodeValue());
}
}
}
break;
}
if (!next.isEmpty()) {
break;
}
}
if (next.isEmpty()) {
if( opeExist ){
Utilities.log( Log.ERR, "ログ5" );
}else{
Utilities.log( Log.ERR, "ログ6" );
}
return null;
}
return new OperationInfo(id, value, session, Boolean.valueOf(direct).booleanValue(), className, method, next);
}
とりあえず、あまり伏せてないがほぼ全文。
|