You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/07/18 11:21:38 UTC
olingo-odata2 git commit: [OLINGO-733] Minor adaptions and more tests
Repository: olingo-odata2
Updated Branches:
refs/heads/OLINGO-733_BatchFix be1b8ca59 -> 243f707b3
[OLINGO-733] Minor adaptions and more tests
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/243f707b
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/243f707b
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/243f707b
Branch: refs/heads/OLINGO-733_BatchFix
Commit: 243f707b3f5f72c77e4a66390a8486da5548e24c
Parents: be1b8ca
Author: mibo <mi...@mirb.de>
Authored: Sat Jul 18 11:21:24 2015 +0200
Committer: mibo <mi...@mirb.de>
Committed: Sat Jul 18 11:21:24 2015 +0200
----------------------------------------------------------------------
.../odata2/api/processor/ODataResponse.java | 21 +++++-
.../odata2/core/batch/BatchResponseWriter.java | 22 ++++--
.../v2/BufferedReaderIncludingLineEndings.java | 1 -
.../olingo/odata2/core/ODataResponseTest.java | 26 +++++--
.../core/batch/BatchResponseWriterTest.java | 74 ++++++++++++++++++++
.../odata2/testutil/helper/StringHelper.java | 6 +-
6 files changed, 136 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/243f707b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/processor/ODataResponse.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/processor/ODataResponse.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/processor/ODataResponse.java
index a4a4daf..f74d488 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/processor/ODataResponse.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/processor/ODataResponse.java
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.exception.ODataException;
@@ -41,6 +43,7 @@ import org.apache.olingo.odata2.api.rt.RuntimeDelegate;
public abstract class ODataResponse {
private static final Charset DEFAULT_CHARSET = Charset.forName("utf-8");
+ public static final Pattern CHARSET_MATCHER_PATTERN = Pattern.compile("(charset=[\\w-]*)", Pattern.CASE_INSENSITIVE);
/**
* Do not subclass ODataResponse!
@@ -68,12 +71,28 @@ public abstract class ODataResponse {
} else if(obj instanceof byte[]) {
return new ByteArrayInputStream((byte[]) obj);
} else if(obj instanceof String) {
- return new ByteArrayInputStream(((String) obj).getBytes(DEFAULT_CHARSET));
+ return getInputStream((String) obj);
}
throw new ODataException("Entity is not an instance of an InputStream (entity class: " +
(obj == null ? "NULL": obj.getClass()) + ")");
}
+ private InputStream getInputStream(String stringEntity) throws ODataException {
+ try {
+ String contentHeader = getContentHeader();
+ Charset charset = DEFAULT_CHARSET;
+ if(contentHeader != null) {
+ Matcher matcher = CHARSET_MATCHER_PATTERN.matcher(contentHeader);
+ if(matcher.find()) {
+ charset = Charset.forName(matcher.group(0).split("=")[1]);
+ }
+ }
+ return new ByteArrayInputStream(stringEntity.getBytes(charset));
+ } catch (Exception e) {
+ throw new ODataException("Unexpected exception for wrapping of String entity into InputStream.");
+ }
+ }
+
/**
* Close the underlying entity input stream (if such a stream is available) and release all with this repsonse
* associated resources.
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/243f707b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
index b386e31..bff2f03 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
@@ -18,10 +18,6 @@
******************************************************************************/
package org.apache.olingo.odata2.core.batch;
-import java.io.ByteArrayInputStream;
-import java.nio.charset.Charset;
-import java.util.List;
-
import org.apache.olingo.odata2.api.batch.BatchException;
import org.apache.olingo.odata2.api.batch.BatchResponsePart;
import org.apache.olingo.odata2.api.commons.HttpContentType;
@@ -29,17 +25,33 @@ import org.apache.olingo.odata2.api.commons.HttpHeaders;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.processor.ODataResponse;
+import java.util.List;
+
public class BatchResponseWriter {
private static final String COLON = ":";
private static final String SP = " ";
private static final String CRLF = "\r\n";
private BatchHelper.BodyBuilder writer = new BatchHelper.BodyBuilder();
// private static final Charset DEFAULT_CHARSET = BatchHelper.DEFAULT_CHARSET;
+ private final boolean writeEntityAsUtf8String;
+
+ public BatchResponseWriter() {
+ this(true);
+ }
+
+ public BatchResponseWriter(boolean writeEntityAsUtf8String) {
+ this.writeEntityAsUtf8String = writeEntityAsUtf8String;
+ }
public ODataResponse writeResponse(final List<BatchResponsePart> batchResponseParts) throws BatchException {
String boundary = BatchHelper.generateBoundary("batch");
appendResponsePart(batchResponseParts, boundary);
- String batchResponseBody = writer.getContentAsString(BatchHelper.DEFAULT_CHARSET);
+ final Object batchResponseBody;
+ if(writeEntityAsUtf8String) {
+ batchResponseBody = writer.getContentAsString(BatchHelper.DEFAULT_CHARSET);
+ } else {
+ batchResponseBody = writer.getContentAsStream();
+ }
return ODataResponse.entity(batchResponseBody).status(HttpStatusCodes.ACCEPTED)
.header(HttpHeaders.CONTENT_TYPE, HttpContentType.MULTIPART_MIXED + "; boundary=" + boundary)
.header(HttpHeaders.CONTENT_LENGTH, String.valueOf(writer.getLength()))
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/243f707b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
index b20ec98..a8a8af9 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
@@ -18,7 +18,6 @@
******************************************************************************/
package org.apache.olingo.odata2.core.batch.v2;
-import org.apache.olingo.odata2.api.commons.HttpHeaders;
import org.apache.olingo.odata2.core.commons.ContentType;
import java.io.IOException;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/243f707b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
index 22a693e..25c65b5 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
@@ -57,19 +57,33 @@ public class ODataResponseTest extends BaseTest {
}
@Test
- public void buildEntityAsStreamResponseTest() throws ODataException {
- ODataResponse response = ODataResponse.entity(new ByteArrayInputStream("abc".getBytes())).build();
+ public void buildEntityAsStreamResponseTest() throws Exception {
+ ODataResponse response = ODataResponse.entity("abc").build();
assertNull(response.getStatus());
- assertNotNull(response.getEntityAsStream());
+ InputStream entityAsStream = response.getEntityAsStream();
+ assertNotNull(entityAsStream);
+ assertEquals("abc", StringHelper.inputStreamToString(entityAsStream));
}
@Test
- public void buildEntityAsStreamResponseFailTest() throws Exception {
- ODataResponse response = ODataResponse.entity("abc").build();
+ public void buildEntityAsStreamResponseTestCharset() throws Exception {
+ ODataResponse response = ODataResponse.entity("äbc")
+ .contentHeader("app/json; charset=utf-8").build();
assertNull(response.getStatus());
InputStream entityAsStream = response.getEntityAsStream();
assertNotNull(entityAsStream);
- assertEquals("abc", StringHelper.inputStreamToString(entityAsStream));
+ assertEquals("äbc", StringHelper.inputStreamToString(entityAsStream));
+ }
+
+ @Test
+ public void buildEntityAsStreamResponseTestCharsetIso() throws Exception {
+ ODataResponse response = ODataResponse.entity("äbc")
+ .contentHeader("app/json; charset=iso-8859-1").build();
+ assertNull(response.getStatus());
+ InputStream entityAsStream = response.getEntityAsStream();
+ assertNotNull(entityAsStream);
+ StringHelper.Stream s = StringHelper.toStream(entityAsStream);
+ assertEquals("äbc", s.asString("iso-8859-1"));
}
@Test
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/243f707b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
index b8f6b02..40c0789 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
@@ -204,4 +204,78 @@ public class BatchResponseWriterTest {
assertTrue(lines.get(index++).toString().startsWith("--batch"));
}
+ @Test
+ public void testResponseIso() throws Exception {
+ List<BatchResponsePart> parts = new ArrayList<BatchResponsePart>();
+ StringHelper.Stream stream = StringHelper.toStream("Wälter Winter", "iso-8859-1");
+ ODataResponse response =
+// ODataResponse.entity(stream.asString("iso-8859-1"))
+ ODataResponse.entity(stream.asStream())
+ .contentHeader("application/json; charset=iso-8859-1")
+ .status(HttpStatusCodes.OK)
+ .build();
+ List<ODataResponse> responses = new ArrayList<ODataResponse>(1);
+ responses.add(response);
+ parts.add(BatchResponsePart.responses(responses).changeSet(false).build());
+ BatchResponseWriter writer = new BatchResponseWriter(false);
+ ODataResponse batchResponse = writer.writeResponse(parts);
+
+ assertEquals(202, batchResponse.getStatus().getStatusCode());
+ assertNotNull(batchResponse.getEntity());
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(batchResponse.getEntityAsStream());
+ List<Line> lines = reader.toLineList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 200 OK" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Type: application/json; charset=iso-8859-1" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("Wälter Winter" + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ }
+
+ @Test
+ public void testResponseUtf() throws Exception {
+ List<BatchResponsePart> parts = new ArrayList<BatchResponsePart>();
+ String charset = "utf-8";
+ StringHelper.Stream stream = StringHelper.toStream("Wälter Winter", charset);
+ ODataResponse response =
+ ODataResponse.entity(stream.asString(charset))
+ .contentHeader("application/json; charset=" + charset)
+ .status(HttpStatusCodes.OK)
+ .build();
+ List<ODataResponse> responses = new ArrayList<ODataResponse>(1);
+ responses.add(response);
+ parts.add(BatchResponsePart.responses(responses).changeSet(false).build());
+ BatchResponseWriter writer = new BatchResponseWriter();
+ ODataResponse batchResponse = writer.writeResponse(parts);
+
+ assertEquals(202, batchResponse.getStatus().getStatusCode());
+ assertNotNull(batchResponse.getEntity());
+// String body = (String) batchResponse.getEntity();
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(batchResponse.getEntityAsStream());
+ List<Line> lines = reader.toLineList();
+ reader.close();
+ int index = 0;
+
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("HTTP/1.1 200 OK" + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Type: application/json; charset=" + charset + CRLF, lines.get(index++).toString());
+ assertEquals("Content-Length: 14" + CRLF, lines.get(index++).toString());
+ assertEquals(CRLF, lines.get(index++).toString());
+ assertEquals("Wälter Winter" + CRLF, lines.get(index++).toString());
+ assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/243f707b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
index 2fd6f8a..c6e7278 100644
--- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
+++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/helper/StringHelper.java
@@ -117,8 +117,12 @@ public class StringHelper {
}
public static Stream toStream(final String content) {
+ return toStream(content, "utf-8");
+ }
+
+ public static Stream toStream(final String content, final String charset) {
try {
- return new Stream(content, "UTF-8");
+ return new Stream(content, charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UTF-8 should be supported on each system.");
}