I would be keen to hear about this.

Is there or should there be a utility class to escape things correctly for
XPath? Kind of like URLEncoder but for xpath?

On 9/17/06, Joshua Levy <[EMAIL PROTECTED]> wrote:

Hi,
I'm trying to properly escape characters in an XPath
query using jcr:contains.  Based on Sec 6.6.5.2 of
the JCR spec it seemed like one should use single
quotes and backslash escape some characters (", ', -, \).

Queries like this work for me:
  //element(*, my:record)[jcr:contains(.,'blah\-blah')] order by
jcr:score() descending
  //element(*, my:record)[jcr:contains(.,'blah\"blah')] order by
jcr:score() descending
But
  //element(*, my:record)[jcr:contains(.,'blah\'blah')] order by
jcr:score() descending
throws an exception (below).

Am I not doing the escaping correctly, or is it a bug?

Also, this brings up broader question:  Are there any
libraries people use to help formulate (JCR) XPath queries,
that assist with such syntax details?  It seems rather
error-prone to be constructing them by hand, particularly
with character escaping (more than one kind), etc.

Many thanks!

Joshua




javax.jcr.query.InvalidQueryException: Lexical error at line 1, column
110.  Encountered: <EOF> after : "\')] order by jcr:score() descending
return $v": Lexical error at line 1, column 110.  Encountered: <EOF> after :
"\')] order by jcr:score() descending return $v": Lexical error at line 1,
column 110.  Encountered: <EOF> after : "\')] order by jcr:score()
descending return $v"
    at org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.<init>(
XPathQueryBuilder.java:249)
    at
org.apache.jackrabbit.core.query.xpath.XPathQueryBuilder.createQuery(
XPathQueryBuilder.java:275)
    at org.apache.jackrabbit.core.query.xpath.QueryBuilder.createQueryTree
(QueryBuilder.java:36)
    at org.apache.jackrabbit.core.query.QueryParser.parse(QueryParser.java
:53)
    at org.apache.jackrabbit.core.query.lucene.QueryImpl.<init>(
QueryImpl.java:125)
    at
org.apache.jackrabbit.core.query.lucene.SearchIndex.createExecutableQuery(
SearchIndex.java:322)
    at org.apache.jackrabbit.core.query.QueryImpl.init(QueryImpl.java:92)
    at org.apache.jackrabbit.core.SearchManager.createQuery(
SearchManager.java:337)
    at org.apache.jackrabbit.core.query.QueryManagerImpl.createQuery(
QueryManagerImpl.java:86)

Reply via email to