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

Change-Id: Ib9289c9e81c05ed404e71bdc1bc7eb7bbdde7a7c

Signed-off-by: Christian Amend <christian.amend@sap.com>
This commit is contained in:
Klaus Straubinger 2015-06-25 10:22:37 +02:00 committed by Christian Amend
parent e32034bd54
commit 94b3917f4e
3 changed files with 124 additions and 132 deletions

View File

@ -50,12 +50,21 @@ public final class ContentType {
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 = ContentType.create(ContentType.APPLICATION_JSON,
PARAMETER_ODATA_METADATA + '=' + VALUE_ODATA_METADATA_MINIMAL);
public static final ContentType JSON_NO_METADATA = ContentType.create(ContentType.APPLICATION_JSON,
"odata.metadata=none");
PARAMETER_ODATA_METADATA + '=' + VALUE_ODATA_METADATA_NONE);
public static final ContentType JSON_FULL_METADATA = ContentType.create(ContentType.APPLICATION_JSON,
"odata.metadata=full");
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);
@ -63,7 +72,6 @@ public final class ContentType {
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;

View File

@ -52,26 +52,27 @@ import org.apache.olingo.server.core.uri.UriHelperImpl;
public class ODataImpl extends OData {
@Override
public ODataSerializer createSerializer(final ContentType contentType)
throws SerializerException {
ODataSerializer serializer;
public ODataSerializer createSerializer(final ContentType contentType) throws SerializerException {
ODataSerializer serializer = null;
// 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))) {
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();
} else {
throw new SerializerException("Unsupported format: "
+ contentType.toContentTypeString(),
SerializerException.MessageKeys.UNSUPPORTED_FORMAT,
contentType.toContentTypeString());
}
if (serializer == null) {
throw new SerializerException("Unsupported format: " + contentType.toContentTypeString(),
SerializerException.MessageKeys.UNSUPPORTED_FORMAT, contentType.toContentTypeString());
} else {
return serializer;
}
}
@Override
public FixedFormatSerializer createFixedFormatSerializer() {
@ -84,18 +85,15 @@ public class ODataImpl extends OData {
}
@Override
public ServiceMetadata createServiceMetadata(
final CsdlEdmProvider edmProvider,
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);
public ServiceMetadata createServiceMetadata(final CsdlEdmProvider edmProvider,
final List<EdmxReference> references, final ServiceMetadataETagSupport serviceMetadataETagSupport) {
return new ServiceMetadataImpl(edmProvider, references, serviceMetadataETagSupport);
}
@Override
@ -109,11 +107,9 @@ public class ODataImpl extends OData {
}
@Override
public ODataDeserializer createDeserializer(final ContentType contentType)
throws DeserializerException {
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))
@ -121,18 +117,15 @@ public class ODataImpl extends OData {
// to an error.
// {
} else {
throw new DeserializerException("Unsupported format: "
+ contentType.toContentTypeString(),
DeserializerException.MessageKeys.UNSUPPORTED_FORMAT,
contentType.toContentTypeString());
throw new DeserializerException("Unsupported format: " + contentType.toContentTypeString(),
DeserializerException.MessageKeys.UNSUPPORTED_FORMAT, contentType.toContentTypeString());
}
return deserializer;
}
@Override
public EdmPrimitiveType createPrimitiveTypeInstance(
final EdmPrimitiveTypeKind kind) {
public EdmPrimitiveType createPrimitiveTypeInstance(final EdmPrimitiveTypeKind kind) {
return EdmPrimitiveTypeFactory.getInstance(kind);
}

View File

@ -23,8 +23,6 @@ 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;
@ -32,27 +30,28 @@ 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
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 testJsonSerializerForODataMetadataFull() throws SerializerException {
public void jsonSerializerForODataMetadataFull() throws SerializerException {
odata.createSerializer(ContentType.JSON_FULL_METADATA);
}
@Test
public void testCreateJsonSerializerForODataMetadataMinimal() throws SerializerException {
final ODataSerializer serializer = odata.createSerializer(ContentType.JSON);
assertNotNull(serializer);
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
public void testCreateJsonDeserialierForODataMetadataMinimal() throws DeserializerException {
final ODataDeserializer deserializer = odata.createDeserializer(ContentType.JSON);
assertNotNull(deserializer);
@Test(expected = DeserializerException.class)
public void xmlDeserializer() throws DeserializerException {
odata.createDeserializer(ContentType.APPLICATION_XML);
}
}