golang jsonrpc调用java json rpc

时间:2015-08-21 15:23:35

标签: java go rpc

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

  

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

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

  

com.fasterxml.jackson.databind.JsonMappingException:由于输入结束而没有要映射的内容    在[来源:com.googlecode.jsonrpc4j.NoCloseInputStream@385b5b5c; line:1,column:1]       at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)       at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3747)       at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3687)       at 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)       at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)       at java.util.concurrent.FutureTask.run(FutureTask.java:266)       在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)       在java.lang.Thread.run(Thread.java:744)

我不明白为什么它不起作用,jsonrpc协议中是否存在golang无法调用java或者我不能正确执行它的任何规则?

1 个答案:

答案 0 :(得分:0)

我希望我有更好的答案。这是我试图提前完成工作并且无法实现的事情。我读过只有Go客户端可以转到Go服务器。

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

在一个案例中,我使用net / http包并在Go中执行了一个基本的Web服务器,然后使用HandlerFunc根据url请求调用函数/方法。请求基于简单的http表单操作。然后我重定向回主页,因为我想要" app"留在用户面前,因为我只需要" / submit" url触发一个方法,其中包含从表单传入的值。

并非所有优雅,但它在紧急情况下工作以快速建立收集信息的方式,它可以立即"部署"让我的同事知道我在听什么端口。

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

不太适应,但如果你从客户那里获得了什么,那就很好。