From 208c2d9c8b62b296b61094e89e238195d3d14570 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Mon, 1 Feb 2010 15:25:29 +0000 Subject: [PATCH] SPR-6785 - Improve message error when the MarshallingView modelKey attribute is not valid --- .../web/servlet/view/xml/MarshallingView.java | 3 +++ .../view/xml/MarshallingViewTests.java | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java index f81d782dbb..aa3f396271 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/xml/MarshallingView.java @@ -122,6 +122,9 @@ public class MarshallingView extends AbstractView { protected Object locateToBeMarshalled(Map model) throws ServletException { if (this.modelKey != null) { Object o = model.get(this.modelKey); + if (o == null) { + throw new ServletException("Model contains no object with key [" + modelKey + "]"); + } if (!this.marshaller.supports(o.getClass())) { throw new ServletException("Model object [" + o + "] retrieved via key [" + modelKey + "] is not supported by the Marshaller"); diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java index 97dab8f811..382ee08431 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/xml/MarshallingViewTests.java @@ -71,6 +71,29 @@ public class MarshallingViewTests { verify(marshallerMock); } + @Test + public void renderInvalidModelKey() throws Exception { + Object toBeMarshalled = new Object(); + String modelKey = "key"; + view.setModelKey("invalidKey"); + Map model = new HashMap(); + model.put(modelKey, toBeMarshalled); + + MockHttpServletRequest request = new MockHttpServletRequest(); + MockHttpServletResponse response = new MockHttpServletResponse(); + + replay(marshallerMock); + try { + view.render(model, request, response); + fail("ServletException expected"); + } + catch (ServletException ex) { + // expected + } + assertEquals("Invalid content length", 0, response.getContentLength()); + verify(marshallerMock); + } + @Test public void renderModelKeyUnsupported() throws Exception { Object toBeMarshalled = new Object();