I am trying to search using jxPath on a proto message, My proto message is placed in the gist (due to stackoverflow body size limit)
My code looks something like below
class PNRListBuilderTest {
...
@Test
void testJxPathCtx() {
// Reads the proto message shown above from a text file
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. I waited for about 30 mins. It still did not complete.
If I specify the entire path like below then it is working fine.
msgCtx.getValue("/metadata/bookerInfo/traveler/userBusinessInfo/employeeId")
Can someone let me know what is going wrong? Is this expected ?
Thread dumps at various points are like below
After 1 min
"main" prio=0 tid=0x0 nid=0x0 runnable
java.lang.Thread.State: RUNNABLE
at app//org.apache.commons.jxpath.ri.model.NodePointer.newChildNodePointer(NodePointer.java:106)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyPointer.getImmediateValuePointer(PropertyPointer.java:161)
at app//org.apache.commons.jxpath.ri.model.NodePointer.getValuePointer(NodePointer.java:297)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getNodePointer(PropertyIterator.java:121)
at app//org.apache.commons.jxpath.ri.axes.DescendantContext.isRecursive(DescendantContext.java:148)
at app//org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:116)
at app//org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:349)
at app//org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70)
at app//org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
at app//org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
at app//org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
at app//com.spotnana.webhooks.isos.PNRListBuilderTest.testJxPathCtx(PNRListBuilderTest.java:366)
After 2 mins
java.lang.Thread.State: RUNNABLE
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
at app//org.apache.commons.jxpath.util.ValueUtils.getIndexedPropertyLength(ValueUtils.java:122)
at app//org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:202)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:318)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionAllProperties(PropertyIterator.java:206)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139)
at app//org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:114)
at app//org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:349)
at app//org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70)
at app//org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
at app//org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
at app//org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
at app//com.spotnana.webhooks.isos.PNRListBuilderTest.testJxPathCtx(PNRListBuilderTest.java:366)
After 5 mins
"main" prio=0 tid=0x0 nid=0x0 runnable
java.lang.Thread.State: RUNNABLE
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
at app//org.apache.commons.jxpath.util.ValueUtils.getIndexedPropertyLength(ValueUtils.java:122)
at app//org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:202)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:318)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionAllProperties(PropertyIterator.java:206)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139)
at app//org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:114)
at app//org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:349)
at app//org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70)
at app//org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
at app//org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
at app//org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
at app//com.spotnana.webhooks.isos.PNRListBuilderTest.testJxPathCtx(PNRListBuilderTest.java:366)
After 7 mins
main" prio=0 tid=0x0 nid=0x0 runnable
java.lang.Thread.State: RUNNABLE
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:715)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyPointer.getImmediateValuePointer(PropertyPointer.java:161)
at app//org.apache.commons.jxpath.ri.model.NodePointer.getValuePointer(NodePointer.java:297)
at app//org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getNodePointer(PropertyIterator.java:121)
at app//org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:115)
at app//org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:349)
at app//org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70)
at app//org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
at app//org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
at app//org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
at app//org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
at app//com.spotnana.webhooks.isos.PNRListBuilderTest.testJxPathCtx(PNRListBuilderTest.java:366)