You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/08/17 11:07:51 UTC

olingo-odata4 git commit: [OLINGO-659] Fix minor stream issues

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 5248f3421 -> 1dd3a583f


[OLINGO-659] Fix minor stream issues


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/1dd3a583
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/1dd3a583
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/1dd3a583

Branch: refs/heads/master
Commit: 1dd3a583fff08033b21a3dd6cbb74c663f982b2c
Parents: 5248f34
Author: Christian Amend <ch...@sap.com>
Authored: Mon Aug 17 10:22:07 2015 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Mon Aug 17 11:01:57 2015 +0200

----------------------------------------------------------------------
 .../tecsvc/client/SystemQueryOptionITCase.java  |   2 +-
 .../commons/core/edm/EdmEnumTypeImpl.java       |  16 ++
 .../serializer/AbstractODataSerializer.java     |   8 +-
 .../serializer/json/ODataJsonSerializer.java    | 111 +++++++-------
 .../core/serializer/xml/ODataXmlSerializer.java | 145 ++++++++++---------
 .../server/core/edm/provider/EdmEnumTest.java   |   6 +
 6 files changed, 161 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1dd3a583/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/SystemQueryOptionITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/SystemQueryOptionITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/SystemQueryOptionITCase.java
index 3944f34..09c7cc6 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/SystemQueryOptionITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/SystemQueryOptionITCase.java
@@ -311,7 +311,7 @@ public class SystemQueryOptionITCase extends AbstractBaseTestITCase {
   @Override
   protected ODataClient getClient() {
     ODataClient odata = ODataClientFactory.getClient();
-    odata.getConfiguration().setDefaultPubFormat(ContentType  .JSON);
+    odata.getConfiguration().setDefaultPubFormat(ContentType.JSON);
     return odata;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1dd3a583/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmEnumTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmEnumTypeImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmEnumTypeImpl.java
index f1311c1..9b56ed2 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmEnumTypeImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmEnumTypeImpl.java
@@ -265,4 +265,20 @@ public class EdmEnumTypeImpl extends EdmTypeImpl implements EdmEnumType {
   public FullQualifiedName getAnnotationsTargetFQN() {
     return getFullQualifiedName();
   }
+  
+  @Override
+  public boolean equals(Object obj){
+    if(obj == null){
+      return false;
+    }
+    
+    if(obj instanceof EdmEnumType){
+      EdmEnumType other = (EdmEnumType) obj;
+      if(this.getFullQualifiedName().equals(other.getFullQualifiedName())){
+        return true;
+      }
+    }
+    
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1dd3a583/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/AbstractODataSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/AbstractODataSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/AbstractODataSerializer.java
index e34817d..ee472c6 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/AbstractODataSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/AbstractODataSerializer.java
@@ -19,18 +19,18 @@
 package org.apache.olingo.server.core.serializer;
 
 import java.io.IOException;
+import java.io.OutputStream;
 
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.SerializerException;
-import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer;
 
 public abstract class AbstractODataSerializer implements ODataSerializer {
 
-  protected void closeCircleStreamBufferOutput(CircleStreamBuffer buffer, SerializerException cachedException)
+  protected void closeCircleStreamBufferOutput(OutputStream outputStream, SerializerException cachedException)
       throws SerializerException {
-    if (buffer != null && buffer.getOutputStream() != null) {
+    if (outputStream != null) {
       try {
-        buffer.getOutputStream().close();
+        outputStream.close();
       } catch (IOException e) {
         if (cachedException != null) {
           throw cachedException;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1dd3a583/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index c7bd383..8c18f8f 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.server.core.serializer.json;
 
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -81,23 +82,24 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
   @Override
   public SerializerResult serviceDocument(final ServiceMetadata metadata, final String serviceRoot)
       throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
 
     try {
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       new ServiceDocumentJsonSerializer(metadata, serviceRoot, isODataMetadataNone).writeServiceDocument(json);
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -109,22 +111,23 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
 
   @Override
   public SerializerResult error(final ODataServerError error) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       new ODataErrorSerializer().writeErrorDocument(json, error);
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -132,11 +135,12 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
   public SerializerResult entityCollection(final ServiceMetadata metadata,
       final EdmEntityType entityType, final EntityCollection entitySet,
       final EntityCollectionSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       json.writeStartObject();
 
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
@@ -157,26 +161,27 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       writeNextLink(entitySet, json);
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
   @Override
   public SerializerResult entity(final ServiceMetadata metadata, final EdmEntityType entityType,
       final Entity entity, final EntitySerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       writeEntity(metadata, entityType, entity, contextURL,
           options == null ? null : options.getExpand(),
           options == null ? null : options.getSelect(),
@@ -184,14 +189,14 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
           json);
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -540,12 +545,13 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
   @Override
   public SerializerResult primitive(final ServiceMetadata metadata, final EdmPrimitiveType type,
       final Property property, final PrimitiveSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       json.writeStartObject();
       writeContextURL(contextURL, json);
       writeMetadataETag(metadata, json);
@@ -563,7 +569,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       json.writeEndObject();
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
@@ -575,19 +581,20 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
           property.getName(), property.getValue().toString());
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
   @Override
   public SerializerResult complex(final ServiceMetadata metadata, final EdmComplexType type,
       final Property property, final ComplexSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       json.writeStartObject();
       writeContextURL(contextURL, json);
       writeMetadataETag(metadata, json);
@@ -605,26 +612,27 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       json.writeEndObject();
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
   @Override
   public SerializerResult primitiveCollection(final ServiceMetadata metadata, final EdmPrimitiveType type,
       final Property property, final PrimitiveSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       json.writeStartObject();
       writeContextURL(contextURL, json);
       writeMetadataETag(metadata, json);
@@ -638,26 +646,27 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       json.writeEndObject();
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
   @Override
   public SerializerResult complexCollection(final ServiceMetadata metadata, final EdmComplexType type,
       final Property property, final ComplexSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
-      JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       json.writeStartObject();
       writeContextURL(contextURL, json);
       writeMetadataETag(metadata, json);
@@ -666,28 +675,29 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       json.writeEndObject();
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
   @Override
   public SerializerResult reference(final ServiceMetadata metadata, final EdmEntitySet edmEntitySet,
       final Entity entity, final ReferenceSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
 
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
       final UriHelper uriHelper = new UriHelperImpl();
-      final JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      outputStream = buffer.getOutputStream();
+      final JsonGenerator json = new JsonFactory().createGenerator(outputStream);
 
       json.writeStartObject();
       writeContextURL(contextURL, json);
@@ -695,14 +705,14 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       json.writeEndObject();
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -710,14 +720,15 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
   public SerializerResult referenceCollection(final ServiceMetadata metadata, final EdmEntitySet edmEntitySet,
       final EntityCollection entityCollection, final ReferenceCollectionSerializerOptions options)
       throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
 
     try {
       final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
-      buffer = new CircleStreamBuffer();
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
       final UriHelper uriHelper = new UriHelperImpl();
-      final JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
+      outputStream = buffer.getOutputStream();
+      final JsonGenerator json = new JsonFactory().createGenerator(outputStream);
       json.writeStartObject();
 
       writeContextURL(contextURL, json);
@@ -738,14 +749,14 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       json.writeEndObject();
 
       json.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final IOException e) {
       cachedException =
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
 
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1dd3a583/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
index e7d60c0..547c45f 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.server.core.serializer.xml;
 
 import java.io.IOException;
+import java.io.OutputStream;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
@@ -85,18 +86,18 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
   @Override
   public SerializerResult serviceDocument(final ServiceMetadata metadata, final String serviceRoot)
       throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(),
-          DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       ServiceDocumentXmlSerializer serializer = new ServiceDocumentXmlSerializer(metadata, serviceRoot);
-      serializer.writeServiceDocument(xmlStreamWriter);
+      serializer.writeServiceDocument(writer);
 
-      xmlStreamWriter.flush();
-      xmlStreamWriter.close();
-      buffer.getOutputStream().close();
+      writer.flush();
+      writer.close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -108,24 +109,24 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
   @Override
   public SerializerResult metadataDocument(final ServiceMetadata serviceMetadata) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(),
-          DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       MetadataDocumentXmlSerializer serializer = new MetadataDocumentXmlSerializer(serviceMetadata);
-      serializer.writeMetadataDocument(xmlStreamWriter);
+      serializer.writeMetadataDocument(writer);
 
-      xmlStreamWriter.flush();
-      xmlStreamWriter.close();
-      buffer.getOutputStream().close();
+      writer.flush();
+      writer.close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -137,7 +138,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -148,12 +149,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           SerializerException.MessageKeys.NULL_INPUT);
     }
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(),
-          DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
 
       writer.writeStartElement("error");
@@ -171,7 +172,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
 
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -183,7 +184,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -218,12 +219,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       return entityReferenceCollection(metadata, entityType, entitySet, rso);
     }
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writer.writeStartElement(ATOM, "feed", NS_ATOM);
       writer.writeNamespace(ATOM, NS_ATOM);
@@ -260,7 +261,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
 
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -272,7 +273,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -287,12 +288,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       return entityReference(metadata, entityType, entity, rso);
     }
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writeEntity(metadata, entityType, entity, contextURL,
           options == null ? null : options.getExpand(),
@@ -302,7 +303,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
 
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -314,7 +315,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -802,12 +803,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       final Property property, final PrimitiveSerializerOptions options) throws SerializerException {
     final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
 
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writer.writeStartElement(METADATA, "value", NS_METADATA);
@@ -832,7 +833,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       writer.writeEndDocument();
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -849,7 +850,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -858,13 +859,13 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       final Property property, final ComplexSerializerOptions options) throws SerializerException {
     final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
       EdmComplexType resolvedType = resolveComplexType(metadata, type, property.getType());
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writer.writeStartElement(METADATA, "value", NS_METADATA);
       writer.writeNamespace(METADATA, NS_METADATA);
@@ -883,7 +884,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       writer.writeEndDocument();
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -895,7 +896,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -904,12 +905,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       final Property property, final PrimitiveSerializerOptions options) throws SerializerException {
     final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
 
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writer.writeStartElement(METADATA, "value", NS_METADATA);
@@ -931,7 +932,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       writer.writeEndDocument();
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -948,7 +949,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -957,12 +958,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       final Property property, final ComplexSerializerOptions options) throws SerializerException {
     final ContextURL contextURL = checkContextURL(options == null ? null : options.getContextURL());
 
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
 
       writer.writeStartElement(METADATA, "value", NS_METADATA);
       writer.writeNamespace(METADATA, NS_METADATA);
@@ -976,7 +977,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       writer.writeEndDocument();
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
       cachedException =
@@ -987,7 +988,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -999,18 +1000,18 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
 
   protected SerializerResult entityReference(final ServiceMetadata metadata, final EdmEntityType entityType,
       final Entity entity, ReferenceSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writeReference(metadata, entityType, entity, options == null ? null : options.getContextURL(), writer, true);
       writer.writeEndDocument();
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -1022,7 +1023,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 
@@ -1050,12 +1051,12 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
   protected SerializerResult entityReferenceCollection(final ServiceMetadata metadata,
       final EdmEntityType entityType, final EntityCollection entitySet,
       ReferenceCollectionSerializerOptions options) throws SerializerException {
-    CircleStreamBuffer buffer = null;
+    OutputStream outputStream = null;
     SerializerException cachedException = null;
     try {
-      buffer = new CircleStreamBuffer();
-      XMLStreamWriter writer =
-          XMLOutputFactory.newInstance().createXMLStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET);
+      CircleStreamBuffer buffer = new CircleStreamBuffer();
+      outputStream = buffer.getOutputStream();
+      XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outputStream, DEFAULT_CHARSET);
       writer.writeStartDocument(ODataSerializer.DEFAULT_CHARSET, "1.0");
       writer.writeStartElement(ATOM, "feed", NS_ATOM);
       writer.writeNamespace(ATOM, NS_ATOM);
@@ -1078,7 +1079,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
       writer.writeEndDocument();
       writer.flush();
       writer.close();
-      buffer.getOutputStream().close();
+      outputStream.close();
 
       return SerializerResultImpl.with().content(buffer.getInputStream()).build();
     } catch (final XMLStreamException e) {
@@ -1090,7 +1091,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer {
           new SerializerException("An I/O exception occurred.", e, SerializerException.MessageKeys.IO_EXCEPTION);
       throw cachedException;
     } finally {
-      closeCircleStreamBufferOutput(buffer, cachedException);
+      closeCircleStreamBufferOutput(outputStream, cachedException);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1dd3a583/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
index f87c47f..25dcb03 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEnumTest.java
@@ -51,6 +51,7 @@ import org.mockito.Mockito;
 public class EdmEnumTest {
 
   private final EdmEnumType instance;
+  private final EdmEnumType otherInstance;
   private final EdmEnumType nonFlagsInstance;
   private final EdmEnumType int16EnumType;
   private final EdmEnumType int32EnumType;
@@ -66,6 +67,10 @@ public class EdmEnumTest {
     instance = new EdmEnumTypeImpl(mock(EdmProviderImpl.class), enumName,
         new CsdlEnumType().setName("name").setMembers(memberList).setFlags(true)
             .setUnderlyingType(EdmPrimitiveTypeKind.SByte.getFullQualifiedName()));
+    
+    otherInstance = new EdmEnumTypeImpl(mock(EdmProviderImpl.class), enumName,
+        new CsdlEnumType().setName("name").setMembers(memberList).setFlags(true)
+            .setUnderlyingType(EdmPrimitiveTypeKind.SByte.getFullQualifiedName()));
 
     nonFlagsInstance = new EdmEnumTypeImpl(mock(EdmProviderImpl.class), enumName,
         new CsdlEnumType().setName("name").setMembers(memberList).setFlags(false)
@@ -128,6 +133,7 @@ public class EdmEnumTest {
   @Test
   public void compatibility() {
     assertTrue(instance.isCompatible(instance));
+    assertTrue(instance.isCompatible(otherInstance));
     assertFalse(instance.isCompatible(instance.getUnderlyingType()));
   }