From 4fa895b17a36dfd1ed991b217bcfd226a0c62aae Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Wed, 24 Jan 2007 00:18:33 +0000 Subject: [PATCH] --- samples/airline/pom.xml | 20 ++++++-- samples/airline/readme.txt | 4 +- .../ws/samples/airline/dao/FlightDao.java | 9 ++-- .../dao/hibernate/HibernateFlightDao.java | 11 ++--- .../airline/service/AirlineService.java | 8 +-- .../service/impl/AirlineServiceImpl.java | 7 ++- .../airline/ws/GetFlightsEndpoint.java | 9 +++- .../dao/hibernate/hibernate.properties | 3 +- .../dao/hibernate/HibernateFlightDaoTest.java | 8 ++- .../service/impl/AirlineServiceImplTest.java | 15 ++---- .../airline/ws/GetFlightsEndpointTest.java | 49 +++++++++++++++++-- .../dao/hibernate/hibernate.properties | 6 --- .../ws/samples/airline/dao/jdbc.properties | 7 --- 13 files changed, 94 insertions(+), 62 deletions(-) delete mode 100644 samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties delete mode 100644 samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/jdbc.properties diff --git a/samples/airline/pom.xml b/samples/airline/pom.xml index 367fee52..e9c6adad 100644 --- a/samples/airline/pom.xml +++ b/samples/airline/pom.xml @@ -12,9 +12,6 @@ hsqldb - - true - hsqldb @@ -30,6 +27,7 @@ jdbc:hsqldb:hsql://localhost/airline org.hibernate.dialect.HSQLDialect + @@ -73,6 +71,7 @@ airline jdbc:mysql://localhost/airline org.hibernate.dialect.MySQLInnoDBDialect + @@ -110,12 +109,13 @@ - + org.postgresql.Driver airline airline jdbc:postgresql://localhost/airline org.hibernate.dialect.PostgreSQLDialect + @@ -144,6 +144,16 @@ + + + org.hsqldb.jdbcDriver + sa + + jdbc:hsqldb:mem:airline + org.hibernate.dialect.HSQLDialect + create-drop + @@ -313,4 +323,4 @@ 0.8 - \ No newline at end of file + diff --git a/samples/airline/readme.txt b/samples/airline/readme.txt index 60c6c05d..f0600245 100644 --- a/samples/airline/readme.txt +++ b/samples/airline/readme.txt @@ -19,8 +19,8 @@ To execute the sample with the supplied HSQLDB: 1. Start a command shell in the subdirectory hsqldb, and run "ant". This starts a HSQLDB server with a database named airline. -2. Run "mvn sql:execute" to create the schema and insert data into the database. -3. Run "mvn jetty:run" to run the sample in the Jetty6 Web container. +2. Run "mvn -P hsqldb sql:execute" to create the schema and insert data into the database. +3. Run "mvn -P hsqldb jetty:run" to run the sample in the Jetty6 Web container. To execute the sample with MySQL or PostgreSQL: diff --git a/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/FlightDao.java b/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/FlightDao.java index cafd3479..7a19c1e8 100644 --- a/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/FlightDao.java +++ b/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/FlightDao.java @@ -18,18 +18,15 @@ package org.springframework.ws.samples.airline.dao; import java.util.List; import org.joda.time.DateTime; - +import org.joda.time.Interval; import org.springframework.dao.DataAccessException; import org.springframework.ws.samples.airline.domain.Flight; import org.springframework.ws.samples.airline.domain.ServiceClass; public interface FlightDao { - List findFlights(String fromAirportCode, - String toAirportCode, - DateTime startOfPeriod, - DateTime endOfPeriod, - ServiceClass serviceClass) throws DataAccessException; + List findFlights(String fromAirportCode, String toAirportCode, Interval interval, ServiceClass serviceClass) + throws DataAccessException; Flight getFlight(String flightNumber, DateTime departureTime); diff --git a/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDao.java b/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDao.java index befc7563..4a6323af 100644 --- a/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDao.java +++ b/samples/airline/src/main/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDao.java @@ -18,7 +18,7 @@ package org.springframework.ws.samples.airline.dao.hibernate; import java.util.List; import org.joda.time.DateTime; - +import org.joda.time.Interval; import org.springframework.dao.DataAccessException; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.ws.samples.airline.dao.FlightDao; @@ -38,15 +38,12 @@ public class HibernateFlightDao extends HibernateDaoSupport implements FlightDao getHibernateTemplate().update(flight); } - public List findFlights(String fromAirportCode, - String toAirportCode, - DateTime startOfPeriod, - DateTime endOfPeriod, - ServiceClass serviceClass) throws DataAccessException { + public List findFlights(String fromAirportCode, String toAirportCode, Interval interval, ServiceClass serviceClass) + throws DataAccessException { return getHibernateTemplate().findByNamedParam("from Flight f where f.from.code = :from " + "and f.to.code = :to and " + "f.departureTime >= :start and f.departureTime <= :end and " + "f.serviceClass = :class", new String[]{"from", "to", "start", "end", "class"}, - new Object[]{fromAirportCode, toAirportCode, startOfPeriod, endOfPeriod, serviceClass}); + new Object[]{fromAirportCode, toAirportCode, interval.getStart(), interval.getEnd(), serviceClass}); } } 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 70839529..5cea9e1b 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 @@ -18,8 +18,7 @@ package org.springframework.ws.samples.airline.service; import java.util.List; import org.joda.time.DateTime; -import org.joda.time.YearMonthDay; - +import org.joda.time.LocalDate; import org.springframework.ws.samples.airline.domain.ServiceClass; import org.springframework.ws.samples.airline.domain.Ticket; @@ -40,10 +39,7 @@ public interface AirlineService { * @return a list of flights * @see org.springframework.ws.samples.airline.domain.Flight */ - List getFlights(String fromAirportCode, - String toAirportCode, - YearMonthDay departureDate, - ServiceClass serviceClass); + List getFlights(String fromAirportCode, String toAirportCode, LocalDate departureDate, ServiceClass serviceClass); /** * Books a single flight for a number of passengers. Passengers can be either specified by name or by frequent flyer 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 0964634e..bdbc8f03 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,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; +import org.joda.time.LocalDate; import org.joda.time.YearMonthDay; import org.springframework.util.Assert; import org.springframework.ws.samples.airline.dao.FlightDao; @@ -107,7 +108,7 @@ public class AirlineServiceImpl implements AirlineService { public List getFlights(String fromAirportCode, String toAirportCode, - YearMonthDay departureDate, + LocalDate departureDate, ServiceClass serviceClass) { if (serviceClass == null) { serviceClass = ServiceClass.ECONOMY; @@ -116,8 +117,6 @@ public class AirlineServiceImpl implements AirlineService { logger.debug( "Getting flights from '" + fromAirportCode + "' to '" + toAirportCode + "' on " + departureDate); } - DateTime startOfPeriod = departureDate.toDateTimeAtMidnight(); - DateTime endOfPeriod = startOfPeriod.plusDays(1); - return flightDao.findFlights(fromAirportCode, toAirportCode, startOfPeriod, endOfPeriod, serviceClass); + return flightDao.findFlights(fromAirportCode, toAirportCode, departureDate.toInterval(), serviceClass); } } diff --git a/samples/airline/src/main/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpoint.java b/samples/airline/src/main/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpoint.java index 39a51afd..0f657c66 100644 --- a/samples/airline/src/main/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpoint.java +++ b/samples/airline/src/main/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpoint.java @@ -18,7 +18,9 @@ package org.springframework.ws.samples.airline.ws; import java.util.Iterator; import java.util.List; -import org.joda.time.YearMonthDay; +import org.joda.time.Chronology; +import org.joda.time.DateTimeZone; +import org.joda.time.LocalDate; import org.joda.time.chrono.ISOChronology; import org.springframework.ws.samples.airline.schema.Airport; import org.springframework.ws.samples.airline.schema.Flight; @@ -48,7 +50,10 @@ public class GetFlightsEndpoint extends AbstractMarshallingPayloadEndpoint { protected Object invokeInternal(Object requestObject) throws Exception { GetFlightsRequest request = (GetFlightsRequest) requestObject; - YearMonthDay departureDate = new YearMonthDay(request.getDepartureDate(), ISOChronology.getInstance()); + + DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(request.getDepartureDate().getTimeZone()); + Chronology chronology = ISOChronology.getInstance(dateTimeZone); + LocalDate departureDate = new LocalDate(request.getDepartureDate(), chronology); if (logger.isDebugEnabled()) { logger.debug("Request for flights from '" + request.getFrom() + "' to '" + request.getTo() + "' on " + departureDate); diff --git a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties index de246a14..2962f908 100644 --- a/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties +++ b/samples/airline/src/main/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties @@ -1,6 +1,5 @@ # Properties file with hibernate-related settings. hibernate.dialect=${hibernate.dialect} +hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto} hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider -#hibernate.hbm2ddl.auto=create-drop -#hibernate.show_sql=true diff --git a/samples/airline/src/test/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDaoTest.java b/samples/airline/src/test/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDaoTest.java index 2311db15..916dc386 100644 --- a/samples/airline/src/test/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDaoTest.java +++ b/samples/airline/src/test/java/org/springframework/ws/samples/airline/dao/hibernate/HibernateFlightDaoTest.java @@ -18,6 +18,7 @@ package org.springframework.ws.samples.airline.dao.hibernate; import java.util.List; import org.joda.time.DateTime; +import org.joda.time.Interval; import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests; import org.springframework.ws.samples.airline.domain.Airport; import org.springframework.ws.samples.airline.domain.Flight; @@ -35,6 +36,8 @@ public class HibernateFlightDaoTest extends AbstractTransactionalDataSourceSprin private DateTime arrivalTime; + private Interval interval; + protected String[] getConfigLocations() { return new String[]{ "classpath:org/springframework/ws/samples/airline/dao/hibernate/applicationContext-hibernate.xml"}; @@ -47,6 +50,7 @@ public class HibernateFlightDaoTest extends AbstractTransactionalDataSourceSprin protected void onSetUpBeforeTransaction() throws Exception { departureTime = new DateTime(2006, 1, 31, 10, 5, 0, 0); arrivalTime = new DateTime(2006, 1, 31, 12, 25, 0, 0); + interval = new Interval(departureTime, arrivalTime); } protected void onSetUpInTransaction() throws Exception { @@ -60,7 +64,7 @@ public class HibernateFlightDaoTest extends AbstractTransactionalDataSourceSprin jdbcTemplate .update("INSERT INTO FLIGHT(NUMBER, DEPARTURE_TIME, FROM_AIRPORT_CODE, ARRIVAL_TIME, TO_AIRPORT_CODE, SERVICE_CLASS, SEATS_AVAILABLE, MILES) " + "VALUES ('KL020','2006-01-31 10:05:00', 'RTM', '2006-01-31 12:25:00', 'OSL', 'business', 90, 10)"); - List flights = flightDao.findFlights("RTM", "OSL", departureTime, arrivalTime, ServiceClass.BUSINESS); + List flights = flightDao.findFlights("RTM", "OSL", interval, ServiceClass.BUSINESS); assertNotNull("Invalid result", flights); assertEquals("Invalid amount of flights", 1, flights.size()); } @@ -70,7 +74,7 @@ public class HibernateFlightDaoTest extends AbstractTransactionalDataSourceSprin .update("INSERT INTO FLIGHT(NUMBER, DEPARTURE_TIME, FROM_AIRPORT_CODE, ARRIVAL_TIME, TO_AIRPORT_CODE, SERVICE_CLASS, SEATS_AVAILABLE, MILES) " + "VALUES ('KL020','2006-01-31 10:05:00', 'RTM', '2006-01-31 12:25:00', 'OSL', 'business', 90, 10)"); DateTime dateTime = new DateTime(2006, 6, 1, 0, 0, 0, 0); - List flights = flightDao.findFlights("RTM", "OSL", dateTime, dateTime, ServiceClass.BUSINESS); + List flights = flightDao.findFlights("RTM", "OSL", new Interval(dateTime, dateTime), ServiceClass.BUSINESS); assertNotNull("Invalid result", flights); assertEquals("Invalid amount of flights", 0, flights.size()); } diff --git a/samples/airline/src/test/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImplTest.java b/samples/airline/src/test/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImplTest.java index 3edc3d8b..9ff9d25a 100644 --- a/samples/airline/src/test/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImplTest.java +++ b/samples/airline/src/test/java/org/springframework/ws/samples/airline/service/impl/AirlineServiceImplTest.java @@ -22,8 +22,7 @@ import java.util.List; import junit.framework.TestCase; import org.easymock.MockControl; import org.joda.time.DateTime; -import org.joda.time.YearMonthDay; - +import org.joda.time.LocalDate; import org.springframework.ws.samples.airline.dao.FlightDao; import org.springframework.ws.samples.airline.dao.TicketDao; import org.springframework.ws.samples.airline.domain.Flight; @@ -153,14 +152,12 @@ public class AirlineServiceImplTest extends TestCase { public void testGetFlights() throws Exception { String toCode = "to"; String fromCode = "from"; - YearMonthDay departureDate = new YearMonthDay(2006, 1, 31); + LocalDate departureDate = new LocalDate(2006, 1, 31); Flight flight = new Flight(); List flights = new ArrayList(); flights.add(flight); - DateTime startOfPeriod = new DateTime(2006, 1, 31, 0, 0, 0, 0); - DateTime endOfPeriod = new DateTime(2006, 2, 1, 0, 0, 0, 0); flightDaoControl.expectAndReturn( - flightDaoMock.findFlights(fromCode, toCode, startOfPeriod, endOfPeriod, ServiceClass.ECONOMY), flights); + flightDaoMock.findFlights(fromCode, toCode, departureDate.toInterval(), ServiceClass.ECONOMY), flights); flightDaoControl.replay(); ticketDaoControl.replay(); securityServiceControl.replay(); @@ -172,14 +169,12 @@ public class AirlineServiceImplTest extends TestCase { public void testGetFlightsDefaultServiceClass() throws Exception { String toCode = "to"; String fromCode = "from"; - YearMonthDay departureDate = new YearMonthDay(2006, 1, 31); + LocalDate departureDate = new LocalDate(2006, 1, 31); Flight flight = new Flight(); List flights = new ArrayList(); flights.add(flight); - DateTime startOfPeriod = new DateTime(2006, 1, 31, 0, 0, 0, 0); - DateTime endOfPeriod = new DateTime(2006, 2, 1, 0, 0, 0, 0); flightDaoControl.expectAndReturn( - flightDaoMock.findFlights(fromCode, toCode, startOfPeriod, endOfPeriod, ServiceClass.ECONOMY), flights); + flightDaoMock.findFlights(fromCode, toCode, departureDate.toInterval(), ServiceClass.ECONOMY), flights); flightDaoControl.replay(); ticketDaoControl.replay(); securityServiceControl.replay(); diff --git a/samples/airline/src/test/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpointTest.java b/samples/airline/src/test/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpointTest.java index 1f7e58fd..e42f82c4 100644 --- a/samples/airline/src/test/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpointTest.java +++ b/samples/airline/src/test/java/org/springframework/ws/samples/airline/ws/GetFlightsEndpointTest.java @@ -16,19 +16,24 @@ package org.springframework.ws.samples.airline.ws; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import junit.framework.TestCase; import org.easymock.MockControl; import org.joda.time.DateTime; -import org.joda.time.YearMonthDay; - +import org.joda.time.LocalDate; +import org.springframework.oxm.jaxb.Jaxb1Marshaller; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.context.MessageContext; import org.springframework.ws.samples.airline.domain.Flight; import org.springframework.ws.samples.airline.schema.GetFlightsRequest; import org.springframework.ws.samples.airline.schema.GetFlightsResponse; import org.springframework.ws.samples.airline.schema.ServiceClass; import org.springframework.ws.samples.airline.schema.impl.GetFlightsRequestImpl; import org.springframework.ws.samples.airline.service.AirlineService; +import org.springframework.xml.transform.StringResult; +import org.springframework.xml.transform.StringSource; public class GetFlightsEndpointTest extends TestCase { @@ -48,7 +53,7 @@ public class GetFlightsEndpointTest extends TestCase { public void testInvoke() throws Exception { String fromAirportCode = "ABC"; String toAirportCode = "DEF"; - YearMonthDay departureDate = new YearMonthDay(); + LocalDate departureDate = new LocalDate(); GetFlightsRequest request = new GetFlightsRequestImpl(); request.setFrom(fromAirportCode); request.setTo(toAirportCode); @@ -72,4 +77,42 @@ public class GetFlightsEndpointTest extends TestCase { assertEquals("Invalid flight number on flight", "1", responseFlight.getNumber()); } + public void testMarshalling() throws Exception { + Jaxb1Marshaller marshaller = new Jaxb1Marshaller(); + marshaller.setContextPath("org.springframework.ws.samples.airline.schema"); + marshaller.setValidating(true); + marshaller.afterPropertiesSet(); + endpoint.setMarshaller(marshaller); + endpoint.setUnmarshaller(marshaller); + + MockControl contextControl = MockControl.createControl(MessageContext.class); + MessageContext contextMock = (MessageContext) contextControl.getMock(); + MockControl messageControl = MockControl.createControl(WebServiceMessage.class); + WebServiceMessage requestMock = (WebServiceMessage) messageControl.getMock(); + WebServiceMessage responseMock = (WebServiceMessage) messageControl.getMock(); + + contextControl.expectAndReturn(contextMock.getRequest(), requestMock); + StringSource source = new StringSource( + "AMSVCE2006-01-31Z"); + messageControl.expectAndReturn(requestMock.getPayloadSource(), source); + String fromAirportCode = "AMS"; + String toAirportCode = "VCE"; + LocalDate departureDate = new LocalDate(2006, 1, 31); + serviceControl.expectAndReturn(serviceMock.getFlights(fromAirportCode, toAirportCode, departureDate, null), + Collections.EMPTY_LIST); + contextControl.expectAndReturn(contextMock.getResponse(), responseMock); + StringResult result = new StringResult(); + messageControl.expectAndReturn(responseMock.getPayloadResult(), result); + + contextControl.replay(); + messageControl.replay(); + serviceControl.replay(); + + endpoint.invoke(contextMock); + + contextControl.verify(); + messageControl.verify(); + serviceControl.verify(); + } + } diff --git a/samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties b/samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties deleted file mode 100644 index 19aee7d9..00000000 --- a/samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/hibernate/hibernate.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Test-specific settings for the DAO layer -# Uses an in-memory HSQL database - -hibernate.dialect=org.hibernate.dialect.HSQLDialect -hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider -hibernate.hbm2ddl.auto=create-drop \ No newline at end of file diff --git a/samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/jdbc.properties b/samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/jdbc.properties deleted file mode 100644 index 0f470851..00000000 --- a/samples/airline/src/test/resources/org/springframework/ws/samples/airline/dao/jdbc.properties +++ /dev/null @@ -1,7 +0,0 @@ -# Test-specific settings for the DAO layer -# Uses an in-memory HSQL database - -jdbc.driverClassName=org.hsqldb.jdbcDriver -jdbc.username=sa -jdbc.password= -jdbc.url=jdbc:hsqldb:mem:airline