[OLINGO-690] the server actually supports JSON without metadata

Change-Id: Ib9289c9e81c05ed404e71bdc1bc7eb7bbdde7a7c

Signed-off-by: Christian Amend <[email protected]>


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

Branch: refs/heads/olingo712
Commit: 94b3917f4e820396a3c8cea0b3c2a72cb845017a
Parents: e32034b
Author: Klaus Straubinger <[email protected]>
Authored: Thu Jun 25 10:22:37 2015 +0200
Committer: Christian Amend <[email protected]>
Committed: Thu Jun 25 11:07:39 2015 +0200

----------------------------------------------------------------------
 .../olingo/commons/api/format/ContentType.java  |  48 ++---
 .../apache/olingo/server/core/ODataImpl.java    | 181 +++++++++----------
 .../olingo/server/core/ODataImplTest.java       |  55 +++---
 3 files changed, 138 insertions(+), 146 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/94b3917f/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
 
b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
index bfdebe3..57f73df 100644
--- 
a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
+++ 
b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
@@ -49,21 +49,29 @@ public final class ContentType {
   private static final String APPLICATION = "application";
   private static final String TEXT = "text";
   private static final String MULTIPART = "multipart";
-  
+
+  public static final String PARAMETER_CHARSET = "charset";
+  public static final String PARAMETER_IEEE754_COMPATIBLE = 
"IEEE754Compatible";
+  public static final String PARAMETER_ODATA_METADATA = "odata.metadata";
+
+  public static final String VALUE_ODATA_METADATA_NONE = "none";
+  public static final String VALUE_ODATA_METADATA_MINIMAL = "minimal";
+  public static final String VALUE_ODATA_METADATA_FULL = "full";
+
   public static final ContentType APPLICATION_JSON = new 
ContentType(APPLICATION, "json", null);
-  public static final ContentType JSON = 
ContentType.create(ContentType.APPLICATION_JSON, "odata.metadata=minimal");
-  public static final ContentType JSON_NO_METADATA = 
ContentType.create(ContentType.APPLICATION_JSON, 
-                                                                        
"odata.metadata=none");
-  public static final ContentType JSON_FULL_METADATA = 
ContentType.create(ContentType.APPLICATION_JSON, 
-                                                                          
"odata.metadata=full");
-  
+  public static final ContentType JSON = 
ContentType.create(ContentType.APPLICATION_JSON,
+      PARAMETER_ODATA_METADATA + '=' + VALUE_ODATA_METADATA_MINIMAL);
+  public static final ContentType JSON_NO_METADATA = 
ContentType.create(ContentType.APPLICATION_JSON,
+      PARAMETER_ODATA_METADATA + '=' + VALUE_ODATA_METADATA_NONE);
+  public static final ContentType JSON_FULL_METADATA = 
ContentType.create(ContentType.APPLICATION_JSON,
+      PARAMETER_ODATA_METADATA + '=' + VALUE_ODATA_METADATA_FULL);
+
   public static final ContentType APPLICATION_XML = new 
ContentType(APPLICATION, "xml", null);
   public static final ContentType APPLICATION_ATOM_XML = new 
ContentType(APPLICATION, "atom+xml", null);
   public static final ContentType APPLICATION_ATOM_XML_ENTRY = 
create(APPLICATION_ATOM_XML, "type=entry");
   public static final ContentType APPLICATION_ATOM_XML_FEED = 
create(APPLICATION_ATOM_XML, "type=feed");
   public static final ContentType APPLICATION_ATOM_SVC = new 
ContentType(APPLICATION, "atomsvc+xml", null);
 
-
   public static final ContentType APPLICATION_OCTET_STREAM = new 
ContentType(APPLICATION, "octet-stream", null);
 
   public static final ContentType APPLICATION_XHTML_XML = new 
ContentType(APPLICATION, "xhtml+xml", null);
@@ -81,14 +89,6 @@ public final class ContentType {
   public static final ContentType MULTIPART_MIXED = new ContentType(MULTIPART, 
"mixed", null);
   public static final ContentType MULTIPART_FORM_DATA = new 
ContentType(MULTIPART, "form-data", null);
 
-  public static final String PARAMETER_CHARSET = "charset";
-  public static final String PARAMETER_IEEE754_COMPATIBLE = 
"IEEE754Compatible";
-  public static final String PARAMETER_ODATA_METADATA = "odata.metadata";
-  
-  public static final String VALUE_ODATA_METADATA_NONE = "none";
-  public static final String VALUE_ODATA_METADATA_MINIMAL = "minimal";
-  public static final String VALUE_ODATA_METADATA_FULL = "full";
-  
   private final String type;
   private final String subtype;
   private final Map<String, String> parameters;
@@ -255,7 +255,7 @@ public final class ContentType {
   public Map<String, String> getParameters() {
     return Collections.unmodifiableMap(parameters);
   }
-  
+
   /**
    * Returns the value of a given parameter.
    * If the parameter does not exists the method returns null
@@ -266,7 +266,7 @@ public final class ContentType {
   public String getParameter(final String name) {
     return parameters.get(name);
   }
-  
+
   @Override
   public int hashCode() {
     return 1;
@@ -323,7 +323,7 @@ public final class ContentType {
   public boolean isCompatible(final ContentType other) {
     return type.equalsIgnoreCase(other.type) && 
subtype.equalsIgnoreCase(other.subtype);
   }
-  
+
   /**
    * <p>{@link ContentType}s are <b>compatible</b>
    * if <code>type</code> and <code>subtype</code> have the same value.</p>
@@ -331,16 +331,16 @@ public final class ContentType {
    * (for compare with parameters see {@link #equals(Object)}).</p>
    * @return <code>true</code> if both instances are compatible (see 
definition above), otherwise <code>false</code>.
    */
-  public boolean isCompatible(final ContentType...otherTypes) {
-    for(final ContentType otherType : otherTypes) {
-      if(isCompatible(otherType)) {
+  public boolean isCompatible(final ContentType... otherTypes) {
+    for (final ContentType otherType : otherTypes) {
+      if (isCompatible(otherType)) {
         return true;
       }
     }
-    
+
     return false;
   }
-  
+
   /**
    * Checks whether both strings are equal ignoring the case of the strings.
    *

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/94b3917f/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 8d41005..b4c414b 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,99 +51,92 @@ 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)
-                               && 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);
-       }
+  @Override
+  public ODataSerializer createSerializer(final ContentType contentType) 
throws SerializerException {
+    ODataSerializer serializer = null;
+
+    if (contentType.isCompatible(ContentType.APPLICATION_JSON)) {
+      final String metadata = 
contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA);
+      if (metadata == null
+          || ContentType.VALUE_ODATA_METADATA_MINIMAL.equals(metadata)
+          || ContentType.VALUE_ODATA_METADATA_NONE.equals(metadata)) {
+        serializer = new ODataJsonSerializer(contentType);
+      }
+    } else if (contentType.isCompatible(ContentType.APPLICATION_XML)) {
+      serializer = new ODataXmlSerializerImpl();
+    }
+
+    if (serializer == null) {
+      throw new SerializerException("Unsupported format: " + 
contentType.toContentTypeString(),
+          SerializerException.MessageKeys.UNSUPPORTED_FORMAT, 
contentType.toContentTypeString());
+    } else {
+      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(final CsdlEdmProvider 
edmProvider,
+      final List<EdmxReference> references, final 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;
+
+    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/94b3917f/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
index bc48de9..87a6554 100644
--- 
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
@@ -23,36 +23,35 @@ 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);
-       }
+
+  private final OData odata = OData.newInstance();
+
+  @Test
+  public void serializerSupportedFormats() throws SerializerException {
+    assertNotNull(odata.createSerializer(ContentType.JSON_NO_METADATA));
+    assertNotNull(odata.createSerializer(ContentType.JSON));
+    assertNotNull(odata.createSerializer(ContentType.APPLICATION_JSON));
+  }
+
+  @Test(expected = SerializerException.class)
+  public void jsonSerializerForODataMetadataFull() throws SerializerException {
+    odata.createSerializer(ContentType.JSON_FULL_METADATA);
+  }
+
+  @Test
+  public void deserializerSupportedFormats() throws DeserializerException {
+    assertNotNull(odata.createDeserializer(ContentType.JSON_NO_METADATA));
+    assertNotNull(odata.createDeserializer(ContentType.JSON));
+    assertNotNull(odata.createDeserializer(ContentType.JSON_FULL_METADATA));
+    assertNotNull(odata.createDeserializer(ContentType.APPLICATION_JSON));
+  }
+
+  @Test(expected = DeserializerException.class)
+  public void xmlDeserializer() throws DeserializerException {
+    odata.createDeserializer(ContentType.APPLICATION_XML);
+  }
 }

Reply via email to