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