Jxpath требует много времени при попытке выполнить getValue ⇐ JAVA
-
Гость
Jxpath требует много времени при попытке выполнить getValue
Я пытаюсь выполнить поиск по прототипному сообщению с помощью jxPath. Мое прототипное сообщение помещено в суть (из-за ограничения размера тела stackoverflow)
Мой код выглядит примерно так:
класс PNRListBuilderTest { ... @Тест недействительный testJxPathCtx() { // Считывает прото-сообщение, показанное выше, из текстового файла val protoStr = getStringFromFile("путь к классам:BookingEnginePnrUpdateEventProto.txt"); val msgBld = BookingEnginePNRUpdateEvent.newBuilder(); TextFormat.getParser().merge(protoStr, msgBld); val msgCtx = JXPathContext.newContext(msgBld.build()); System.out.println(msgCtx.getValue("//employeeId")); } } Я заметил, что msgCtx.getValue("//employeeId") занимает много времени. Я ждал около 30 минут. Оно все еще не завершено.
Если я укажу весь путь, как показано ниже, все будет работать нормально.
msgCtx.getValue("/metadata/bookerInfo/traveler/userBusinessInfo/employeeId") Может кто-нибудь сообщить мне, что происходит не так? Ожидается ли это?
Дампы потоков в различных точках показаны ниже
Через 1 минуту
"main" prio=0 tid=0x0 nid=0x0 работоспособный java.lang.Thread.State: ВЫПОЛНЯЕМЫЙ в приложении //org.apache.commons.jxpath.ri.model.NodePointer.newChildNodePointer(NodePointer.java:106) в приложении //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.isRecursive(DescendantContext.java:148) в приложении //org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:116) в приложении //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) Через 2 минуты
java.lang.Thread.State: RUNNABLE по адресу java.base@17.0.5/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) по адресу java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:568) в приложении //org.apache.commons.jxpath.util.ValueUtils.getIndexedPropertyLength(ValueUtils.java:122) в приложении //org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:202) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:318) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionAllProperties(PropertyIterator.java:206) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) в приложении //org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:114) в приложении //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) Через 5 минут
"основной" prio=0 tid=0x0 nid=0x0 работоспособен java.lang.Thread.State: ВЫПОЛНЯЕМЫЙ по адресу java.base@17.0.5/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) по адресу java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:568) в приложении //org.apache.commons.jxpath.util.ValueUtils.getIndexedPropertyLength(ValueUtils.java:122) в приложении //org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:202) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:318) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionAllProperties(PropertyIterator.java:206) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) в приложении //org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:114) в приложении //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) Через 7 минут
main" prio=0 tid=0x0 nid=0x0 работоспособный java.lang.Thread.State: ВЫПОЛНЯЕМЫЙ в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:715) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //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)
Я пытаюсь выполнить поиск по прототипному сообщению с помощью jxPath. Мое прототипное сообщение помещено в суть (из-за ограничения размера тела stackoverflow)
Мой код выглядит примерно так:
класс PNRListBuilderTest { ... @Тест недействительный testJxPathCtx() { // Считывает прото-сообщение, показанное выше, из текстового файла val protoStr = getStringFromFile("путь к классам:BookingEnginePnrUpdateEventProto.txt"); val msgBld = BookingEnginePNRUpdateEvent.newBuilder(); TextFormat.getParser().merge(protoStr, msgBld); val msgCtx = JXPathContext.newContext(msgBld.build()); System.out.println(msgCtx.getValue("//employeeId")); } } Я заметил, что msgCtx.getValue("//employeeId") занимает много времени. Я ждал около 30 минут. Оно все еще не завершено.
Если я укажу весь путь, как показано ниже, все будет работать нормально.
msgCtx.getValue("/metadata/bookerInfo/traveler/userBusinessInfo/employeeId") Может кто-нибудь сообщить мне, что происходит не так? Ожидается ли это?
Дампы потоков в различных точках показаны ниже
Через 1 минуту
"main" prio=0 tid=0x0 nid=0x0 работоспособный java.lang.Thread.State: ВЫПОЛНЯЕМЫЙ в приложении //org.apache.commons.jxpath.ri.model.NodePointer.newChildNodePointer(NodePointer.java:106) в приложении //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.isRecursive(DescendantContext.java:148) в приложении //org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:116) в приложении //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) Через 2 минуты
java.lang.Thread.State: RUNNABLE по адресу java.base@17.0.5/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) по адресу java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:568) в приложении //org.apache.commons.jxpath.util.ValueUtils.getIndexedPropertyLength(ValueUtils.java:122) в приложении //org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:202) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:318) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionAllProperties(PropertyIterator.java:206) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) в приложении //org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:114) в приложении //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) Через 5 минут
"основной" prio=0 tid=0x0 nid=0x0 работоспособен java.lang.Thread.State: ВЫПОЛНЯЕМЫЙ по адресу java.base@17.0.5/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) по адресу java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:568) в приложении //org.apache.commons.jxpath.util.ValueUtils.getIndexedPropertyLength(ValueUtils.java:122) в приложении //org.apache.commons.jxpath.ri.model.beans.BeanPropertyPointer.getLength(BeanPropertyPointer.java:202) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.getLength(PropertyIterator.java:318) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionAllProperties(PropertyIterator.java:206) в приложении //org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) в приложении //org.apache.commons.jxpath.ri.axes.DescendantContext.nextNode(DescendantContext.java:114) в приложении //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) Через 7 минут
main" prio=0 tid=0x0 nid=0x0 работоспособный java.lang.Thread.State: ВЫПОЛНЯЕМЫЙ в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:715) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //org.apache.commons.jxpath.ri.model.NodePointer.clone(NodePointer.java:717) в приложении //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)
Мобильная версия