简体   繁体   中英

How to pass Map type of parameter to orientdb groovy function from Java

I am trying to pass Map as a input to my orientdb groovy function. But Groovy function is considering my Map input parameter as String.

Please suggest how to pass Map type of input parameter to orientdb groovy function.

code

public void MapInputTest() {
     Map < String, Object > inputMap = new HashMap < String, Object > ();
     inputMap.put("serviceId", "ETHA12721205");
     inputMap.put("serviceId1", "ETHA127212051");
     inputMap.put("serviceId2", "ETHA127212052");

     g.execute(Script.function("MapInputFunction", inputMap));
     System.out.println("returnedString is : ");
}

groovy function:

def MapInputFunction(Map mapInput) {
    println("class type of input parameter" + mapInput.getClass())
    println("class type " + mapInput)
    def tempMap = [: ]
    tempMap = mapInput
    return tempMap.get('serviceId')
}

error

com.orientechnologies.orient.core.exception.OCommandExecutionException: Failed to execute command: function.MapInputFunction Cause:No signature of method: Script1.MapInputFunction() is applicable for argument types: (java.lang.String, java.lang.String, java.lang.String) values: [ETHA127212051, ETHA12721205, ETHA127212052]
    Possible solutions: MapInputFunction2(), MapInputFunction(java.lang.Object)
        at platform.orientdb.storage.DataGridStorage.executeCommand(DataGridStorage.java:631)
        at platform.orientdb.storage.DataGridStorage.command(DataGridStorage.java:601)
        at platform.orientdb.storage.message.CommandMessage.processMessage(CommandMessage.java:27)
        at platform.orientdb.storage.message.TxMessage.process(TxMessage.java:52)
        at platform.orientdb.storage.actor.TransactionActor.processMessage(TransactionActor.java:71)
        at platform.orientdb.storage.actor.ExternalStorageActor.onReceive(ExternalStorageActor.java:16)
        at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165)
        at akka.actor.Actor$class.aroundReceive(Actor.scala:484)
        at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
        at akka.actor.ActorCell.invoke(ActorCell.scala:495)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
        at akka.dispatch.Mailbox.run(Mailbox.scala:224)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)*emphasized text*
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

In the script, let's say the name of the parameter is inputMap

then send the below

 Map < String, Object > parameters= new HashMap < String, Object > ();
     parameters.put("serviceId", "ETHA12721205");
     parameters.put("serviceId1", "ETHA127212051");

 Map < String, Object > inputMap = new HashMap < String, Object > ();
inputMap.put("inputMap",inputMap)

     g.execute(Script.function("MapInputFunction", inputMap));
     System.out.println("returnedString is : ");

The script will able to read the inputMap as Map data-structure

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM