[OLINGO-704] Fix: OData Server supports only odata.metadata=minimal
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/e32034bd Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/e32034bd Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/e32034bd Branch: refs/heads/olingo712 Commit: e32034bd54072b0db4acaa1e374c4e0166a9b86e Parents: 9998ba6 Author: Christian Holzer <[email protected]> Authored: Wed Jun 24 17:31:52 2015 +0200 Committer: Christian Holzer <[email protected]> Committed: Wed Jun 24 17:31:52 2015 +0200 ---------------------------------------------------------------------- .../fit/tecsvc/client/ActionImportITCase.java | 2 +- .../apache/olingo/server/core/ODataImpl.java | 174 ++++++++++--------- .../olingo/server/core/ODataImplTest.java | 58 +++++++ 3 files changed, 153 insertions(+), 81 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/e32034bd/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java ---------------------------------------------------------------------- diff --git a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java index 316f0ce..22aea29 100644 --- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java +++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/ActionImportITCase.java @@ -309,7 +309,7 @@ public class ActionImportITCase extends AbstractBaseTestITCase { @Override protected ODataClient getClient() { ODataClient odata = ODataClientFactory.getClient(); - odata.getConfiguration().setDefaultPubFormat(ContentType.JSON_NO_METADATA); + odata.getConfiguration().setDefaultPubFormat(ContentType.JSON); return odata; } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/e32034bd/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java index c3da9b4..8d41005 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java @@ -51,85 +51,99 @@ import org.apache.olingo.server.core.uri.UriHelperImpl; public class ODataImpl extends OData { - @Override - public ODataSerializer createSerializer(final ContentType contentType) throws SerializerException { - ODataSerializer serializer; - - // odata.metadata=none, odata.metadata=minimal, odata.metadata=full - if(contentType.isCompatible(ContentType.APPLICATION_JSON)) { - serializer = new ODataJsonSerializer(contentType); - } else if(contentType.isCompatible(ContentType.APPLICATION_XML)) { - serializer = new ODataXmlSerializerImpl(); - } else { - throw new SerializerException("Unsupported format: " + contentType.toContentTypeString(), - SerializerException.MessageKeys.UNSUPPORTED_FORMAT, contentType.toContentTypeString()); - } - - return serializer; - } - - @Override - public FixedFormatSerializer createFixedFormatSerializer() { - return new FixedFormatSerializerImpl(); - } - - @Override - public ODataHttpHandler createHandler(final ServiceMetadata edm) { - return new ODataHttpHandlerImpl(this, edm); - } - - @Override - public ServiceMetadata createServiceMetadata(final CsdlEdmProvider edmProvider, - final List<EdmxReference> references) { - return createServiceMetadata(edmProvider, references, null); - } - - @Override - public ServiceMetadata createServiceMetadata(CsdlEdmProvider edmProvider, List<EdmxReference> references, - ServiceMetadataETagSupport serviceMetadataETagSupport) { - return new ServiceMetadataImpl(edmProvider, references, serviceMetadataETagSupport); - } - - @Override - public FixedFormatDeserializer createFixedFormatDeserializer() { - return new FixedFormatDeserializerImpl(); - } - - @Override - public UriHelper createUriHelper() { - return new UriHelperImpl(); - } - - @Override - public ODataDeserializer createDeserializer(final ContentType contentType) throws DeserializerException { - ODataDeserializer deserializer; - - // odata.metadata=none, odata.metadata=minimal, odata.metadata=full - if(contentType.isCompatible(ContentType.JSON)) { - deserializer = new ODataJsonDeserializer(contentType); - //} else if(contentType.isCompatible(ContentType.APPLICATION_XML)) { - // We do not support XML deserialization right now so this must lead to an error. - } else { - throw new DeserializerException("Unsupported format: " + contentType.toContentTypeString(), - DeserializerException.MessageKeys.UNSUPPORTED_FORMAT, contentType.toContentTypeString()); - } - - return deserializer; - } - - @Override - public EdmPrimitiveType createPrimitiveTypeInstance(final EdmPrimitiveTypeKind kind) { - return EdmPrimitiveTypeFactory.getInstance(kind); - } - - @Override - public ETagHelper createETagHelper() { - return new ETagHelperImpl(); - } - - @Override - public Preferences createPreferences(final Collection<String> preferHeaders) { - return new PreferencesImpl(preferHeaders); - } + @Override + public ODataSerializer createSerializer(final ContentType contentType) + throws SerializerException { + ODataSerializer serializer; + + // odata.metadata=none, odata.metadata=minimal, odata.metadata=full + if (contentType.isCompatible(ContentType.APPLICATION_JSON) + && ContentType.VALUE_ODATA_METADATA_MINIMAL + .equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA))) { + serializer = new ODataJsonSerializer(contentType); + } else if (contentType.isCompatible(ContentType.APPLICATION_XML)) { + serializer = new ODataXmlSerializerImpl(); + } else { + throw new SerializerException("Unsupported format: " + + contentType.toContentTypeString(), + SerializerException.MessageKeys.UNSUPPORTED_FORMAT, + contentType.toContentTypeString()); + } + + return serializer; + } + + @Override + public FixedFormatSerializer createFixedFormatSerializer() { + return new FixedFormatSerializerImpl(); + } + + @Override + public ODataHttpHandler createHandler(final ServiceMetadata edm) { + return new ODataHttpHandlerImpl(this, edm); + } + + @Override + public ServiceMetadata createServiceMetadata( + final CsdlEdmProvider edmProvider, + final List<EdmxReference> references) { + return createServiceMetadata(edmProvider, references, null); + } + + @Override + public ServiceMetadata createServiceMetadata(CsdlEdmProvider edmProvider, + List<EdmxReference> references, + ServiceMetadataETagSupport serviceMetadataETagSupport) { + return new ServiceMetadataImpl(edmProvider, references, + serviceMetadataETagSupport); + } + + @Override + public FixedFormatDeserializer createFixedFormatDeserializer() { + return new FixedFormatDeserializerImpl(); + } + + @Override + public UriHelper createUriHelper() { + return new UriHelperImpl(); + } + + @Override + public ODataDeserializer createDeserializer(final ContentType contentType) + throws DeserializerException { + ODataDeserializer deserializer; + + // odata.metadata=none, odata.metadata=minimal, odata.metadata=full + if (contentType.isCompatible(ContentType.JSON)) { + deserializer = new ODataJsonDeserializer(contentType); + // } else if(contentType.isCompatible(ContentType.APPLICATION_XML)) + // We do not support XML deserialization right now so this must lead + // to an error. + // { + } else { + throw new DeserializerException("Unsupported format: " + + contentType.toContentTypeString(), + DeserializerException.MessageKeys.UNSUPPORTED_FORMAT, + contentType.toContentTypeString()); + } + + return deserializer; + } + + @Override + public EdmPrimitiveType createPrimitiveTypeInstance( + final EdmPrimitiveTypeKind kind) { + return EdmPrimitiveTypeFactory.getInstance(kind); + } + + @Override + public ETagHelper createETagHelper() { + return new ETagHelperImpl(); + } + + @Override + public Preferences createPreferences(final Collection<String> preferHeaders) { + return new PreferencesImpl(preferHeaders); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/e32034bd/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataImplTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataImplTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataImplTest.java new file mode 100644 index 0000000..bc48de9 --- /dev/null +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/ODataImplTest.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.olingo.server.core; + +import static org.junit.Assert.assertNotNull; + +import org.apache.olingo.commons.api.format.ContentType; +import org.apache.olingo.server.api.OData; +import org.apache.olingo.server.api.deserializer.DeserializerException; +import org.apache.olingo.server.api.deserializer.ODataDeserializer; +import org.apache.olingo.server.api.serializer.ODataSerializer; +import org.apache.olingo.server.api.serializer.SerializerException; +import org.junit.Test; + +public class ODataImplTest { + + private final OData odata = OData.newInstance(); + + @Test(expected=SerializerException.class) + public void testJsonSerializerForOdataMetadataNone() throws SerializerException { + odata.createSerializer(ContentType.JSON_NO_METADATA); + } + + @Test(expected=SerializerException.class) + public void testJsonSerializerForODataMetadataFull() throws SerializerException { + odata.createSerializer(ContentType.JSON_FULL_METADATA); + } + + @Test + public void testCreateJsonSerializerForODataMetadataMinimal() throws SerializerException { + final ODataSerializer serializer = odata.createSerializer(ContentType.JSON); + + assertNotNull(serializer); + } + + @Test + public void testCreateJsonDeserialierForODataMetadataMinimal() throws DeserializerException { + final ODataDeserializer deserializer = odata.createDeserializer(ContentType.JSON); + + assertNotNull(deserializer); + } +}
