Rally RESTクエリMalformedJSonexceptionを投げます
質問
ラリーデータベースから何かを照会しようとしています。今、私は最初に通過できることを確認しようとしています。このコード:
//create rallyrest object
RallyRestApi restApi = new RallyRestApi(new URI(hostname), username, password);
restApi.setApplicationName("QueryTest");
restApi.setWsapiVersion("v2.0");
restApi.setApplicationVersion("1.1");
System.out.println("1: So far, so good -- RallyRestApi object created");
try {
//create query request
String type = "HierarchicalRequirement";
QueryRequest qreq = new QueryRequest(type);
System.out.println("2: Still going -- Query Request Created");
//set fetch, filter, and project
qreq.setFetch(new Fetch("Name","FormattedID"));
qreq.setQueryFilter(new QueryFilter("Name", "contains", "freight"));
qreq.setProject(projectNumber);
System.out.println("3: Going strong -- Fetch, Filter, and Project set");
//create response from query********Blows up
QueryResponse resp = restApi.query(qreq);
System.out.println("4: We made it!");
} catch (Exception e) {
System.out.println("Error: " + e);
}
finally {
restApi.close();
}
}
.
このエラーを与えます:
Exception in thread "main" com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 22
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:18)
at com.rallydev.rest.RallyRestApi.query(RallyRestApi.java:227)
at RQuery.main(RQuery.java:65)
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 22
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 more
Java Result: 1
.
誰かがこれが起こっている理由を説明してください?私のコードは間違っていますか?エラーが提案されてjson.lenient(true)を設定するときにする必要がある場合は、コードでそれをする方法について説明してください。
ありがとうございました!
解決
あなたのコードは私のために働いています。コードに問題がないわけではありません。 別のクエリを試してみてください、多分いくつかの追加文字があるかもしれません。 この記事 - 末尾のNUL(\ 0)文字の場合が記載されています。おそらくあなたはtrueにLenientを設定する必要がありますが、それをする方法がわかりません:ラリーQueryResponseを操作するときに直接アクセスはありません。
別のクエリを試してみる理由は、2つのローカル要因があることです.Java環境とデータ。 MalformedJSonexceptionはデータを指す悪いJSONを示します。 "name"と "formattedid"のみがフェッチしているので、チャンスは名前のどこかにあります。異なるクエリを試してください。 (FormattedID = US123)
では、名前に「貨物」を含まないストーリーを選択してください。少なくとも1つの特定のクエリが機能することを確立します。これは、問題が実際にデータに関連しており、環境ではありません。
次に、同じクエリ(名前に "freight")を直接試してください。 / a>は、クエリをテストできる対話型文書です。コード内のクエリと同等のものをブラウザに貼り付けることもできます。
https://rally1.rallydev.com/slm/webservice/v2.0/hierarchicalrequirement?workspace=https://rally1.rallydev.com/slm/webservice/v2.0/workspace/123&query=(Name%20contains%20%22fraight%22)&start=1&pagesize=200&fetch=Name,FormattedID
.
/workspace/123
の123をワークスペースの有効なOIDに置き換えてください。
クエリが返されるか、ブラウザに同じエラーが表示されますか? クエリが戻った場合、TotalResultCountは何ですか?
合計結果カウントはさらにトラブルシューティングに役立ちます。あなたは一度に1ページに1ページを実行し、totalResultCountを知っているかもしれません、あなたのコードを操作することが可能です。これが例です。
qreq.setpageSize(200)。 qreq.setstart(2); qreq.setlimit(200);
最大PageSizeは200です。デフォルトは20です。使用する実際の番号はTotalResultCountによって異なります。 クエリの開始インデックスは1から始まります。デフォルトは1です。この例では、2ページ目のページ
で始まります。私の環境はJava SE 1.6で、これらの瓶:
httpcore-4.2.4.jar
httpclient-4.2.5.jar
commons-logging-1.1.1.jar
commons-codec-1.6.jar
GSON-2.2.4.jar
RALLY-REST-API-2.0.4.jar