3

我想为我的 Play设置Janrain身份验证!托管在 GAE 上并使用 GAE 模块的项目。但是我在尝试登录时收到以下错误:

RuntimeException occured : Cannot parse JSON (check logs)

Play 将以下行突出显示为错误:

JsonElement rpxJson = rpxRequest.get().getJson();

这是我用于令牌回调的方法:

public static void tokenCallback(String token) {
    Properties p = Play.configuration;
    // Try the driver
    String rpxApi = p.getProperty("login.rpx.apiKey");


    WSRequest rpxRequest = WS.url("http://rpxnow.com/api/v2/auth_info");
    // get RPX
    rpxRequest.setParameter("token", token);
    rpxRequest.setParameter("apiKey", rpxApi);

    JsonElement rpxJson = rpxRequest.get().getJson();
    JsonElement profile = rpxJson.getAsJsonObject().get("profile");
    String identifier = profile.getAsJsonObject().getAsJsonPrimitive("identifier").getAsString();

    welcome(identifier);

}

这是我从终端得到的错误:

Internal Server Error (500) for request POST /login/tokencallback

Execution exception (In /app/controllers/Login.java around line 27)
RuntimeException occured : Cannot parse JSON (check logs)

play.exceptions.JavaExecutionException: Cannot parse JSON (check logs)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:237)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.RuntimeException: Cannot parse JSON (check logs)
    at play.libs.WS$HttpResponse.getJson(WS.java:668)
    at controllers.Login.tokenCallback(Login.java:27)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:557)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:508)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:484)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:479)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
    ... 1 more
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected EOF at line 2 column 1
    at com.google.gson.JsonParser.parse(JsonParser.java:65)
    at com.google.gson.JsonParser.parse(JsonParser.java:45)
    at play.libs.WS$HttpResponse.getJson(WS.java:665)
    ... 7 more
Caused by: com.google.gson.stream.MalformedJsonException: Expected EOF at line 2 column 1
    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1310)
    at com.google.gson.stream.JsonReader.peek(JsonReader.java:390)
    at com.google.gson.JsonParser.parse(JsonParser.java:60)
    ... 9 more

我能做些什么?请帮我解决这个问题。

提前致谢。

4

2 回答 2

2

好的,这是我的第一个建议。尝试对 URL 使用 HTTPS 连接。我遇到了 HTTP 连接的一些问题。这是我进行 Janrain 连接的方法:

        WSRequest rpxRequest = WS.url("https://rpxnow.com/api/v2/auth_info");
        // get RPX
        rpxRequest.setParameter("token", token);
        rpxRequest.setParameter("apiKey", rpxApi);

        HttpResponse res = null;
        try {
            res = rpxRequest.post();
        } catch (JavaExecutionException ex) {
            Log.error("unknown error ", ex);
            Validation.addError("", "Unknown Error: please try again");
            Validation.keep();
            Secure.login();
        } catch (Exception ex) {
            Log.error("Most likely SSL error", ex);
            Validation.addError("", "SSL Error: please try again");
            Validation.keep();
            Secure.login();
        }
        if (res.getStatus() != 200) {
            Log.error("status 200 error");
            Validation.addError("", "Status 200 error: please try again");
            Validation.keep();
            Secure.login();
        }
        JsonElement rpxJson = res.getJson();
        JsonElement profile = rpxJson.getAsJsonObject().get("profile");
        JsonObject profileJson = profile.getAsJsonObject();
于 2012-08-22T16:05:57.820 回答
1

调用 URL http://rpxnow.com/api/v2/auth_info后,它立即重定向到https://rpxnow.com/api/v2/auth_info (http s )。我怀疑您没有得到 JSON 答案,而是在您对 Web 服务的调用中得到了一个 http 重定向代码。

两种可能:

1)将网络服务调用更改为https://rpxnow.com/api/v2/auth_info,这可能会解决您的问题,但失败了;

2)将行更改JsonElement rpxJson = rpxRequest.get().getJson();为类似

HttpResponse httpResponse = rpxRequest.get();
Logger.log ( httpResponse.getString() ); 
if ( httpResponse.success() ) {
    JsonElement rpxJson = httpResponse.getJson();
} else {
    // fail gracefully
}

并报告在第二行中记录的答案内容。

于 2012-08-22T06:53:30.263 回答