From 7613bc582606b273d9f479725df5393ee4f07e16 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Sun, 16 Mar 2008 13:39:43 +0000 Subject: [PATCH] SWS-313 --- samples/airline/pom.xml | 12 +++- .../airline/service/AirlineService.java | 2 +- .../service/impl/AirlineServiceImpl.java | 10 ++++ .../airline/web/FlightsController.java | 57 ++++++++++--------- .../dao/jpa/applicationContext-jpa.xml | 2 +- .../airline/dao/jpa/hibernate.properties | 21 ------- .../airline/service/applicationContext.xml | 14 ++--- .../airline/ws/applicationContext-ws.xml | 3 +- .../src/main/webapp/WEB-INF/jsp/flights.jsp | 7 ++- .../src/main/webapp/WEB-INF/mvc-servlet.xml | 30 ++-------- .../airline/src/main/webapp/WEB-INF/web.xml | 8 +-- 11 files changed, 74 insertions(+), 92 deletions(-) delete mode 100644 samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/hibernate.properties diff --git a/samples/airline/pom.xml b/samples/airline/pom.xml index 47df7aba..0b581eb4 100644 --- a/samples/airline/pom.xml +++ b/samples/airline/pom.xml @@ -1,4 +1,5 @@ - + spring-ws-samples org.springframework.ws @@ -134,7 +135,8 @@ process-classes - + @@ -177,6 +179,12 @@ org.springframework.ws spring-ws-security runtime + + + org.apache.ws.security + wss4j + + diff --git a/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/AirlineService.java b/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/AirlineService.java index b61dadfc..e23b52de 100644 --- a/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/AirlineService.java +++ b/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/AirlineService.java @@ -20,6 +20,7 @@ import java.util.List; import org.acegisecurity.annotation.Secured; import org.joda.time.DateTime; import org.joda.time.LocalDate; + import org.springframework.transaction.annotation.Transactional; import org.springframework.ws.samples.airline.domain.Flight; import org.springframework.ws.samples.airline.domain.FrequentFlyer; @@ -32,7 +33,6 @@ import org.springframework.ws.samples.airline.domain.Ticket; * * @author Arjen Poutsma */ -@Transactional(readOnly = true) public interface AirlineService { /** diff --git a/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImpl.java b/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImpl.java index 4e6456a7..470e3a75 100644 --- a/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImpl.java +++ b/samples/airline/src/main/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImpl.java @@ -21,6 +21,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; import org.joda.time.LocalDate; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.ws.samples.airline.dao.FlightDao; import org.springframework.ws.samples.airline.dao.TicketDao; @@ -41,6 +45,8 @@ import org.springframework.ws.samples.airline.service.NoSuchFrequentFlyerExcepti * * @author Arjen Poutsma */ +@Service +@Transactional(readOnly = true) public class AirlineServiceImpl implements AirlineService { private static final Log logger = LogFactory.getLog(AirlineServiceImpl.class); @@ -51,15 +57,19 @@ public class AirlineServiceImpl implements AirlineService { private FrequentFlyerSecurityService frequentFlyerSecurityService = new StubFrequentFlyerSecurityService(); + @Autowired public AirlineServiceImpl(FlightDao flightDao, TicketDao ticketDao) { this.flightDao = flightDao; this.ticketDao = ticketDao; } + @Autowired public void setFrequentFlyerSecurityService(FrequentFlyerSecurityService frequentFlyerSecurityService) { this.frequentFlyerSecurityService = frequentFlyerSecurityService; } + @Transactional(readOnly = false, + rollbackFor = {NoSuchFlightException.class, NoSeatAvailableException.class, NoSuchFrequentFlyerException.class}) public Ticket bookFlight(String flightNumber, DateTime departureTime, List passengers) throws NoSuchFlightException, NoSeatAvailableException, NoSuchFrequentFlyerException { Assert.notEmpty(passengers, "No passengers given"); diff --git a/samples/airline/src/main/java/org/springframework/ws/samples/airline/web/FlightsController.java b/samples/airline/src/main/java/org/springframework/ws/samples/airline/web/FlightsController.java index c76e5146..18631b2a 100644 --- a/samples/airline/src/main/java/org/springframework/ws/samples/airline/web/FlightsController.java +++ b/samples/airline/src/main/java/org/springframework/ws/samples/airline/web/FlightsController.java @@ -16,57 +16,62 @@ package org.springframework.ws.samples.airline.web; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.joda.time.LocalDate; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.springframework.web.bind.ServletRequestUtils; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.multiaction.MultiActionController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.ws.samples.airline.domain.Flight; import org.springframework.ws.samples.airline.domain.ServiceClass; import org.springframework.ws.samples.airline.service.AirlineService; /** @author Arjen Poutsma */ -public class FlightsController extends MultiActionController { +@Controller +public class FlightsController { private AirlineService airlineService; + @Autowired public FlightsController(AirlineService airlineService) { Assert.notNull(airlineService, "'airlineService' must not be null"); this.airlineService = airlineService; } - public ModelAndView flightList(HttpServletRequest request, HttpServletResponse response) throws Exception { - String fromAirportCode = ServletRequestUtils.getStringParameter(request, "from"); - String toAirportCode = ServletRequestUtils.getStringParameter(request, "to"); - String departureDateString = - ServletRequestUtils.getStringParameter(request, "departureDate", new LocalDate().toString()); - String serviceClassString = ServletRequestUtils.getStringParameter(request, "serviceClass", "ECONOMY"); - + @RequestMapping("/flights") + public String flightList(@RequestParam(value = "from", required = false)String fromAirportCode, + @RequestParam(value = "to", required = false)String toAirportCode, + @RequestParam(value = "departureDate", required = false)String departureDateString, + @RequestParam(value = "serviceClass", required = false)String serviceClassString, + ModelMap model) { + if (!StringUtils.hasLength(departureDateString)) { + departureDateString = new LocalDate().toString(); + } + if (!StringUtils.hasLength(serviceClassString)) { + serviceClassString = "ECONOMY"; + } ServiceClass serviceClass = ServiceClass.valueOf(serviceClassString); LocalDate departureDate = new LocalDate(departureDateString); - ModelAndView mav = new ModelAndView("flights"); if (StringUtils.hasLength(fromAirportCode) && StringUtils.hasLength(toAirportCode)) { - mav.addObject("from", fromAirportCode); - mav.addObject("to", toAirportCode); - mav.addObject("departureDate", departureDateString); - mav.addObject("serviceClass", serviceClassString); - mav.addObject("flights", + model.addAttribute("from", fromAirportCode); + model.addAttribute("to", toAirportCode); + model.addAttribute("departureDate", departureDateString); + model.addAttribute("serviceClass", serviceClassString); + model.addAttribute("flights", airlineService.getFlights(fromAirportCode, toAirportCode, departureDate, serviceClass)); } - return mav; + return "flights"; } - public ModelAndView singleFlight(HttpServletRequest request, HttpServletResponse response) throws Exception { - String uri = request.getRequestURI(); - int pos = uri.lastIndexOf('/') + 1; - long id = Long.parseLong(uri.substring(pos)); + @RequestMapping(value = "/flight") + public String singleFlight(@RequestParam("id")long id, ModelMap model) throws Exception { Flight flight = airlineService.getFlight(id); - return new ModelAndView("flight", "flight", flight); + model.addAttribute(flight); + return "flight"; } } diff --git a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/applicationContext-jpa.xml b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/applicationContext-jpa.xml index 894cec18..c932958c 100644 --- a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/applicationContext-jpa.xml +++ b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/applicationContext-jpa.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> diff --git a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/hibernate.properties b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/hibernate.properties deleted file mode 100644 index 4e8d346e..00000000 --- a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/jpa/hibernate.properties +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright 2007 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. -# - -# Properties file with hibernate-related settings. - -hibernate.dialect=${hibernate.dialect} -hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto} -hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider \ No newline at end of file diff --git a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/service/applicationContext.xml b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/service/applicationContext.xml index bc49f28c..73f507ea 100644 --- a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/service/applicationContext.xml +++ b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/service/applicationContext.xml @@ -2,21 +2,21 @@ + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> + + The Airline business service. It requires a flight DAO and ticket DAO to work. The frequentFlyerSecurityService property is not required, so we use a property to configure it. - - - \ No newline at end of file diff --git a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/ws/applicationContext-ws.xml b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/ws/applicationContext-ws.xml index 6ca45503..99990332 100644 --- a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/ws/applicationContext-ws.xml +++ b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/ws/applicationContext-ws.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:sws="http://www.springframework.org/schema/web-services" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-1.5.xsd http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-1.5.xsd"> @@ -184,5 +184,4 @@ - diff --git a/samples/airline/src/main/webapp/WEB-INF/jsp/flights.jsp b/samples/airline/src/main/webapp/WEB-INF/jsp/flights.jsp index 9e9f6675..e8b97dea 100644 --- a/samples/airline/src/main/webapp/WEB-INF/jsp/flights.jsp +++ b/samples/airline/src/main/webapp/WEB-INF/jsp/flights.jsp @@ -44,9 +44,10 @@ - - - + + + + diff --git a/samples/airline/src/main/webapp/WEB-INF/mvc-servlet.xml b/samples/airline/src/main/webapp/WEB-INF/mvc-servlet.xml index 5d94a74e..f832c7f6 100644 --- a/samples/airline/src/main/webapp/WEB-INF/mvc-servlet.xml +++ b/samples/airline/src/main/webapp/WEB-INF/mvc-servlet.xml @@ -1,39 +1,19 @@ + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> This web application context contains a simple Spring Web MVC web application that shows flights - - - - - - flightController - flightController - - - - + - - - - - - - flightList - singleFlight - - - - - + diff --git a/samples/airline/src/main/webapp/WEB-INF/web.xml b/samples/airline/src/main/webapp/WEB-INF/web.xml index ca2eab32..62cebc46 100644 --- a/samples/airline/src/main/webapp/WEB-INF/web.xml +++ b/samples/airline/src/main/webapp/WEB-INF/web.xml @@ -1,9 +1,9 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" + version="2.4"> Spring-WS Airline Sample contextConfigLocation @@ -39,7 +39,7 @@ mvc - /flights/* + /flight xsd