1

サンプル Java プログラムを実行して、rally から上位 5 つの欠陥を取得しようとしています。次のエラーが表示されます。

優先度の高い上位 5 つの未修正の不具合を照会しています...
スレッド「メイン」com.google.gson.JsonSyntaxException の例外: com.google.gson.stream.MalformedJsonException: 行 1 列 21 で EOF が予想されます
    com.google.gson.JsonParser.parse(JsonParser.java:65) で
    com.google.gson.JsonParser.parse(JsonParser.java:45) で
    com.rallydev.rest.response.Response.(Response.java:25) で
    com.rallydev.rest.response.QueryResponse.(QueryResponse.java:16) で
    com.rallydev.rest.RallyRestApi.query (RallyRestApi.java:179) で
    QueryExample.main で (QueryExample.java:36)
原因: com.google.gson.stream.MalformedJsonException: 行 1 列 21 で予期される EOF
    com.google.gson.stream.JsonReader.syntaxError (JsonReader.java:1298) で
    com.google.gson.stream.JsonReader.peek (JsonReader.java:390) で
    com.google.gson.JsonParser.parse(JsonParser.java:60) で
    ... 5 つ以上

ソースコードは次のとおりです。

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.rallydev.rest.RallyRestApi;
import com.rallydev.rest.request.QueryRequest;
import com.rallydev.rest.response.QueryResponse;
import com.rallydev.rest.util.Fetch;
import com.rallydev.rest.util.QueryFilter;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;



public class QueryExample {

    public static void main(String[] args) throws URISyntaxException, IOException {

        //Create and configure a new instance of RallyRestApi
        RallyRestApi restApi = new RallyRestApi(new URI("https://rally1.rallydev.com/#/4608446320ud"), "stephen5@netapp.com", "password");
        restApi.setApplicationName("QueryExample");

        try {

            System.out.println("Querying for top 5 highest priority unfixed defects...");

            QueryRequest defects = new QueryRequest("defect");

            defects.setFetch(new Fetch("FormattedID", "Name", "State", "Priority"));
            defects.setQueryFilter(new QueryFilter("State", "<", "Fixed"));
            defects.setOrder("Priority ASC,FormattedID ASC");

            //Return up to 5, 1 per page
            defects.setPageSize(1);
            defects.setLimit(5);

            QueryResponse queryResponse = restApi.query(defects);
            if (queryResponse.wasSuccessful()) {
                System.out.println(String.format("\nTotal results: %d", queryResponse.getTotalResultCount()));
                System.out.println("Top 5:");
                for (JsonElement result : queryResponse.getResults()) {
                    JsonObject defect = result.getAsJsonObject();
                    System.out.println(String.format("\t%s - %s: Priority=%s, State=%s",
                    defect.get("FormattedID").getAsString(),
                    defect.get("Name").getAsString(),
                    defect.get("Priority").getAsString(),
                    defect.get("State").getAsString()));
                }
            } else {
                System.err.println("The following errors occurred: ");
                for (String err : queryResponse.getErrors()) {
                    System.err.println("\t" + err);
                }
            }

        } finally {
            //Release resources
            restApi.close();
        }
    }
}          

これを引き起こしている原因についての助けは大歓迎です!

4

1 に答える 1

0

あなたのコードを見ると、あなたのURLは次のようになります:

URI("https://rally1.rallydev.com/#/4608446320ud")

問題は次のとおりです。

URI("https://rally1.rallydev.com").

Rally REST URL の形式は次のとおりです。

https://rally1.rallydev.com/slm/webservice/1.43/defect/12345678910.js

そのため、Java REST ライブラリがコードから構築された URL に対してクエリを作成しようとすると、次のようになります。

https://rally1.rallydev.com/#/4608446320ud/slm/webservice/1.43/defect/12345678910.js

これをブラウザーにプラグインすると、Rally 404 が表示されます。これには、JSON ではなく、多くの HTML とフォーマットが含まれています。「#/4608446320ud」文字列は RallyUI でのみ使用され、アプリでプロジェクトのスコープ情報を提供します。この UI コンテキストは、Java ツールキットが処理方法を知らなかった書式設定された HTML 404 応答を受け取る理由を説明しています。

于 2013-05-09T22:05:53.870 に答える