[mayaa-user:582] HTMLコメントがあるとxpath指定で例外発生

佐竹雅央 [E-MAIL ADDRESS DELETED]
2007年 9月 13日 (木) 16:19:42 JST


初めまして、ジークステクノロジの佐竹と申します。

現在プロジェクトにてMayaa1.1.13を使わせて頂いています。

Webサイトのドキュメント「3-7. タグを消す」
http://mayaa.seasar.org/documentation/remove.html

を参考にして

<m:null m:xpath="//*[@class='dummy']" />

という、class属性値がdummyである全てのタグを消す処理を行っているのですが、
テンプレートにHTMLコメントタグが存在する場合にNullPointerExceptionが発生します。

SpecificationNavigator#getAttributeAxisIterator(Object, String, String, String)
の中で呼び出す
SpecificationNavigator#getNamespaceURI(Namespace, String)
が、コメントノード({http://mayaa.seasar.org}comment)の時にnullを返すことが
ヌルポ発生の直接の理由でした。

getNamespaceURIがコメントノードに対してもURIを返してくれるか、
getAttributeAxisIteratorでgetNamespaceURIがnullを返したときにNullIteratorを返すか、
そんな感じの対応がいただけると良いと思うのですが如何でしょうか?

取り合えずローカルでは後者の方法で対応しました。

   public Iterator getAttributeAxisIterator(
           Object obj, String localName, String namespacePrefix,
           String namespaceURI) {
       if (obj instanceof SpecificationNode) {
           SpecificationNode node = (SpecificationNode) obj;
           if (StringUtil.isEmpty(namespaceURI)) {
               URI uri = getNamespaceURI(node, namespacePrefix);
               if (uri == null) {
                   return NullIterator.getInstance();
               }
               namespaceURI = uri.getValue();
           }
           QName qName = SpecificationUtil.createQName(
                   SpecificationUtil.createURI(namespaceURI), localName);
           return new QNameFilteredIterator(qName, node.iterateAttribute());
       }
       return NullIterator.getInstance();
   }

以上、宜しくお願い致します。
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: trace.txt
URL:  http://ml.seasar.org/archives/mayaa-user/attachments/20070913/787e94b8/attachment-0001.txt 


mayaa-user メーリングリストの案内