Re: [JXPath] Can JXPath help me with processing collection based tree?
Matt Benson, thank you for your answer. As you wrote, I put IMyNodeAggregate into field myCollection in RootStub class. This is OK. A) 1. public class Rules { 2.public static String getName(ExpressionContext context){ 3. Pointer pointer = context.getContextNodePointer(); 4.if(pointer == null){ 5.return ""; 6.} else { 7.if(pointer.getValue() instanceof IMyNode){ 8.System.out.println("POINTER SET ON " + pointer); 9.IMyNode node = (IMyNode)pointer.getValue(); 10. return node.someService().getName(); 11. } 12. } 13. return ""; 14. } 15. } RootStub is submitted to newContext: JXPathContext context = JXPathContext.newContext(rootStub); and context.getValue("/myCollection"); returns myCollection - OK context.getValue("//myCollection"); returns myCollection - OK context.getValue("/myCollection/.[rules:getName() = 'secondName']"); returns the instance of IMyNode which someService().getName() returns "secondName" - OK After line context.getValue("/myCollection//.[rules:getName() = 'secondName']"); the next lines are NOT executed. Also no exception, and lenient mode is not set. I do not understand what is going on. Line 8. of Rules class prints "POINTER SET ON /myCollection[1]" After this I have a lot of doubts, if I can use JXPath in my case. B) Can I use regex like here? [rules:getName() matches '.*Name'] Thank you, Kamil W dniu 2012-11-02 18:18, Matt Benson pisze: As Jun suggests, a custom extension function [1] is probably in order to keep your expressions reasonably (!) short. Assuming you want to use JXPath without modifying any of your existing code, I would recommend trying to write a custom function that makes the call to retrieve the name. Then your expression might look like ".[mynode:getName() = 'nodeName1']/.[mynode:getName() = 'nodeName2']" etc. ISTR JXPath having a bit of trouble processing a collection as the root, so you might experiment with making your IMyNodeAggregate be a property of your root, or even the value of a variable. Thinking further, you might get some mileage out of doing some custom interface implementations. The discussion of maps [2] in the user guide makes reference to the customization needed to treat any arbitrary structure similarly to a map, which arguably your IMyNodeAggregate is. HTH, Matt [1] http://commons.apache.org/jxpath/users-guide.html#Custom_Extension_Functions [2] http://commons.apache.org/jxpath/users-guide.html#Map_Element_Access On Fri, Nov 2, 2012 at 11:59 AM, Jun Ouyang wrote: Sorry I am on transit right now so i cant give u a full and proper.respond. But i think you can create your own jxpath function and invoke it to match your need. In this case the function shall check if names are equal? On Nov 2, 2012 9:47 AM, "we9" wrote: I started to write some methods which process tree structure. The queries are based on XPath. And now, I discovered JXPath. I was reading user-guide, but I didn't find what I want. I must be sure that there is no posibility to do this with JXPath. I have the following interfaces: interface IMyNode interface IMyNodeAggregate implements Collection, IMyNode I want to pass some root (instance of IMyAggregate) and using XPath notation (eg. /nodeName1//nodeName2/**nodeName3) get proper IMyNode instances. Name of IMyNode is avaliable by calling myNode.someService().getName() so maybe some interface JXPath should be implemented? Please answer me if JXPath can help me? Thank you in advance, Kamil --**--**- To unsubscribe, e-mail: user-unsubscribe@commons.**apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: [JXPath] Can JXPath help me with processing collection based tree?
Matt Benson, thank you for your answer. As you wrote, I put /IMyNodeAggregate /into field /myCollection /in /RootStub /class. This is OK. A) /1. public class Rules {// //2.public static String getName(ExpressionContext context){// //3. Pointer pointer = context.getContextNodePointer();// //4.if(pointer == null){// //5.return "";// //6.} else {// //7.if(pointer.getValue() instanceof IMyNode){// 8. *System.out.println("POINTER SET ON " + pointer);* //9.IMyNode node = (IMyNode)pointer.getValue();// //10. return node.someService().getName();// //11. }// //12. }// //13. return "";// //14. }// //15. }// / RootStub is submitted to newContext: /JXPathContext context = JXPathContext.newContext(rootStub);/ and /context.getValue("/myCollection"); / returns myCollection - *OK* /context.getValue("//myCollection"); / returns myCollection - *OK* / //context.getValue("/myCollection/.[rules:getName() = '///secondName/']");/ returns the instance of IMyNode which someService().getName() returns "/secondName/" - *OK* After line /context.getValue("/myCollection//.[rules:getName() = 'secondName']");/ the next lines are NOT executed. Also no exception, and lenient mode is not set. I do not understand what is going on. / /Line 8. of /Rules /class prints/"POINTER SET ON */myCollection[1]*/" After this I have a lot of doubts, if I can use JXPath in my case. B) Can I use regex like here? /[rules:getName() matches '.*Name']/ Thank you, Kamil W dniu 2012-11-02 18:18, Matt Benson pisze: As Jun suggests, a custom extension function [1] is probably in order to keep your expressions reasonably (!) short. Assuming you want to use JXPath without modifying any of your existing code, I would recommend trying to write a custom function that makes the call to retrieve the name. Then your expression might look like ".[mynode:getName() = 'nodeName1']/.[mynode:getName() = 'nodeName2']" etc. ISTR JXPath having a bit of trouble processing a collection as the root, so you might experiment with making your IMyNodeAggregate be a property of your root, or even the value of a variable. Thinking further, you might get some mileage out of doing some custom interface implementations. The discussion of maps [2] in the user guide makes reference to the customization needed to treat any arbitrary structure similarly to a map, which arguably your IMyNodeAggregate is. HTH, Matt [1] http://commons.apache.org/jxpath/users-guide.html#Custom_Extension_Functions [2] http://commons.apache.org/jxpath/users-guide.html#Map_Element_Access On Fri, Nov 2, 2012 at 11:59 AM, Jun Ouyang wrote: Sorry I am on transit right now so i cant give u a full and proper.respond. But i think you can create your own jxpath function and invoke it to match your need. In this case the function shall check if names are equal? On Nov 2, 2012 9:47 AM, "we9" wrote: I started to write some methods which process tree structure. The queries are based on XPath. And now, I discovered JXPath. I was reading user-guide, but I didn't find what I want. I must be sure that there is no posibility to do this with JXPath. I have the following interfaces: interface IMyNode interface IMyNodeAggregate implements Collection, IMyNode I want to pass some root (instance of IMyAggregate) and using XPath notation (eg. /nodeName1//nodeName2/**nodeName3) get proper IMyNode instances. Name of IMyNode is avaliable by calling myNode.someService().getName() so maybe some interface JXPath should be implemented? Please answer me if JXPath can help me? Thank you in advance, Kamil --**--**- To unsubscribe, e-mail: user-unsubscribe@commons.**apache.org For additional commands, e-mail: user-h...@commons.apache.org - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: [JCS] Remote Cache Server Help
On 12.11.12 16:28, Drew Leamon wrote: > registry.host=localhost > registry.port=1103 > remote.cache.service.port=1103 Shouldn't these ports be different? Bye, Thomas. - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org