user3406181
user3406181

Reputation: 121

ArangoDB AQL Query Exception in Java

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

Upvotes: 1

Views: 267

Answers (1)

mpv89
mpv89

Reputation: 1891

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.

Upvotes: 2

Related Questions