簡體   English   中英

如何從Java將參數的Map類型傳遞給OrientDB Groovy函數

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

我試圖將Map作為輸入傳遞給orientdb groovy函數。 但是Groovy函數正在考慮將我的Map輸入參數視為String。

請建議如何將輸入參數的Map類型傳遞給orientdb groovy函數。

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 : ");
}

常規功能:

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

錯誤

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)

在腳本中,假設參數的名稱為inputMap

然后發送以下

 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 : ");

該腳本將能夠讀取inputMap作為Map數據結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM