使用拉力赛休息api v2.0从集会中获取缺陷

时间:2015-05-15 09:43:31

标签: rally

每当我尝试从集会中获取缺陷时,我都会收到以下异常:

            com.google.gson.JsonSyntaxException: 
            com.google.gson.stream.MalformedJsonException: Use  JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12
            at com.google.gson.JsonParser.parse(JsonParser.java:65)
            at com.google.gson.JsonParser.parse(JsonParser.java:45)
            at com.rallydev.rest.response.Response.<init>(Response.java:25)
            at com.rallydev.rest.response.QueryResponse.<init>(QueryResponse.java:16)
            at com.rallydev.rest.RallyRestApi.query(RallyRestApi.java:168)
            at Test.main(Test.java:86)
            Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12
            at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505)
            at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386)
            at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:531)
            at com.google.gson.stream.JsonReader.peek(JsonReader.java:414)
            at com.google.gson.JsonParser.parse(JsonParser.java:60)
            ... 5

最让我感兴趣的是代码在少数几台机器上运行得非常好,并且在少数机器上引发了上述异常。

代码段:

RallyRestApi restApi = 
new RallyRestApi(new URI("http://rally1.rallydev.com"),apiKey);
QueryRequest queryRequest = new QueryRequest("defects");
queryRequest.setFetch(new Fetch("Project","FormattedID","Release"));
QueryFilter filter1 = new QueryFilter("FormattedID", "=", defetctID);
QueryResponse queryResponse1 =  restApi.query(queryRequest);

1 个答案:

答案 0 :(得分:0)

尝试使用curl命令在java代码失败的同一台机器上使用相同的apiKey(在zsessionid头文件中)读取相同的缺陷。

curl --header "ZSESSIONID: _abc123" "https://rally1.rallydev.com/slm/webservice/v2.0/defect/123456789"

至少你会知道这是否特定于java。是的,奇怪的是它在某些机器上失败并在其他机器上工作,但是这些测试的时间在你的帖子中并不明显,我想知道这是否与底层用户凭据有关。 (用户在多次尝试失败后被禁用一段时间)。我并不认为这是您遇到的问题,但我已经看到过期密码导致完全相同的错误。 API密钥绑定到用户,因此当用户的密码过期时,或者当用户未激活(禁用)时,相同的权限(或缺少密码)会反映在密钥中。例如,用户不知道密码已过期,因为在Rally UI中他们使用SSO身份验证,但在代码中他们使用用户名/密码或APIKey,因为此时工具包不支持SSO。 401错误会更有帮助,但会生成格式错误的JSON。