Jackrabbitを使用していて、UUIDを持つ既存のノードを照会しようとしています。私のコードを以下に示します。問題は、referenceNodeのUUIDが「 '90be246a-a17c-445e-a5ad-81b064de0bee'」の形式であり、Jackrabbit(Lucene)で使用されているXPATHエンジンでハイフンの処理に問題があるようです。
query2を実行すると、すべてが正常になり、referenceNodeが出力されます。Eclipse内で(UUIDを使用して)query1を実行すると、何も返されません。ただし、Jackrabbit Viewer内でquery1を実行すると、クエリは正常に実行されます。
queryStringのハイフンをエスケープする必要があるようですが、ダブルバックスラッシュを追加しようとすると、同じ結果が得られます。UUIDに対してクエリを実行する適切な方法は何ですか?
// Set up Nodes
rootNode = session.getRootNode();
Node referenceNode = rootNode.addNode("referenceNode");
Node referencingNode = rootNode.addNode("referencingNode");
referenceNode.addMixin("mix:referenceable");
referencingNode.setProperty("pointer", new ReferenceValue(referenceNode));
// Query
String uuid = referenceNode.getUUID();
QueryManager qm = ws.getQueryManager();
String queryString1 = "//*[@jcr:uuid='"+uuid+"']";
String queryString2 = "//referenceNode";
Query q = qm.createQuery(queryString1, Query.XPATH);
QueryResult result = q.execute();
NodeIterator it = result.getNodes();
while(it.hasNext()) {
Node node = it.nextNode();
System.out.println( node.getName());
}