From 3ba48e6648520ba5ae71eb52b2477df5c3132c52 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 5 Feb 2008 16:54:49 +0000 Subject: [PATCH] Using client-side WS-Security in airline Spring-WS client --- samples/airline/client/spring-ws/build.xml | 19 ++- .../client/spring-ws/src/log4j.properties | 2 + .../airline/client/sws/GetFlights.java | 111 ++++++++++++++++++ .../client/sws/GetFrequentFlyerMileage.java | 56 +++++++++ .../airline/client/sws/applicationContext.xml | 30 ++++- .../airline/client/sws/securityPolicy.xml | 3 + samples/airline/pom.xml | 3 +- 7 files changed, 214 insertions(+), 10 deletions(-) create mode 100644 samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFlights.java create mode 100644 samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFrequentFlyerMileage.java create mode 100644 samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/securityPolicy.xml diff --git a/samples/airline/client/spring-ws/build.xml b/samples/airline/client/spring-ws/build.xml index 0789f1c4..884e06e6 100644 --- a/samples/airline/client/spring-ws/build.xml +++ b/samples/airline/client/spring-ws/build.xml @@ -20,11 +20,12 @@ - + + - + @@ -54,11 +55,19 @@ - + - + + + + + + + + diff --git a/samples/airline/client/spring-ws/src/log4j.properties b/samples/airline/client/spring-ws/src/log4j.properties index f50b4194..0f73a758 100644 --- a/samples/airline/client/spring-ws/src/log4j.properties +++ b/samples/airline/client/spring-ws/src/log4j.properties @@ -1,4 +1,6 @@ log4j.rootLogger=WARN, stdout +log4j.logger.org.springframework.ws=DEBUG +log4j.logger.org.springframework.xml=DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout diff --git a/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFlights.java b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFlights.java new file mode 100644 index 00000000..c67f0937 --- /dev/null +++ b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFlights.java @@ -0,0 +1,111 @@ +/* + * 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. + */ + +package org.springframework.ws.samples.airline.client.sws; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.springWs.samples.airline.schemas.messages.BookFlightRequestDocument; +import org.springframework.springWs.samples.airline.schemas.messages.BookFlightResponseDocument; +import org.springframework.springWs.samples.airline.schemas.messages.GetFlightsRequestDocument; +import org.springframework.springWs.samples.airline.schemas.messages.GetFlightsResponseDocument; +import org.springframework.springWs.samples.airline.schemas.types.Flight; +import org.springframework.springWs.samples.airline.schemas.types.Name; +import org.springframework.springWs.samples.airline.schemas.types.Ticket; +import org.springframework.ws.WebServiceMessageFactory; +import org.springframework.ws.client.core.support.WebServiceGatewaySupport; + +public class GetFlights extends WebServiceGatewaySupport { + + public GetFlights(WebServiceMessageFactory messageFactory) { + super(messageFactory); + } + + public void getFlights() { + GetFlightsRequestDocument getFlightsRequestDocument = GetFlightsRequestDocument.Factory.newInstance(); + GetFlightsRequestDocument.GetFlightsRequest getFlightsRequest = + getFlightsRequestDocument.addNewGetFlightsRequest(); + getFlightsRequest.setFrom("AMS"); + getFlightsRequest.setTo("VCE"); + Calendar departureDate = Calendar.getInstance(); + departureDate.clear(); + departureDate.set(2006, Calendar.JANUARY, 31); + getFlightsRequest.setDepartureDate(departureDate); + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + System.out.println("Requesting flights on " + dateFormat.format(departureDate.getTime())); + GetFlightsResponseDocument getFlightsResponseDocument = + (GetFlightsResponseDocument) getWebServiceTemplate().marshalSendAndReceive(getFlightsRequestDocument); + GetFlightsResponseDocument.GetFlightsResponse response = getFlightsResponseDocument.getGetFlightsResponse(); + System.out.println("Got " + response.sizeOfFlightArray() + " results"); + if (response.sizeOfFlightArray() > 0) { + // Book the first flight using John Doe as a frequent flyer + BookFlightRequestDocument bookFlightRequestDocument = BookFlightRequestDocument.Factory.newInstance(); + BookFlightRequestDocument.BookFlightRequest bookFlightRequest = + bookFlightRequestDocument.addNewBookFlightRequest(); + bookFlightRequest.setFlightNumber(response.getFlightArray(0).getNumber()); + bookFlightRequest.setDepartureTime(response.getFlightArray(0).getDepartureTime()); + BookFlightRequestDocument.BookFlightRequest.Passengers passengers = bookFlightRequest.addNewPassengers(); + passengers.addUsername("john"); + + BookFlightResponseDocument bookFlightResponseDocument = (BookFlightResponseDocument) getWebServiceTemplate() + .marshalSendAndReceive(bookFlightRequestDocument); + Ticket ticket = bookFlightResponseDocument.getBookFlightResponse(); + writeTicket(ticket); + } + } + + private void writeTicket(Ticket ticket) { + System.out.println("Ticket " + ticket.getId()); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + System.out.println("Ticket issue date:\t" + dateFormat.format(ticket.getIssueDate().getTime())); + for (int i = 0; i < ticket.getPassengers().sizeOfPassengerArray(); i++) { + writeName(ticket.getPassengers().getPassengerArray(i)); + + } + writeFlight(ticket.getFlight()); + } + + private void writeName(Name name) { + System.out.println("Passenger Name:"); + System.out.println(name.getFirst() + " " + name.getLast()); + System.out.println("------------"); + } + + private void writeFlight(Flight flight) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + System.out.println(dateFormat.format(flight.getDepartureTime().getTime())); + System.out.println(flight.getNumber() + "\t" + flight.getServiceClass()); + System.out.println("------------"); + System.out.println("Depart:\t" + flight.getFrom().getCode() + "-" + flight.getFrom().getName() + "\t" + + dateFormat.format(flight.getDepartureTime().getTime())); + System.out.println("\t" + flight.getFrom().getCity()); + System.out.println("Arrive:\t" + flight.getTo().getCode() + "-" + flight.getTo().getName() + "\t" + + dateFormat.format(flight.getArrivalTime().getTime())); + System.out.println("\t" + flight.getTo().getCity()); + } + + public static void main(String[] args) { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "org/springframework/ws/samples/airline/client/sws/applicationContext.xml"); + GetFlights getFlights = (GetFlights) applicationContext.getBean("getFlights", GetFlights.class); + getFlights.getFlights(); + } + +} diff --git a/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFrequentFlyerMileage.java b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFrequentFlyerMileage.java new file mode 100644 index 00000000..773338c6 --- /dev/null +++ b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/GetFrequentFlyerMileage.java @@ -0,0 +1,56 @@ +/* + * Copyright 2008 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.ws.samples.airline.client.sws; + +import javax.xml.transform.Result; +import javax.xml.transform.Source; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.ws.WebServiceMessageFactory; +import org.springframework.ws.client.core.support.WebServiceGatewaySupport; +import org.springframework.xml.transform.StringResult; +import org.springframework.xml.transform.StringSource; + +public class GetFrequentFlyerMileage extends WebServiceGatewaySupport { + + public GetFrequentFlyerMileage(WebServiceMessageFactory messageFactory) { + super(messageFactory); + } + + public void getFrequentFlyerMileage() { + Source source = new StringSource( + ""); + + Result result = new StringResult(); + + getWebServiceTemplate().sendSourceAndReceiveToResult(source, result); + + System.out.println("result = " + result); + } + + public static void main(String[] args) { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "org/springframework/ws/samples/airline/client/sws/applicationContext.xml"); + + GetFrequentFlyerMileage getFrequentFlyerMileage = (GetFrequentFlyerMileage) applicationContext + .getBean("getFrequentFlyerMileage", GetFrequentFlyerMileage.class); + getFrequentFlyerMileage.getFrequentFlyerMileage(); + } + + +} diff --git a/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/applicationContext.xml b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/applicationContext.xml index f33d9437..87c4829e 100644 --- a/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/applicationContext.xml +++ b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/applicationContext.xml @@ -2,12 +2,36 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/securityPolicy.xml b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/securityPolicy.xml new file mode 100644 index 00000000..85090738 --- /dev/null +++ b/samples/airline/client/spring-ws/src/org/springframework/ws/samples/airline/client/sws/securityPolicy.xml @@ -0,0 +1,3 @@ + + + diff --git a/samples/airline/pom.xml b/samples/airline/pom.xml index 1eccce27..ad55575a 100644 --- a/samples/airline/pom.xml +++ b/samples/airline/pom.xml @@ -19,7 +19,6 @@ javax.xml.bind jaxb-api - provided true 2.1 @@ -37,7 +36,7 @@ com.sun.xml.bind jaxb-impl 2.1.5 - provided + runtime javax.activation