[ 
https://issues.apache.org/jira/browse/JXPATH-154?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13189959#comment-13189959
 ] 

Matt Benson commented on JXPATH-154:
------------------------------------

It is a convention within JXPath code that the empty namespace be represented 
as a Java {{null}}.  Rather than check for {{""}} at the point you identified, 
I have elected to modify DOMNodePointer to translate {{""}} to {{null}} when 
returning its result.  In this manner JXPath's DOM handling will function in 
the same manner as its JDOM handling, and any other callers of the method will 
be fixed as well.


Committed revision 1234036.

                
> Resetting the default namespace causes a serious endless loop when requesting 
> .asPath() on a node.
> --------------------------------------------------------------------------------------------------
>
>                 Key: JXPATH-154
>                 URL: https://issues.apache.org/jira/browse/JXPATH-154
>             Project: Commons JXPath
>          Issue Type: Bug
>    Affects Versions: 1.3
>         Environment: jxpath eclipse plugin from orbit
>            Reporter: Hugo de Almeida Cocharro
>
> sample smaller case:
> {code}
> <...>
>  <b:foo xmlns:b="bla" xmlns="test111">    <!--  No nodes are placed in the 
> tree within ns "test111" but the attribute is still there.-->
>   <b:bar>a</b:bar>                         <!-- is in ns 'bla' -->
>   <test xmlns=""></test>                   <!-- does not have a namespace -->
>  </b:foo>
> </...>
> {code}
> when requesting .asPath() on the 'test' node, it loops in 
> org.apache.commons.jxpath.ri.NamespaceResolver.getPrefix(NodePointer, 
> String), 
> and if it didn't loop it would create a wrong xpath '//b:fo/null:test' 
> DOMNodePointer.asPath().
> So I think that the fix should be in 
> org.apache.commons.jxpath.ri.model.dom.DOMNodePointer.asPath()
> {code}
> ....
>                     String ln = DOMNodePointer.getLocalName(node);
>                     String nsURI = getNamespaceURI();
>                     if (nsURI == null) {
>                         buffer.append(ln);
>                         buffer.append('[');
>                         
> buffer.append(getRelativePositionByName()).append(']');
>                     }
>                     else {
>                         String prefix = 
> getNamespaceResolver().getPrefix(nsURI);
>                         if (prefix != null) {
> ...
> {code}
> should become
> {code}
> ...
>                     String ln = DOMNodePointer.getLocalName(node);
>                     String nsURI = getNamespaceURI();
>                     if (nsURI == null || nsURI.length() == 0) { // check for 
> empty string which means that the node doesn't have a namespace.
>                         buffer.append(ln);
>                         buffer.append('[');
>                         
> buffer.append(getRelativePositionByName()).append(']');
>                     }
>                     else {
>                         String prefix = 
> getNamespaceResolver().getPrefix(nsURI);
>                         if (prefix != null) {
> ...
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to