[OLINGO-659] Fix minor stream issues

This commit is contained in:
Christian Amend 2015-08-17 10:22:07 +02:00
parent 5248f34215
commit 1dd3a583ff
6 changed files with 161 additions and 127 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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()));
}