In Java, one defines the namespaces for the XPath evaluator using the class NamespaceContext. In Java 6, the XPath evaluator does not consult the defined namespace context to interpret the default namespace. This despite explicit discussion of the default namespace in the Javadoc.
The workaround is to avoid using the default namespace in the XPath query.
It would appear that this somewhat surprising behaviour is consistent with the XPath 1.0 specification. Section 2.3 (Node Tests) states:
A QName in the node test is expanded into an expanded-name using the namespace declarations from the expression context. This is the same way expansion is done for element type names in start and end-tags except that the default namespace declared with
xmlnsis not used: if the QName does not have a prefix, then the namespace URI is null (this is the same way attribute names are expanded). It is an error if the QName has a prefix for which there is no namespace declaration in the expression context.
(emphasis is mine)