jxpath taking lot of time on trying to do a getValue

20 views Asked by At

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)
0

There are 0 answers