Bitcoind gibt "Ungültige JSON-RPC 2.0-Antwort" zurück?

Ich fange an, eine grundlegende Implementierung von Bitcoin JSON RPC ( dzhuvinov-Bibliothek ) zu verwenden, und ich erhalte ein seltsames Ergebnis. Hier ist mein Code:

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());
}

Und die Antwort, die ich bekomme, ist:

Invalid JSON-RPC 2.0 response

Nur zu beachten - beim Ausführen dieses Python-Skripts:

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

Ich erhalte ein korrektes Ergebnis.

Was könnte dieses Problem verursachen und wie kann ich es beheben?

Könnten Sie beiden einen Paketschnüffler anhängen?
@NickODell Versucht, aber gescheitert. Obwohl ich das Problem auf andere Weise herausgefunden habe.

Antworten (1)

Wie sich herausstellt, mag die von mir verwendete Bibliothek keine JSON-Antworten, die sowohl das Feld „error“ als auch „response“ enthalten, selbst wenn das Feld „error“ auf null gesetzt ist. Ich habe den Ersteller der Bibliothek bereits benachrichtigt, um dieses Problem möglicherweise zu beheben, und ich habe es auch selbst gepatcht:

In der private Map<String,Object> parseJSONObject(final String jsonString)Funktion muss man das am Ende hinzufügen:

    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;