Биткойн возвращает «Неверный ответ JSON-RPC 2.0»?

Я начинаю использовать базовую реализацию Bitcoin JSON RPC ( библиотека dzhuvinov ), и получаю странный результат. Вот мой код:

public static void main(String[] args)
{
    URL serverURL = null;

    final String rpcuser ="user";
      final String rpcpassword ="pass";

      Authenticator.setDefault(new Authenticator() {
          protected PasswordAuthentication getPasswordAuthentication() {
              return new PasswordAuthentication (rpcuser, rpcpassword.toCharArray());
          }
      });
    try {
        serverURL = new URL("http://127.0.0.1:18332/");

    } catch (MalformedURLException e) {
        System.err.println(e.getMessage());
        return;
    }
     JSONRPC2Session mySession = new JSONRPC2Session(serverURL);
     String method = "getinfo";
     int requestID = 0;
     JSONRPC2Request request = new JSONRPC2Request(method, requestID);
     JSONRPC2Response response = null;
     try {
             response = mySession.send(request);

     } catch (JSONRPC2SessionException e) {
             System.err.println(e.getMessage());
             return;
     }
     if (response.indicatesSuccess())
        System.out.println(response.getResult());
    else
        System.out.println(response.getError().getMessage());
}

И ответ, который я получаю:

Invalid JSON-RPC 2.0 response

Просто отметим - при выполнении этого скрипта Python:

access = jsonrpc.ServiceProxy("http://user:pass@127.0.0.1:18332/")
print access.getinfo()

Я получаю должные результаты.

Что может быть причиной этой проблемы и как мне ее исправить?

Не могли бы вы подключить анализатор пакетов к ним обоим?
@NickODell Пытался, но не смог. Хотя я понял в чем проблема как-то по другому.

Ответы (1)

Как оказалось, библиотека, которую я использую, не любит ответы JSON, содержащие как поле «ошибка», так и «ответ», даже если для поля «ошибка» установлено значение null. Я уже уведомил создателя библиотеки о возможном исправлении этой проблемы, и я также исправил ее сам:

В private Map<String,Object> parseJSONObject(final String jsonString)функцию нужно добавить это в конце:

    Map<String,Object> answer = (Map<String,Object>)json;

    if (answer.containsKey("error")){
        if (answer.get("error")==null){
            answer.remove("error");
        }
    }
    if (answer.containsKey("result")){
        if (answer.get("result")==null){
            answer.remove("result");
        }
    }

    return answer;