diff --git a/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java b/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java index 26b264a..fd67074 100644 --- a/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java +++ b/src/main/java/com/github/jasminb/jsonapi/ResourceConverter.java @@ -13,6 +13,7 @@ import com.github.jasminb.jsonapi.annotations.Relationship; import com.github.jasminb.jsonapi.annotations.Type; import com.github.jasminb.jsonapi.exceptions.DocumentSerializationException; +import com.github.jasminb.jsonapi.exceptions.InvalidMetaDataTypeException; import com.github.jasminb.jsonapi.exceptions.UnregisteredTypeException; import com.github.jasminb.jsonapi.models.errors.Error; @@ -1026,10 +1027,9 @@ private Map mapLinks(JsonNode linksObject) { try { return objectMapper.readValue(p, mapType); } catch (IOException e) { - // TODO: log? No recovery. + e.printStackTrace(); + throw new InvalidMetaDataTypeException(); } - - return null; } private ObjectNode addIncludedSection(ObjectNode rootNode, Map includedDataMap) { diff --git a/src/main/java/com/github/jasminb/jsonapi/exceptions/InvalidMetaDataTypeException.java b/src/main/java/com/github/jasminb/jsonapi/exceptions/InvalidMetaDataTypeException.java new file mode 100644 index 0000000..91368ef --- /dev/null +++ b/src/main/java/com/github/jasminb/jsonapi/exceptions/InvalidMetaDataTypeException.java @@ -0,0 +1,20 @@ +package com.github.jasminb.jsonapi.exceptions; + +/** + * InvalidMetaDataTypeException implementation.
+ * This exception is thrown when a JSON-API meta object + * that is provided is not a {@code Map}. It may be an array instead of a type that can be de-serialized + * to a {@code Map}. + * + * @author ianrumac. + */ + +public class InvalidMetaDataTypeException extends RuntimeException { + + /** + * Creates a new InvalidMetaDataTypeException. + */ + public InvalidMetaDataTypeException() { + super("Failed to parse JSON-API meta object to a Map type."); + } +} diff --git a/src/test/java/com/github/jasminb/jsonapi/ResourceConverterTest.java b/src/test/java/com/github/jasminb/jsonapi/ResourceConverterTest.java index 18c18d2..4c9ed65 100644 --- a/src/test/java/com/github/jasminb/jsonapi/ResourceConverterTest.java +++ b/src/test/java/com/github/jasminb/jsonapi/ResourceConverterTest.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.github.jasminb.jsonapi.exceptions.DocumentSerializationException; import com.github.jasminb.jsonapi.exceptions.InvalidJsonApiResourceException; +import com.github.jasminb.jsonapi.exceptions.InvalidMetaDataTypeException; import com.github.jasminb.jsonapi.exceptions.UnregisteredTypeException; import com.github.jasminb.jsonapi.models.Article; import com.github.jasminb.jsonapi.models.Author; @@ -678,6 +679,12 @@ public void testReadMetaOnly() { Assert.assertNotNull(status.getMeta()); } + @Test(expected = InvalidMetaDataTypeException.class) + public void testInvalidMetaData() throws IOException { + InputStream apiResponse = IOUtils.getResource("users-outside-meta-invalid.json"); + converter.readDocumentCollection(apiResponse, User.class); + } + @Test public void testUnregisteredType() throws IOException { InputStream apiResponse = IOUtils.getResource("un-registered-type.json"); diff --git a/src/test/resources/users-outside-meta-invalid.json b/src/test/resources/users-outside-meta-invalid.json new file mode 100644 index 0000000..a3cfa2c --- /dev/null +++ b/src/test/resources/users-outside-meta-invalid.json @@ -0,0 +1,19 @@ +{ + "meta":[], + "data": [ + { + "type": "users", + "id": "1", + "attributes": { + "name": "liz" + } + }, + { + "type": "users", + "id": "2", + "attributes": { + "name": "john" + } + } + ] +}