InvalidQueryException on XPath Query with Numeric Node Name

Problem, Question

You receive the following exception when you attempt to do an xpath query which contains a node that has a name beginning with a digit.

Caused by: javax.jcr.query.InvalidQueryException: Parse error: data is not a RelationQueryNode
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:504)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:551)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.childrenAccept(SimpleNode.java:89)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.createPathQueryNode(XPathQueryBuilder.java:734)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.visit(XPathQueryBuilder.java:372)
 at org.apache.jackrabbit.core.query.xpath.SimpleNode.jjtAccept(SimpleNode.java:80)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.<init>(XPathQueryBuilder.java:297)
 at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.createQuery(XPathQueryBuilder.java:331)
 at org.apache.jackrabbit.core.query.xpath.QueryBuilder.createQueryTree(QueryBuilder.java:39)
 at org.apache.jackrabbit.core.query.QueryParser.parse(QueryParser.java:57)
 at org.apache.jackrabbit.core.query.lucene.QueryImpl.<init>(QueryImpl.java:91)
 at com.day.crx.query.lucene.CRXExecutableQueryImpl.<init>(CRXExecutableQueryImpl.java:64)
 at com.day.crx.query.lucene.LuceneHandler.createExecutableQuery(LuceneHandler.java:381)
 at org.apache.jackrabbit.core.query.QueryImpl.init(QueryImpl.java:127)
 at org.apache.jackrabbit.core.SearchManager.createQuery(SearchManager.java:305)
 at org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery(QueryManagerImpl.java:94)

Resolution, Answer

Use this method to encode the numeric node's name using the following method: org.apache.jackrabbit.util.ISO9075.encode(name)
Or alternatively use JCR SQL instead of XPath.

Applies to

CRX 1.x

References

 Adobe

احصل على مساعدة بشكل أسرع وأسهل

مستخدم جديد؟

Adobe MAX 2024

Adobe MAX
مؤتمر الإبداع

في الفترة من 14 إلى 16 أكتوبر في ميامي بيتش وعبر الإنترنت

Adobe MAX

مؤتمر الإبداع

في الفترة من 14 إلى 16 أكتوبر في ميامي بيتش وعبر الإنترنت

Adobe MAX 2024

Adobe MAX
مؤتمر الإبداع

في الفترة من 14 إلى 16 أكتوبر في ميامي بيتش وعبر الإنترنت

Adobe MAX

مؤتمر الإبداع

في الفترة من 14 إلى 16 أكتوبر في ميامي بيتش وعبر الإنترنت