C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[12]: Hashtable#putで不定期に例外発生


(過去ログ 21 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■9192 / inTopicNo.1)  Hashtable#putで不定期に例外発生
  
□投稿者/ mあ (117回)-(2007/10/20(Sat) 23:47:54)

分類:[Java] 

2007/10/20(Sat) 23:52:01 編集(投稿者)

Java web
本番環境:JRE1.4.2 WEB-SPHERE5.1
客先の開発環境:JRE1.4.2 WEB-SHPERE5.1
こちらの開発環境:JRE1.2 WEB-SHEPRE3.5


<page id="GAMEN01">
  <button name="SUBMIT">
     <class method="xxxUpdate">jp.co.xxx.UpdateClass</class>
     <next value="0">GAMEN03</next>
     <next value="1">GAMEN05</next>
  </button>
  <button name="COMMIT">
    <class ...</class>
    <next ...</next>
  </button>
  ...
</page>
<page ...</page>

上記XMLを内部エンティティクラスに落として、<class>タグの#text を生成して、method を呼び出した
結果が 0 なら GAMEN03 にポストバックして クライアントの Web 画面に戻す、なんて処理があります。
(...は省略しただけなので XML は構文として正しく記述されています)

XMLは、1ファイルだけで、<page>タグは30個くらいあります。
画面遷移のパターンとしては、500パターンくらいです。

このXMLをサーバー起動時に1度だけ読み込み、DOMツリーとしてセッション変数に保存して、画面遷移
情報が必要になるたびに毎回上から下まで全ノードを走査し必要な情報を取得しています。

必要な画面情報は、コントロールクラスから、<page>/<button> 各タグの id と name を渡すことで、
DOMツリーを走査して一致するノードから、<class>/<next> のタグ情報を Entity クラスに格納して
結果として返しています。
で唯一<next>タグだけ1画面の1ボタン機能で複数個存在するのですが、このとき、内部で、
Hashtableを作成しています。

で漠然としすぎる質問なのですが、
Hashtable#put で1年に1回ほど落ちる現象が出ています。
スタックトレースも put が悪いとあり、そのソースコードは以下のようになっています。

 String value = (String)nextNode.getValue("value");
 String text = (String)nextNode.textValue();
 if (value != null) nextHash.put(value, text);
 else nextHash.put("0", text);

つまり、Hashtable#put(null,"NullPointerException"); なら、必ず NullPo が出るのですが、
第一引数が null の場合は、デフォルトの文字列で設定されるので、null が渡される可能
性は有り得ない状況です。

で、Hashtable#put で他に NullPo が出る場合はどのような状況が考えられるのか?
という質問です。

宜しくお願いします。




引用返信 編集キー/
■9193 / inTopicNo.2)  Re[1]: Hashtable#putで不定期に例外発生
□投稿者/ mあ (118回)-(2007/10/21(Sun) 00:41:14)
2007/10/23(Tue) 16:03:54 編集(投稿者)

こっそり削除。。。出直します。
引用返信 編集キー/
■9194 / inTopicNo.3)  Re[2]: Hashtable#putで不定期に例外発生
□投稿者/ も (6回)-(2007/10/21(Sun) 03:04:53)
No9193 (mあ さん) に返信
※私自身は学生なので,お金を貰っていない立場から書かせていただきます

今回の件は「問題の再現性が非常に低い」のに対し「問題の発生は致命的」であることが原因の問題だと思います.
対策としては大きく次の,
 1.再現性の低い問題の原因を調査し,原因に対処することで耐障害性を上げる
   (特定言語風に言うと「ローカルのTry〜Catch〜Finallyで例外に対処する」)
 2,システムの耐障害性を向上させるために,バックアップ機構を取り入れる
   ((略)風に言うと「アプリケーショングローバルのTry〜Catch〜Finallyで例外に対処する」)
2点があると思われます.

一般的な方法は良く知りませんが,たとえばWindowsを大きなシステムとしてみた場合.
後者のシステム全体の耐障害性を向上させているように見えます.
局所的な問題を解決するよりも,より包括的な部分で問題を解決する方向で考えてみてはいかがでしょうか?


※学生って気分が楽なので安直な考えしか生まれないわけで(ry
引用返信 編集キー/
■9197 / inTopicNo.4)  Re[3]: Hashtable#putで不定期に例外発生
□投稿者/ 中博俊@管理人 (6回)-(2007/10/21(Sun) 11:07:48)
中博俊@管理人 さんの Web サイト
例外種類、例外メッセージ、スタックトレースくれい
今回の場合には例外ひっ捕まえて再作成しても問題ないんじゃない?
引用返信 編集キー/
■9202 / inTopicNo.5)  Re[4]: Hashtable#putで不定期に例外発生
□投稿者/ nagise (6回)-(2007/10/21(Sun) 17:55:12)
スタックトレースがないことにはなんとも。
同期関連などのような気もしますが、断片的な情報からは断定しにくいところですね。
引用返信 編集キー/
■9206 / inTopicNo.6)  Re[5]: Hashtable#putで不定期に例外発生
□投稿者/ mあ (119回)-(2007/10/21(Sun) 22:00:43)
2007/10/21(Sun) 22:54:08 編集(投稿者)
2007/10/21(Sun) 22:23:57 編集(投稿者)

この手の質問で一番いけないのがネタの後出しですが、ごめんなさい。

皆様、助言ありがとうございます。

>対策としては大きく次の,
> 1.再現性の低い問題の原因を調査し,原因に対処することで耐障害性を上げる
>   (特定言語風に言うと「ローカルのTry〜Catch〜Finallyで例外に対処する」)

耳が痛いです。
通常Hashtable#putでは、第一引数 null 以外の「Object」型であれば落ちる可能性が
無いので、指摘の try {} は入っていません。大抵のフレームワークの場合に
フレームワーク専用の例外をキャッチする場所ってのは、フレームワークのコントロール
部にあたりますが、この事象でもそこまでぶっ飛んでしまっていまして、「再作成」の
ロジックをすっ飛ばしてしまっております。で、再現性が低い・開発マシンではまず出ない
出したい状況・サーバーの負荷もわからない、という状況であります。


> 2,システムの耐障害性を向上させるために,バックアップ機構を取り入れる
>   ((略)風に言うと「アプリケーショングローバルのTry〜Catch〜Finallyで例外に対処する」)
>2点があると思われます.

そうですね、バックアップとして再読み込み機構が備わっているのですが、DOMツリー取得がNGの時は
再読み込みでもOKだと思いますが、DOMツリー自体は正常に取れているように思える(推測です)
のです。で、再読み込み処理は当然大外のcatch まで例外がぶっ飛んでいるのですっ飛ばされている
状況だったりします。


>※学生って気分が楽なので安直な考えしか生まれないわけで(ry
学生とか仕事して無いとかそんなもん全然関係無いです。助言いただけるだけでも感謝しています。


>例外種類、例外メッセージ、スタックトレースくれい
>今回の場合には例外ひっ捕まえて再作成しても問題ないんじゃない?

明日UPします。が、本当に情けないくらい悲しいスタックトレースですけど・・・


>スタックトレースがないことにはなんとも。
>同期関連などのような気もしますが、断片的な情報からは断定しにくいところですね。

私に何も知識を与えられていない情況でこれ直せ、ってことでサーバーログもらったときは
最初に同期を考えました。ですが、素のまだローカル変数状態のHashtableで同期もなんも
無いだろう、というわけのわからん状態です。最終的には、エンティティのインスタンス
変数となるので、呼び出し元が受け取った以降で参照されるときには同期の可能性も捨て
切れないのですが、ソースを総なめしましたが、PUTが行われるタイミングでは、PUTとGET
が同時に発生する場所ではありませんでした。

では明日、スタックトレースを載せます。

例外は、NullPointerException です。
オーバーロードメソッド2つ経由して、1つ目で<page>/<button>タグの検索、
2つ目で、<button>の子要素の解析とそれらの情報を格納するEntity の作成。





引用返信 編集キー/
■9208 / inTopicNo.7)  Re[6]: Hashtable#putで不定期に例外発生
□投稿者/ 中博俊@管理人 (9回)-(2007/10/21(Sun) 23:52:46)
中博俊@管理人 さんの Web サイト
>例外は、NullPointerException です。

そんな例外ない罠
引用返信 編集キー/
■9215 / inTopicNo.8)  Re[7]: Hashtable#putで不定期に例外発生
□投稿者/ mあ (120回)-(2007/10/22(Mon) 10:40:00)
2007/10/22(Mon) 10:40:41 編集(投稿者)
2007/10/22(Mon) 10:40:35 編集(投稿者)

<pre><pre>こっちはトレースログ:
83,420,760/156,498,432 この数値は、空きメモリ/全体メモリ

09 22 21:55:31.940 INFO            **** START kaisha.jp.busho.ka.BaseController 10.240.129.16 83,420,760/156,498,432 null  ****
09 22 21:55:31.942 DEBUG  LBhUTAvP 操作情報取得開始。
09 22 21:55:31.943 ERROR           getOperationInfo(p3) errornull
09 22 21:55:31.945 ERROR  LBhUTAvP Fatal Error.
09 22 21:55:31.945 ERROR  Fatal Error.
java.lang.NullPointerException
	at java.util.Hashtable.put(Hashtable.java(Compiled Code))
	at kaisha.jp.busho.ka.PageInfo.getOperationInfo(PageInfo.java(Compiled Code))
	at kaisha.jp.busho.ka.PageInfo.getOperationInfo(PageInfo.java(Compiled Code))
	at kaisha.jp.busho.ka.BaseController.doPost(BaseController.java(Compiled Code))
	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
	at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))
	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))
	at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))
	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))
	at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))
	at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))
	at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))
	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))
	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
	at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))
	at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))
	at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))
	at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java(Compiled Code))
	at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))
	at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))
	at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))
	at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
	at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))


printStackTrace() のコンソール出力のログ:
[07/09/23 8:30:01:524 JST] 27b122fc SystemErr     R java.lang.NullPointerException
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at java.util.Hashtable.put(Hashtable.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at kaisha.jp.busho.ka.PageInfo.getOperationInfo(PageInfo.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at kaisha.jp.busho.ka.PageInfo.getOperationInfo(PageInfo.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at kaisha.jp.busho.ka.BaseController.doPost(BaseController.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))
[07/09/23 8:30:01:525 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))
[07/09/23 8:30:01:526 JST] 27b122fc SystemErr     R 	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))

</pre></pre>

引用返信 編集キー/
■9216 / inTopicNo.9)  Re[8]: Hashtable#putで不定期に例外発生
□投稿者/ mあ (121回)-(2007/10/22(Mon) 10:41:29)
	//こいつがコントロールから呼び出される。
	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);
	}

とりあえず、あまり伏せてないがほぼ全文。



引用返信 編集キー/
■9235 / inTopicNo.10)  Re[9]: Hashtable#putで不定期に例外発生
□投稿者/ nagise (8回)-(2007/10/22(Mon) 15:25:04)
getAttribute()はそちらで書いたメソッドだと思いますが、
このメソッドがnullを返すことがないというのは言い切れるのですか?
引用返信 編集キー/
■9238 / inTopicNo.11)  Re[10]: Hashtable#putで不定期に例外発生
□投稿者/ mあ (122回)-(2007/10/22(Mon) 17:37:31)
2007/10/22(Mon) 17:39:14 編集(投稿者)
2007/10/22(Mon) 17:39:10 編集(投稿者)
2007/10/22(Mon) 17:37:54 編集(投稿者)

<pre><pre>■No9235 (nagise さん) に返信
> getAttribute()はそちらで書いたメソッドだと思いますが、
> このメソッドがnullを返すことがないというのは言い切れるのですか?

はい、null を返す場合は多々ありますが、null なら null で構いません。

	private String getAttribute(Element element, String key) {

		NamedNodeMap node = element.getAttributes();
		for (int i = 0; i < node.getLength(); i++) {
			Attr attribute = (Attr) node.item(i);
			if (attribute.getNodeName().equals(key)) {
				return attribute.getNodeValue();
			}
		}
		return null;
	}

null か、文字列型か、です。
Hashtable#put は、第一引数に Object 型を取るので、String 型以外でもOKなんですが、
ここに実際に何が設定されて今回のような事象を引き起こしたのかを確認する術は今のと
ころありません。
現象の再現方法が不明で、再現時の追跡用コードを入れた暫定版の本番環境への組み込み
が許可されないためです。開発環境で、出るまでボタン押すにしても、DB更新が絡む部分
なので遅々として進まない状況です(画面入力もあるため)。

  <page id="GAMEN1192" path="/xxx/GAMEN1111.jsp">
    <form>
      <operation value="SUBMIT" session="keep">
          <class method="submit">kaisha.jp.busho.ka.RequestForm</class>
          <next return="0">GAMEN1919</next>
          <next return="1">ERR99</next>
      </operation>
    </form>
  </page>

当該事象発生時に解析される XML 文は上記の通りです。このXMLは、DOMツリーで保持して
います。
<next>タグが2つあり、nagise さん指摘のパスが2回走ることになります。
</pre></pre>

引用返信 編集キー/
■9246 / inTopicNo.12)  Re[11]: Hashtable#putで不定期に例外発生
□投稿者/ nagise (9回)-(2007/10/23(Tue) 14:58:53)
> はい、null を返す場合は多々ありますが、null なら null で構いません。
あぁ、文字列"0"でputしているからか。

Hashtableクラスは最近ずっと使っていなかったのですが(HashMapを使っていた)
ドキュメントを確認すると、キーだけでなく、値もnull値を許さない実装になってますね。
nullなのはtext.getNodeValue()ではないのでしょうか。
引用返信 編集キー/
■9250 / inTopicNo.13)  Re[12]: Hashtable#putで不定期に例外発生
□投稿者/ mあ (124回)-(2007/10/23(Tue) 15:47:43)
No9246 (nagise さん) に返信
>>はい、null を返す場合は多々ありますが、null なら null で構いません。
> あぁ、文字列"0"でputしているからか。
>
> Hashtableクラスは最近ずっと使っていなかったのですが(HashMapを使っていた)
> ドキュメントを確認すると、キーだけでなく、値もnull値を許さない実装になってますね。
> nullなのはtext.getNodeValue()ではないのでしょうか。

慣れと思い込みです・・・深く反省。。。依然としてDOMノードがなんで取れないのか
は謎ですが、もう少し考えます。

伏字ではありますが、いらんとこ削除させて下さい。

nagise さんありがとうございます。

同じく Hashtable なんて使わないから、HashMap と同じもんと考えていました。。。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -