Вопрос

Я пытаюсь запросить что-то из базы данных Rally.Сейчас я просто пытаюсь убедиться, что смогу пройти изначально.Этот код:

//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).Возможно, вам нужно установить для lenient значение true, но я не знаю, как это сделать:прямого доступа к нему при работе с Rally QueryResponse нет.

Причина попробовать другой запрос заключается в том, что существуют два локальных фактора:ваша среда Java и ваши данные.MalformedJsonException указывает на неверный json, который указывает на данные.Вы получаете только «Имя» и «FormattedID», так что, скорее всего, виновник находится где-то в имени.Попробуйте другой запрос, например. (FormattedID = US123) но выбирайте тот рассказ, в названии которого нет слова «фрахт».Установите, что хотя бы один конкретный запрос работает — это дополнительно укажет на то, что проблема действительно связана с данными, а не со средой.

Затем попробуйте тот же запрос (имя содержит слово «фрахт») непосредственно в WS API, который представляет собой интерактивный документ, в котором можно тестировать запросы.Эквивалент запроса в вашем коде также можно вставить в браузер:

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

Обязательно замените 123 в /workspace/123 с действительным OID вашей рабочей области.

Запрос возвращается или вы видите ту же ошибку в браузере?Если запрос возвращает результат, что такое TotalResultCount?

Общее количество результатов поможет в дальнейшем устранении неполадок.Вы можете запускать свой код по одной странице за раз, и, зная TotalResultCount, можно манипулировать размером страницы, началом и ограничением, чтобы сузить ваш код до страницы, на которой существует виновная история (при условии, что виновная история существует).Вот пример:

qreq.setPageSize(200);qreq.setStart(2);qreq.setLimit(200);

Максимальный размер страницы — 200.По умолчанию — 20.Фактическое количество зависит от TotalResultCount.Начальный индекс запросов начинается с 1.Значение по умолчанию — 1.В этом примере мы начинаем со второй страницы.

Моя среда — Java SE 1.6 и эти банки:

httpcore-4.2.4.jar

httpclient-4.2.5.jar

commons-logging-1.1.1.jar

Commons-кодек-1.6.jar

gson-2.2.4.jar

ралли-rest-api-2.0.4.jar

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top