diff --git a/src/main/java/org/springframework/hateoas/core/JsonPathLinkDiscoverer.java b/src/main/java/org/springframework/hateoas/core/JsonPathLinkDiscoverer.java index 27d89b92..a57c9a40 100644 --- a/src/main/java/org/springframework/hateoas/core/JsonPathLinkDiscoverer.java +++ b/src/main/java/org/springframework/hateoas/core/JsonPathLinkDiscoverer.java @@ -30,6 +30,7 @@ import org.springframework.http.MediaType; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import com.jayway.jsonpath.InvalidPathException; import com.jayway.jsonpath.JsonPath; /** @@ -88,8 +89,12 @@ public class JsonPathLinkDiscoverer implements LinkDiscoverer { @Override public List findLinksWithRel(String rel, String representation) { - Object parseResult = getExpression(rel).read(representation); - return createLinksFrom(parseResult, rel); + try { + Object parseResult = getExpression(rel).read(representation); + return createLinksFrom(parseResult, rel); + } catch (InvalidPathException e) { + return Collections.emptyList(); + } } /* diff --git a/src/test/java/org/springframework/hateoas/core/AbstractLinkDiscovererUnitTest.java b/src/test/java/org/springframework/hateoas/core/AbstractLinkDiscovererUnitTest.java index 59401e68..3aa26ed9 100644 --- a/src/test/java/org/springframework/hateoas/core/AbstractLinkDiscovererUnitTest.java +++ b/src/test/java/org/springframework/hateoas/core/AbstractLinkDiscovererUnitTest.java @@ -22,6 +22,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.List; +import org.hamcrest.Matchers; import org.junit.Test; import org.springframework.hateoas.Link; import org.springframework.hateoas.LinkDiscoverer; @@ -63,12 +64,20 @@ public abstract class AbstractLinkDiscovererUnitTest { } @Test - public void returnsForInxistingLinkFromInputStream() throws Exception { + public void returnsForInexistingLinkFromInputStream() throws Exception { InputStream inputStream = new ByteArrayInputStream(getInputString().getBytes("UTF-8")); assertThat(getDiscoverer().findLinkWithRel("something", inputStream), is(nullValue())); } + @Test + public void returnsNullForNonExistingLinkContainer() { + + assertThat(getDiscoverer().findLinksWithRel("something", getInputStringWithoutLinkContainer()), + is(Matchers. empty())); + assertThat(getDiscoverer().findLinkWithRel("something", getInputStringWithoutLinkContainer()), is(nullValue())); + } + /** * Return the {@link LinkDiscoverer} to be tested. * @@ -82,4 +91,6 @@ public abstract class AbstractLinkDiscovererUnitTest { * @return */ protected abstract String getInputString(); + + protected abstract String getInputStringWithoutLinkContainer(); } diff --git a/src/test/java/org/springframework/hateoas/hal/HalLinkDiscovererUnitTest.java b/src/test/java/org/springframework/hateoas/hal/HalLinkDiscovererUnitTest.java index 4bb01c7b..09fea7b0 100644 --- a/src/test/java/org/springframework/hateoas/hal/HalLinkDiscovererUnitTest.java +++ b/src/test/java/org/springframework/hateoas/hal/HalLinkDiscovererUnitTest.java @@ -40,4 +40,9 @@ public class HalLinkDiscovererUnitTest extends AbstractLinkDiscovererUnitTest { protected String getInputString() { return SAMPLE; } + + @Override + protected String getInputStringWithoutLinkContainer() { + return "{}"; + } }