Apache Olingo OData V4 Проблема синтаксического анализа ClientEntitySetIterator с фигурными скобками - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь проанализировать клиентские объекты, возвращенные после вызова API, используя Apache Olingo V4.Я вижу ошибку ниже, когда строка значения содержит "{" или "}", даже если возвращаемые данные представлены в формате JSON, а квадратные скобки заключены в кавычки.

Ошибка:

[main]: 2019-03-13 13: 52: 21,719 ERROR JOID [] JNAME [] [ClientEntitySetIterator] - Ошибка при получении сущностей из EntitySet org.apache.olingo.client.api.serialization.ODataDeserializerException: com.fasterxml.jackson.core.JsonParseException: неожиданный конец ввода в VALUE_STRING

код

URIBuilder uriBuilder = client.newURIBuilder(url).appendEntitySetSegment("Orders");
    uriBuilder.addCustomQueryOption("$filter", filter.toString());
    uriBuilder.addCustomQueryOption("exported", "false");
    uriBuilder.addCustomQueryOption("$count", "true");
    URI absoluteUri = uriBuilder.build();

    ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> request = 
            client.getRetrieveRequestFactory().getEntitySetIteratorRequest(absoluteUri);
    request.addCustomHeader(HttpHeader.AUTHORIZATION, "Bearer "+token);
    request.addCustomHeader("exported", "false");
    request.setFormat(ContentType.APPLICATION_JSON);
    request.setAccept("application/json;odata.metadata=minimal");

    ODataRetrieveResponse<ClientEntitySetIterator<ClientEntitySet, ClientEntity>> response = request.execute();

    int res = response.getStatusCode();
    String message = response.getStatusMessage();

    ClientEntitySetIterator<ClientEntitySet, ClientEntity>  iterator = response.getBody();

    while(iterator.hasNext()) {
        ClientEntity ce = iterator.next();
        ClientEntityImpl impl = (ClientEntityImpl) ce;
        String shippingStatus = impl.getProperty(SHIPPINGSTATUS).getValue().toString();
        String checkoutStatus = impl.getProperty(CHECKOUTSTATUS).getValue().toString();
        String paymentStatus = impl.getProperty(PAYMENTSTATUS).getValue().toString();
    }

ЕслиВозвращаемый порядок содержит «{» или «}» в операторе значения, ошибка генерируется в позиции iterator.hasNext () в начале цикла while.Если это происходит, любые оставшиеся объекты не обрабатываются, даже если они не содержат скобок в операторах значения.Есть ли способ обработать эту сущность, не используя итератор ODataRetrieveResponse, или пропустить эту сущность и обработать все оставшиеся сущности?

...