I can share a reproducible project but I would like to avoid doing it in a public link like in GitHub, etc. Is there a way to do that?
On Mon, 25 Sep, 2023, 01:10 Matt Benson, <mben...@apache.org> wrote: > TBH I'm somewhat surprised it doesn't already, but I haven't actually > ran/debugged your example. > > On Sun, Sep 24, 2023 at 2:32 PM Debraj Manna <subharaj.ma...@gmail.com> > wrote: > > > Is there a way I can throw some error from jxpath when this situation > > arises instead of getting stuck in a never ending loop? > > > > On Sun, 24 Sep, 2023, 22:54 Matt Benson, <gudnabr...@gmail.com> wrote: > > > > > Well, to be clear, you can have linked nodes. But if N had both `next` > > and > > > `previous` members is where you'd run into trouble. > > > > > > On Sun, Sep 24, 2023 at 12:22 PM Matt Benson <gudnabr...@gmail.com> > > wrote: > > > > > > > If you're doing a search down the tree you'd need some way to keep > > JXPath > > > > from traversing these relationships, yes. > > > > > > > > On Sun, Sep 24, 2023 at 11:59 AM Debraj Manna < > > subharaj.ma...@gmail.com> > > > > wrote: > > > > > > > >> Are you saying that in JxPath we cannot use something like below? > > > >> > > > >> class A { > > > >> int n; > > > >> A next; > > > >> } > > > >> > > > >> On Sun, Sep 24, 2023 at 8:43 PM Matt Benson <mben...@apache.org> > > wrote: > > > >> > > > >> > Is it possible the proto message (I'm not familiar with this API) > is > > > >> built > > > >> > with internal recursive references, i.e. some child has a property > > > that > > > >> > points, possibly indirectly, to its parent? That would be the most > > > >> probable > > > >> > explanation, particularly as you say feeding jxpath the known > > absolute > > > >> path > > > >> > works. > > > >> > > > > >> > Matt > > > >> > > > > >> > On Sun, Sep 24, 2023, 9:44 AM Debraj Manna < > > subharaj.ma...@gmail.com> > > > >> > wrote: > > > >> > > > > >> > > It looks like it is getting stuck in some infinite loop. The > > thread > > > >> stack > > > >> > > looks like below after ~ 8 hours from the start. > > > >> > > > > > >> > > main Runnable CPU usage on sample: 979ms > > > >> > > jdk.internal.reflect.GeneratedMethodAccessor640.invoke() > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > > >> > > java.lang.reflect.Method.invoke(Method.java:568) > > > >> > > > > > >> > > org.apache.commons.jxpath.util.ValueUtils.getValue(ValueUtils.java:367) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getBaseValue(BeanPropertyPointer.java:120) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getImmediateNode(BeanPropertyPointer.java:149) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.model.beans.PropertyPointer.getImmediateValuePointer(PropertyPointer.java:161) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.model.NodePointer.getValuePointer(NodePointer.java:297) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getNodePointer(PropertyIterator.java:121) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:115) > > > >> > > > > > >> > > org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:349) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70) > > > >> > > > > > >> > > org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313) > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > > > > com.spotnana.webhooks.isos.PNRListBuilderTest.testJxPathCtx(PNRListBuilderTest.java:366) > > > >> > > > > > >> > > On Sun, Sep 24, 2023 at 1:24 AM Debraj Manna < > > > >> subharaj.ma...@gmail.com> > > > >> > > wrote: > > > >> > > > > > >> > > > I am trying to search using JxPath on a proto message, My > proto > > > >> message > > > >> > > is > > > >> > > > placed here > > > >> > > > < > > > >> > https://gist.github.com/debraj-manna/4a8ded5d79dc9aee8d4c03d460327284 > > > >> > >. > > > >> > > > > > > >> > > > val protoStr = > > > >> > > > > > > getStringFromFile("classpath:BookingEnginePnrUpdateEventProto.txt"); > > > >> > > > val msgBld = BookingEnginePNRUpdateEvent.newBuilder(); > > > >> > > > TextFormat.getParser().merge(protoStr, msgBld); > > > >> > > > val msgCtx = JXPathContext.newContext(msgBld.build()); > > > >> > > > System.out.println(msgCtx.getValue("//employeeId")); > > > >> > > > > > > >> > > > I am observing that msgCtx.getValue("//employeeId") is > taking a > > > >> lot of > > > >> > > > time. Thread dumps at various points are placed in the below > > gist. > > > >> > > > > > > >> > > > > > > >> > https://gist.github.com/debraj-manna/47852fa190075abdacd527969f355cde > > > >> > > > > > > >> > > > If I specify the entire path like > > > >> > > > > > > >> > > > > > >> > > > > >> > > > > > > msgCtx.getValue("/metadata/bookerInfo/traveler/userBusinessInfo/employeeId"). > > > >> > > > It is working fine. > > > >> > > > > > > >> > > > Can someone let me know what is going wrong? Is this expected? > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > > > > > > > >