Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang jsonrpc调用java json rpc_Java_Go_Rpc - Fatal编程技术网

golang jsonrpc调用java json rpc

golang jsonrpc调用java json rpc,java,go,rpc,Java,Go,Rpc,我试图通过json rpc将golang程序与java程序连接起来,但遇到了一些麻烦。我使用golang原生包中的“net/rpc/jsonrpc”包,以及java中的“jsonrpc4j”。我使用流模式在java中创建服务器,因为golang的jsonrpc只支持tcp调用。但在golang client中仍然得到错误响应: 错误:无效的错误映射[代码:-32602消息:无效的方法参数] 同时java服务器也遇到了错误: com.fasterxml.jackson.databind.JsonM

我试图通过json rpc将golang程序与java程序连接起来,但遇到了一些麻烦。我使用golang原生包中的“net/rpc/jsonrpc”包,以及java中的“jsonrpc4j”。我使用流模式在java中创建服务器,因为golang的jsonrpc只支持tcp调用。但在golang client中仍然得到错误响应:

错误:无效的错误映射[代码:-32602消息:无效的方法参数]

同时java服务器也遇到了错误:

com.fasterxml.jackson.databind.JsonMappingException:由于输入结束,没有要映射的内容 在[来源:com.googlecode.jsonrpc4j。NoCloseInputStream@385b5b5c;行:1,列:1] 位于com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) 位于com.fasterxml.jackson.databind.ObjectMapper.\u initForReading(ObjectMapper.java:3747) 位于com.fasterxml.jackson.databind.ObjectMapper.\u readMapAndClose(ObjectMapper.java:3687) 位于com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2202) 位于com.googlecode.jsonrpc4j.JsonRpcServer.handle(JsonRpcServer.java:224) 位于com.googlecode.jsonrpc4j.StreamServer$Server.run(StreamServer.java:214) 位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)处 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 运行(Thread.java:744)


我不明白为什么它不起作用,在jsonrpc协议中是否存在golang不能调用java的规程,或者我只是做得不对?

我希望我有一个更好的答案。这是我试图让工作更早,但无法实现的事情。我已经读到只有Go客户端可以rpc到Go服务器

在尝试使json/rpc在Java和Go之间工作之后,我采用了两种方法,也许您可以根据自己的需要定制一些类似的东西

在一个例子中,我使用net/http包,在Go中创建了一个基本的web服务器,然后使用HandlerFunc根据url请求调用函数/方法。这些请求基于简单的http表单操作。然后我重定向回主页,因为我希望“应用程序”保持在用户面前,因为我只需要“/submit”url来触发一个带有表单传入值的方法

虽然不是那么优雅,但它在紧要关头成功地快速建立了一种收集信息的方法,并且可以通过让我的同事知道我在监听哪个端口来立即“部署”

在第二种情况下,由于我的一个朋友正在编写Java端的程序,我设置了一个套接字a,列出了一个字节模式,我们已经商定了这个模式,它将调用一个特定的函数


适应性不是很强,但如果你知道你从客户那里得到了什么,结果就很好。

我之前也尝试过类似的方法,但却遇到了死胡同。据我所知,Go rpc包只支持Go服务器和客户端,而不支持用其他语言编写的服务器和客户端。这里有一个关于Golang Nuts谷歌集团的参考:谢谢你的回答。你用一种非常聪明的方法解决了这个问题。但我终于解决了。这里有三个要点。首先,golang的json rpc必须遵守其rpc的规则,该函数应该只有一个收入pramater。其次,在JavaJSONRPC中注册的方法名与golang不同,它只是方法名,不包括类名。第三,让程序在套接字中通信,而不是Http,很抱歉用中文写,你可以浏览一下代码。