diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index d9d4f8cff6ab74d234cf46ad97ed48a27e4774ae..192d849aca6b580fe1b8b789443919d931c01254 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -15,6 +15,8 @@ </appender> <logger name="org.springframework.samples.petclinic" level="debug"/> + + <logger name="org.springframework.web.servlet.view" level="debug"/> <root level="info"> <appender-ref ref="console"/> diff --git a/src/main/resources/spring/mvc-core-config.xml b/src/main/resources/spring/mvc-core-config.xml index 8aa5d61f0ba0c0d7747df79967def893cc2cabb3..3724b05593f2093cc52ca8e8d69ad11e42c0f20e 100644 --- a/src/main/resources/spring/mvc-core-config.xml +++ b/src/main/resources/spring/mvc-core-config.xml @@ -31,7 +31,7 @@ <!-- uses WebJars so Javascript and CSS libs can be declared as Maven dependencies (Bootstrap, jQuery...) --> <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/> - <mvc:view-controller path="/" view-name="welcome"/> + <mvc:view-controller path="/" view-name="welcome" /> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> diff --git a/src/main/resources/spring/mvc-view-config.xml b/src/main/resources/spring/mvc-view-config.xml index 8425754acc4a273c56f407646f41d72b6e6fc634..4413f01953dd54284786d8f5ec8aff083a0f9e02 100644 --- a/src/main/resources/spring/mvc-view-config.xml +++ b/src/main/resources/spring/mvc-view-config.xml @@ -17,24 +17,37 @@ --> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="contentNegotiationManager" ref="cnManager"/> + + <property name="viewResolvers"> + <list> + <!-- Default viewClass: JSTL view (JSP with html output) --> + <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> + <!-- Example: a logical view name of 'vets' is mapped to '/WEB-INF/jsp/vets.jsp' --> + <property name="prefix" value="/WEB-INF/jsp/"/> + <property name="suffix" value=".jsp"/> + </bean> + + <!-- Used here for 'xml' and 'atom' views --> + <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> + </list> + </property> </bean> <!-- Simple strategy: only path extension is taken into account --> <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="favorPathExtension" value="true"/> <property name="ignoreAcceptHeader" value="true"/> + <property name="defaultContentType" value="text/html"/> + + <property name="mediaTypes"> + <map> + <entry key="html" value="text/html" /> + <entry key="xml" value="application/xml" /> + <entry key="atom" value="application/atom+xml" /> + </map> + </property> </bean> - <!-- Default viewClass: JSTL view (JSP with html output) --> - <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> - <!-- Example: a logical view name of 'vets' is mapped to '/WEB-INF/jsp/vets.jsp' --> - <property name="prefix" value="/WEB-INF/jsp/"/> - <property name="suffix" value=".jsp"/> - </bean> - - <!-- Used here for 'xml' and 'atom' views --> - <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> - <!-- Renders an Atom feed of the visits. Used by the BeanNameViewResolver --> <bean id="vets/vetList.atom" class="org.springframework.samples.petclinic.web.VetsAtomView"/> diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java deleted file mode 100644 index 51458c86f0b34d63f7f3e501acd7072ebb2d7fcb..0000000000000000000000000000000000000000 --- a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2002-2009 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.samples.petclinic.web; - -import com.sun.syndication.feed.atom.Entry; -import com.sun.syndication.feed.atom.Feed; -import org.joda.time.DateTime; -import org.junit.Before; -import org.junit.Test; -import org.springframework.samples.petclinic.model.Pet; -import org.springframework.samples.petclinic.model.PetType; -import org.springframework.samples.petclinic.model.Visit; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author Arjen Poutsma - * @author Michael Isvy - */ -public class VisitsAtomViewTest { - - private VetsAtomView visitView; - - private Map<String, Object> model; - - private Feed feed; - - @Before - public void setUp() { - visitView = new VetsAtomView(); - PetType dog = new PetType(); - dog.setName("dog"); - Pet bello = new Pet(); - bello.setName("Bello"); - bello.setType(dog); - Visit belloVisit = new Visit(); - belloVisit.setPet(bello); - belloVisit.setDate(new DateTime(2009, 1, 1, 1, 1)); - belloVisit.setDescription("Bello visit"); - Pet wodan = new Pet(); - wodan.setName("Wodan"); - wodan.setType(dog); - Visit wodanVisit = new Visit(); - wodanVisit.setPet(wodan); - wodanVisit.setDate(new DateTime(2009, 1, 2, 1, 1)); - wodanVisit.setDescription("Wodan visit"); - List<Visit> visits = new ArrayList<Visit>(); - visits.add(belloVisit); - visits.add(wodanVisit); - - model = new HashMap<String, Object>(); - model.put("visits", visits); - feed = new Feed(); - - } - - - @Test - public void buildFeedMetadata() { - visitView.buildFeedMetadata(model, feed, null); - - assertNotNull("No id set", feed.getId()); - assertNotNull("No title set", feed.getTitle()); - assertEquals("Invalid update set", new DateTime(2009, 1, 2, 1, 1).toDate(), feed.getUpdated()); - } - - @Test - public void buildFeedEntries() throws Exception { - List<Entry> entries = visitView.buildFeedEntries(model, null, null); - assertEquals("Invalid amount of entries", 2, entries.size()); - } -} diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTestWithContainer-config.xml b/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTest-config.xml similarity index 100% rename from src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTestWithContainer-config.xml rename to src/test/java/org/springframework/samples/petclinic/web/VisitsViewTest-config.xml diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewWithContainerTest.java b/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTest.java similarity index 75% rename from src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewWithContainerTest.java rename to src/test/java/org/springframework/samples/petclinic/web/VisitsViewTest.java index 542c2ee4edcb576bf027b7220ff8d3235ad20621..8fb3480c449baef0924ce79304bfc7faff13d52e 100644 --- a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewWithContainerTest.java +++ b/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTest.java @@ -31,8 +31,11 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.hamcrest.Matchers.containsString; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; + /** * @author Arjen Poutsma @@ -40,11 +43,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. */ @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration -// Spring configuration files that are inside WEB-INF folder can be referenced here because they've been -// added to the classpath inside the Maven pom.xml file (inside <build> <testResources> ... </testResources> </build>) -@ContextConfiguration("VisitsAtomViewTestWithContainer-config.xml") +@ContextConfiguration("VisitsViewTest-config.xml") @ActiveProfiles("jdbc") -public class VisitsAtomViewWithContainerTest { +public class VisitsViewTest { @Autowired private WebApplicationContext webApplicationContext; @@ -55,15 +56,14 @@ public class VisitsAtomViewWithContainerTest { public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build(); } - + @Test - public void getVisits() throws Exception { - //gDickens: MediaType is not used - MediaType mediaType = MediaType.APPLICATION_ATOM_XML; - ResultActions actions = this.mockMvc.perform(get("/vets.atom")); + public void getVisitsXml() throws Exception { + ResultActions actions = this.mockMvc.perform(get("/vets.xml").accept(MediaType.APPLICATION_XML)); + actions.andDo(print()); // action is logged into the console actions.andExpect(status().isOk()); - actions.andExpect(xpath("//*").string(containsString("Pet ClinicService Visits"))); - actions.andExpect(content().contentType("application/atom+xml")); + actions.andExpect(content().contentType("application/xml")); + actions.andExpect(xpath("/vets/vetList[id=1]/firstName").string(containsString("James"))); } }