Вы можете использовать Olingo V2 в качестве клиента OData (хотя, на мой взгляд, довольно уродливый).На официальном сайте Olingo есть полное руководство по этому вопросу: Как использовать Apache Olingo в качестве клиентской библиотеки .
Olingo знает, как создавать запросы и анализировать ответы, но вам нуженмеханизм выполнения HTTP-вызовов.Я бы рекомендовал не полагаться на ручное открытие HttpURLConnections, как в приведенном выше примере, а вместо этого использовать что-то вроде Apache Http Client или какую-то другую выделенную библиотеку (чтобы уменьшить объем кода, который вы пишете, а такжеиметь доступ к более продвинутым концепциям, таким как опрос соединения).
В двух словах, вы должны сначала прочитать и проанализировать метаданные службы, которую вы хотите использовать:
// content = read the metadata as an InputStream
Edm dataModel = EntityProvider.readMetadata(content, false);
Пакетный запрос можно создать с помощью API в свободном стиле:
BatchQueryPart part = BatchQueryPart.method("GET")
.uri("/Employees('1')")
.build();
// here you could have a larger list of parts, not just a singleton list
InputStream payload = EntityProvider.writeBatchRequest(
Collections.singletonList(part), "batch_boundary");
Затем вам нужно просто выполнить его, используя выбранный вами механизм выполнения HTTP-запроса (method = "POST" и body = переменная payload).После этого вы можете проанализировать полученный ответ с помощью Olingo:
// body = the response body received
// contentType = the Content-Type header received
List<BatchSingleResponse> responses =
EntityProvider.parseBatchResponse(responseBody, contentType);
// you can obtain the body for each request from the response list
String partBody = responses.get(0).getBody();
InputStream partStream = new ByteArrayInputStream(partBody.getBytes());
String partType = responses.get(0).getHeader(HttpHeaders.CONTENT_TYPE);
Наконец, используя Edm с первого шага, вы также можете проанализировать каждое отдельное тело в зависимости от типа создаваемого вами запроса.Например, вы можете использовать метод readEntry , чтобы десериализовать чтение одной сущности:
// first we have to find the entity set you used to make the request
EdmEntitySet entitySet = edm.getDefaultEntityContainer()
.getEntitySet("Employees");
ODataEntry entry = EntityProvider.readEntry(partType, entitySet,
partStream, EntityProviderReadProperties.init().build())
Наконец, вы можете использовать методы ввода , чтобы получить, например,свойства.