Hi,
I am learning to use Multichain and tried sample code that I found to connect to Multichain blockchain. I am unable to connect and am receiving the error " The target server failed to respond ". The external IP address of server is 172.17.0.1 and port is 8333. Used the login credentials found in multichain.conf. Thanks in advance.
The code is as follows:
<----- Code Starts here ---->
package com.srs.multichain.json_rpc_client;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class RPCClient {
private static final String COMMAND_GET_BALANCE = "getbalance";
private static final String COMMAND_GET_INFO = "getinfo";
private static final String COMMAND_GET_NEW_ADDRESS = "getnewaddress";
private JSONObject invokeRPC(String id, String method, List<String> params) {
DefaultHttpClient httpclient = new DefaultHttpClient();
JSONObject json = new JSONObject();
json.put("id", id);
//json.put("chain_name", chainName);
json.put("method", method);
if (null != params) {
JSONArray array = new JSONArray();
array.addAll(params);
json.put("params", params);
}
JSONObject responseJsonObj = null;
try {
httpclient.getCredentialsProvider().setCredentials(new AuthScope("172.17.0.1", 8333),
new UsernamePasswordCredentials("multichainrpc", "FMHYwtrpoKRmUNySdXKCi8QFVNpvvAtqDxAvhfWw9DmK"));
StringEntity myEntity = new StringEntity(json.toJSONString());
System.out.println(json.toString());
HttpPost httppost = new HttpPost("http://multichainrpc:FMHYwtrpoKRmUNySdXKCi8QFVNpvvAtqDxAvhfWw9DmK@172.17.0.1:8333");
httppost.setEntity(myEntity);
System.out.println("executing request" + httppost.getRequestLine());
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
// System.out.println(EntityUtils.toString(entity));
}
JSONParser parser = new JSONParser();
responseJsonObj = (JSONObject) parser.parse(EntityUtils.toString(entity));
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (org.json.simple.parser.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
return responseJsonObj;
}
public Double getBalance(String chainName, String account) {
String[] params = { account };
JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_BALANCE, Arrays.asList(params));
return (Double)json.get("result");
}
public String getNewAddress(String chainName, String account) {
String[] params = { account };
JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_NEW_ADDRESS, Arrays.asList(params));
return (String)json.get("result");
}
public JSONObject getInfo(String chainName) {
JSONObject json = invokeRPC(UUID.randomUUID().toString(), COMMAND_GET_INFO, null);
return (JSONObject)json.get("result");
}
}
<----- Code snippet ends here ----->
I am receiving the following error -
{"method":"getinfo","id":"ddfe284b-d2af-4ea7-913e-26611729099e"}
executing requestPOST http://multichainrpc:FMHYwtrpoKRmUNySdXKCi8QFVNpvvAtqDxAvhfWw9DmK@172.17.0.1:8333 HTTP/1.1
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:101)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:633)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at com.srs.multichain.json_rpc_client.RPCClient.invokeRPC(RPCClient.java:50)
at com.srs.multichain.json_rpc_client.RPCClient.getInfo(RPCClient.java:95)
at com.srs.multichain.json_rpc_client.App.main(App.java:14)
Exception in thread "main" java.lang.NullPointerException
at com.srs.multichain.json_rpc_client.RPCClient.getInfo(RPCClient.java:96)
at com.srs.multichain.json_rpc_client.App.main(App.java:14)
<-------------- End of stacktrace ---------------->
Thanks,
Ramas.