1

I am executing below AQL query in java for ArangoDB to get total no of descendants of particular node. Here's code for this.

        String nodeUserid = nodeuserid.getText().trim();
        Map<String, Object> bindVars = new MapBuilder().put("nodeid", nodeUserid).get();
        CursorResult cs = arangoDriver.executeAqlQuery("LET x = (FOR v IN 1..1000 OUTBOUND @nodeid GRAPH 'TempPeoplesApp' "
                + " RETURN v.x)"
                + " RETURN SUM(x)", bindVars, null,null);

        int count = cs.getCount();

But at runtime it gives an exception stated below,

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1768)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1651)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Node.fireEvent(Node.java:8175)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3746)
    at javafx.scene.Scene$MouseHandler.access$1800(Scene.java:3471)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1695)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2486)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:314)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:243)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:345)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:526)
    at com.sun.glass.ui.View.notifyMouse(View.java:898)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1765)
    ... 47 more
Caused by: java.lang.NullPointerException
    at java.lang.Class.isAssignableFrom(Native Method)
    at com.arangodb.entity.EntityDeserializers$CursorEntityDeserializer.getResultObjects(EntityDeserializers.java:686)
    at com.arangodb.entity.EntityDeserializers$CursorEntityDeserializer.deserialize(EntityDeserializers.java:647)
    at com.arangodb.entity.EntityDeserializers$CursorEntityDeserializer.deserialize(EntityDeserializers.java:621)
    at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
    at com.google.gson.Gson.fromJson(Gson.java:861)
    at com.google.gson.Gson.fromJson(Gson.java:826)
    at com.google.gson.Gson.fromJson(Gson.java:775)
    at com.arangodb.entity.EntityFactory.createEntity(EntityFactory.java:163)
    at com.arangodb.BaseArangoDriver.createEntityImpl(BaseArangoDriver.java:367)
    at com.arangodb.BaseArangoDriver.createEntityWithFallback(BaseArangoDriver.java:259)
    at com.arangodb.BaseArangoDriver.createEntity(BaseArangoDriver.java:236)
    at com.arangodb.BaseArangoDriver.createEntity(BaseArangoDriver.java:311)
    at com.arangodb.impl.InternalCursorDriverImpl.executeCursorEntityQuery(InternalCursorDriverImpl.java:81)
    at com.arangodb.impl.InternalCursorDriverImpl.executeAqlQuery(InternalCursorDriverImpl.java:148)
    at com.arangodb.ArangoDriver.executeAqlQuery(ArangoDriver.java:2144)
    at peoplesapptree.TreeCreationController.displayDescendents(TreeCreationController.java:169)
    ... 57 more

It gives an exception while executing arangoDriver.executeAqlQuery method. So whats wrong in this query? Can anyone suggest? I am new to ArangoDB

Thanks, Mayank

1 Answer 1

2

Which Version of ArangoDB and the ArangoDB-Java-Driver do you use?

The method executeAqlQuery need to know which type in CursorResult you expect. It's the last parameter. In your case, you want probably an Integer for your sum in the Aql.

        String nodeUserid = nodeuserid.getText().trim();
        Map<String, Object> bindVars = new MapBuilder().put("nodeid", nodeUserid).get();
        CursorResult<Integer> cs = arangoDriver.executeAqlQuery(
            "LET x = (FOR v IN 1..1000 OUTBOUND @nodeid GRAPH 'TempPeoplesApp' " + " RETURN v.x)" + " RETURN SUM(x)",
            bindVars, null, Integer.class);

        Integer sum = cs.getUniqueResult();

getCount() vs getFullCount() vs getUniqueResult()

getCount() returns the total number of results. getFullCount() returns the total number of resulst with (aql)limit clause. In your case your aql returns only 1 result, the sum. A aql can return a list of results. When you have only 1 result you can get it with getUniqueResult, when you have n results use the method iterator() or asList() and iterate over it.

The method executeAqlQuery supports wrapper classes for all primitive Types, Map, List and on uniqe aql result Java-Beans.

Sign up to request clarification or add additional context in comments.

3 Comments

Hi mpv, Thanks for pointing out in right direction. I was using ArangoDB version 3.0.2 version and java driver version 2.4 version. Now i replaced java driver with latest version 3.0.0 version. and had to change code like this, CursorResult cs = arangoDriver.executeAqlQuery("LET x = (FOR v IN 1..1000 OUTBOUND @nodeid GRAPH 'TempPeoplesApp' " + " RETURN v.x)" + " RETURN SUM(x)", bindVars, null,null); While executing this code, i get NullPointerException at the same line. Could you give some hint?
can you update the stack output in your question plz?
Thanks it works. What's the difference between getCount(),getFullCount() and getUniqueResult() methods of CursorResult and by the way does it support all wrapper classes of java in executeAqlQuery() method as argument.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.