[OLINGO-1090] Incorrect content format in batch error response
happens when content type is application/json;odata=verbose
Signed-off-by: Christian Amend <christian.amend@sap.com>
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataExceptionWrapper.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataExceptionWrapper.java
index 4300ab1..9dc7cde 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataExceptionWrapper.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/rest/ODataExceptionWrapper.java
@@ -298,7 +298,8 @@
|| ContentType.APPLICATION_ATOM_XML_CS_UTF_8.equals(convertedContentType)) {
return ContentType.APPLICATION_XML;
} else if (ContentType.APPLICATION_JSON.equals(convertedContentType)
- || ContentType.APPLICATION_JSON_CS_UTF_8.equals(convertedContentType)) {
+ || ContentType.APPLICATION_JSON_CS_UTF_8.equals(convertedContentType)
+ || ContentType.APPLICATION_JSON_ODATA_VERBOSE.equals(convertedContentType)) {
return ContentType.APPLICATION_JSON;
}
}
@@ -343,7 +344,8 @@
|| ContentType.APPLICATION_ATOM_XML_CS_UTF_8.equals(convertedContentType)) {
return ContentType.APPLICATION_XML;
} else if (ContentType.APPLICATION_JSON.equals(convertedContentType)
- || ContentType.APPLICATION_JSON_CS_UTF_8.equals(convertedContentType)) {
+ || ContentType.APPLICATION_JSON_CS_UTF_8.equals(convertedContentType)
+ || ContentType.APPLICATION_JSON_ODATA_VERBOSE.equals(convertedContentType)) {
return ContentType.APPLICATION_JSON;
}
}
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/client/ClientBatchTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/client/ClientBatchTest.java
index cf6c9f3..66be286 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/client/ClientBatchTest.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/client/ClientBatchTest.java
@@ -319,4 +319,36 @@
assertTrue(requestBody.contains("--" + BOUNDARY));
assertTrue(requestBody.contains("--" + BOUNDARY + "--"));
}
+
+ @Test
+ public void testContentFormatErrorBatch() throws Exception {
+ List<BatchPart> batch = new ArrayList<BatchPart>();
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("DataServiceVersion", "2.0");
+ headers.put("MaxDataServiceVersion", "3.0");
+ headers.put("Accept", "application/json;odata=verbose");
+ BatchPart request = BatchQueryPart.method(ODataHttpMethod.GET.name())
+ .uri("nonsense")
+ .headers(headers)
+ .build();
+ batch.add(request);
+
+ InputStream body = EntityProvider.writeBatchRequest(batch, BOUNDARY);
+ String bodyAsString = StringHelper.inputStreamToStringCRLFLineBreaks(body);
+ checkMimeHeaders(bodyAsString);
+ checkBoundaryDelimiters(bodyAsString);
+
+ assertTrue(bodyAsString.contains("GET nonsense HTTP/1.1"));
+ HttpResponse batchResponse = execute(bodyAsString);
+ InputStream responseBody = batchResponse.getEntity().getContent();
+ String contentType = batchResponse.getFirstHeader(HttpHeaders.CONTENT_TYPE).getValue();
+ List<BatchSingleResponse> responses = EntityProvider.parseBatchResponse(responseBody, contentType);
+ for (BatchSingleResponse response : responses) {
+ assertEquals("404", response.getStatusCode());
+ assertEquals("Not Found", response.getStatusInfo());
+ assertEquals("application/json", response.getHeaders().get("Content-Type"));
+ assertEquals("{\"error\":{\"code\":null,\"message\":{\"lang\":\"en\",\"value\":"
+ + "\"Could not find an entity set or function import for 'nonsense'.\"}}}", response.getBody());
+ }
+ }
}