2015-08-21 53 views
-1

我試圖golang程序與JSON RPC Java程序連接,但遇到了一些麻煩。我使用golang本地程序包中的「net/rpc/jsonrpc」包,以及java中的「jsonrpc4j」。我使用流模式在java中創建服務器,因爲golang的jsonrpc只支持tcp invoke。但它仍然得到golang客戶端的錯誤響應:golang jsonrpc調用Java JSON RPC

err: invalid error map[code:-32602 message:Invalid method parameters]

同時Java服務器也遇到錯誤:

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input at [Source: [email protected]; 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) at com.googlecode.jsonrpc4j.JsonRpcServer.handle(JsonRpcServer.java:224) at 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) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:744)

我不明白爲什麼它不工作,沒有任何紀律存在於jsonrpc協議中,golang不能調用java,或者我只是做不對嗎?

+0

我在嘗試類似的東西,並且遇到了死衚衕。就我所知,Go rpc軟件包僅支持Go服務器和客戶端,而不支持用其他語言編寫的Go服務器和客戶端。以下是Golang-Nuts谷歌組的一個編號:https://groups.google.com/forum/#!topic/golang-nuts/F0cuNKsH7c4 – Snowman

回答

0

我希望我有更好的答案。這是我試圖提前工作並且無法實現的事情。我讀過只有Go客戶端可以轉到Go服務器。

有我使出努力使Java和圍棋之間的JSON/RPC工作,也許你可以定製類似於您需要的東西后兩種手段。

在一種情況下,我用網/ HTTP包,並沒有在圍棋一個基本的Web服務器,然後使用HandlerFunc調用基於URL請求的功能/方法。這些請求基於簡單的http表單操作。然後我重定向回主頁面,因爲我希望「應用程序」留在用戶面前,因爲我只需要「/ submit」url來觸發具有從表單傳入的值的方法。

並非所有優雅,但它在緊要關頭工作迅速成立了一個方法來收集信息,並可以通過讓同事們知道我在監聽的端口號即刻「部署」。

在第二種情況下,因爲我的一個朋友被編程Java方面我設立了,我們已經在這將調用特定的功能同意字節模式上市的插座。

不那麼適應,但如果你什麼你從它的作品了精細的客戶端得到什麼。

+1

感謝您的回答。你以非常聰明的方式解決問題。但我終於解決了。有3個關鍵點。首先,golang的json-rpc遵守了rpc的規則,該規則的功能應該只有一個收入準則。其次,在java json-rpc中註冊的方法名稱不像golang,它只是方法的名稱,不包括類名稱。第三,保持程序在socket中通信,而不是Http。 [這是我的演示代碼,如果你感興趣](http://www.cnblogs.com/geomantic/p/4751859.html),不好意思用中文寫,你可以看看代碼。 –

+0

謝謝。我一定會看看你的演示。 – Snowman