さて、Etherumでいろいろ動いてきたのでJavaのアプリとの接続をやってみる。
とりあえずはシンプルなJavaクライアントでGethにアクセスしてみます。
gethのRCP呼び出し方を調べる
まずたたくメソッド決めましょう。
とりあえずはJSON RPC API Referenceの中でも一番代表的な「web3_clientVersion」をたたいてみることにします。
JSON RPC · ethereum/wiki Wiki · GitHub
パラメータは上記に詳しく書いてありますが、
送信データ
- jsonrpc:apiversion
- method-web3_clientVersion
- params:なし
- id:任意の数字
レスポンスデータ
- jsonrpc:apiversion
- id:任意の数字
- result:API結果
といったものが帰ってくる。
サンプルに従ってコマンドでたたくとこんな感じですね
curl -X POST http://192.168.56.101:8545 --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' {"id":67,"jsonrpc":"2.0","result":"Geth/v1.4.0-unstable/linux/go1.5.1"}
動いているようですね。
あ、もちろんですが、これをたたく前にgethをRPC有で起動しておきましょう。
起動方法について詳しくは以下に記載しています。
garapon.hatenablog.com
JsonClientの作成
とにかく簡単に作りたいので、クライアントにはjersey、JSON関連の処理はJSONICを使う事にしました。
gradleに以下を設定して
compile 'org.apache.httpcomponents:httpclient:4.5.1' compile 'com.sun.jersey:jersey-client:1.9.1'
以下のようなクライアントソースを書きます。
jerseyを使うとHTTPClientとかで書くより相当短くかけますね。
(SendDataは各SetterGetterを持っただけのVOです。JSONIC用に作っていますがMapとでもいいです)
package jp.co.gara; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import net.arnx.jsonic.JSON; /** * Created by gara on 2015/12/22. */ public class JsonClient { public static void main(String[] args) { SendData data = new SendData(); data.setId("56"); data.setRpcVersion("2.0"); data.setMethod("web3_clientVersion"); String jsonText = JSON.encode(data); Client c = Client.create(); WebResource resource = c.resource("http://192.168.56.101:8545/"); String response = resource.accept("application/json").post(String.class, jsonText); System.out.println("SendData " + jsonText); System.out.println("Response " + response); } }
接続
さて動かしてみると、、、
SendData {"id":"56","method":"web3_clientVersion","params":null,"rpcVersion":"2.0"} Response {"id":"56","jsonrpc":"","result":"Geth/v1.4.0-unstable/linux/go1.5.1"}
できました!これで何でもやり放題になってきましたね。