diff --git a/stockquote/build.gradle b/stockquote/build.gradle index 5736641..8f1c400 100644 --- a/stockquote/build.gradle +++ b/stockquote/build.gradle @@ -1,3 +1,6 @@ +ext.springWsVersion = '2.2.0.BUILD-SNAPSHOT' +ext.springVersion = '4.0.3.RELEASE' + subprojects { apply plugin: 'java' apply plugin: 'eclipse' @@ -5,6 +8,7 @@ subprojects { repositories { maven { url 'http://repo.spring.io/libs-release' } + maven { url 'http://repo.spring.io/libs-snapshot' } } dependencies { @@ -12,8 +16,4 @@ subprojects { testCompile("org.easymock:easymock:3.1") } -} - -task wrapper(type: Wrapper) { - gradleVersion = '1.8' -} +} \ No newline at end of file diff --git a/stockquote/client/spring-ws/build.gradle b/stockquote/client/spring-ws/build.gradle index d41d980..b441968 100644 --- a/stockquote/client/spring-ws/build.gradle +++ b/stockquote/client/spring-ws/build.gradle @@ -1,5 +1,3 @@ -ext.springWsVersion = '2.1.4.RELEASE' - dependencies { compile("org.springframework.ws:spring-ws-core:$springWsVersion") runtime("log4j:log4j:1.2.16") diff --git a/stockquote/client/spring-ws/src/main/java/org/springframework/ws/samples/stockquote/client/sws/StockClient.java b/stockquote/client/spring-ws/src/main/java/org/springframework/ws/samples/stockquote/client/sws/StockClient.java index 1f05c2b..fafd272 100644 --- a/stockquote/client/spring-ws/src/main/java/org/springframework/ws/samples/stockquote/client/sws/StockClient.java +++ b/stockquote/client/spring-ws/src/main/java/org/springframework/ws/samples/stockquote/client/sws/StockClient.java @@ -20,8 +20,7 @@ import java.io.IOException; import java.net.URI; import javax.xml.transform.Source; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.ws.client.core.support.WebServiceGatewaySupport; import org.springframework.ws.soap.addressing.client.ActionCallback; @@ -51,10 +50,12 @@ public class StockClient extends WebServiceGatewaySupport { System.out.println(); } - public static void main(String[] args) throws IOException { - ApplicationContext applicationContext = - new ClassPathXmlApplicationContext("applicationContext.xml", StockClient.class); - StockClient stockClient = (StockClient) applicationContext.getBean("stockClient"); + public static void main(String[] args) throws Exception { + StockClient stockClient = new StockClient(); + stockClient.setDefaultUri("http://localhost:8080/StockService"); + stockClient.setRequest(new ClassPathResource("/org/springframework/ws/samples/stockquote/client/sws/quotesRequest.xml")); + stockClient.setAction(new URI("http://www.springframework.org/spring-ws/samples/stockquote/StockService/GetQuote")); + stockClient.quotes(); } diff --git a/stockquote/client/spring-ws/src/main/resources/org/springframework/ws/samples/stockquote/client/sws/applicationContext.xml b/stockquote/client/spring-ws/src/main/resources/org/springframework/ws/samples/stockquote/client/sws/applicationContext.xml deleted file mode 100644 index 83cbb81..0000000 --- a/stockquote/client/spring-ws/src/main/resources/org/springframework/ws/samples/stockquote/client/sws/applicationContext.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/stockquote/server/build.gradle b/stockquote/server/build.gradle index 31b6013..38c3e36 100644 --- a/stockquote/server/build.gradle +++ b/stockquote/server/build.gradle @@ -2,9 +2,6 @@ configurations { jaxb } -ext.springVersion = '3.2.4.RELEASE' -ext.springWsVersion = '2.1.4.RELEASE' - task genJaxb { ext.sourcesDir = "${buildDir}/generated-sources/jaxb" ext.classesDir = "${buildDir}/classes/jaxb" diff --git a/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/Driver.java b/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/Driver.java index 75bac39..d938957 100644 --- a/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/Driver.java +++ b/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/Driver.java @@ -17,18 +17,32 @@ package org.springframework.ws.samples.stockquote; import java.io.IOException; +import java.net.InetSocketAddress; -import org.springframework.context.support.ClassPathXmlApplicationContext; +import com.sun.net.httpserver.HttpServer; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.ws.samples.stockquote.ws.StockServiceConfiguration; +import org.springframework.ws.transport.http.WebServiceMessageReceiverHttpHandler; +import org.springframework.ws.transport.http.WsdlDefinitionHttpHandler; public class Driver { public static void main(String[] args) throws IOException { - ClassPathXmlApplicationContext applicationContext = - new ClassPathXmlApplicationContext("applicationContext.xml", Driver.class); + AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext( + StockServiceConfiguration.class); + + HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), -1); + httpServer.createContext("/StockService", applicationContext.getBean( + WebServiceMessageReceiverHttpHandler.class)); + httpServer.createContext("/StockService.wsdl", applicationContext.getBean( + WsdlDefinitionHttpHandler.class)); + + httpServer.start(); System.out.println(); System.out.println("Press [Enter] to shut down..."); System.in.read(); - applicationContext.close(); + httpServer.stop(0); } } diff --git a/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockService.java b/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockService.java index 64eed48..7f09ae4 100644 --- a/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockService.java +++ b/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockService.java @@ -25,12 +25,13 @@ import org.springframework.ws.samples.stockquote.schema.StockQuote; import org.springframework.ws.samples.stockquote.schema.StockQuoteRequest; import org.springframework.ws.samples.stockquote.schema.StockQuoteResponse; import org.springframework.ws.server.endpoint.annotation.Endpoint; +import org.springframework.ws.server.endpoint.annotation.RequestPayload; +import org.springframework.ws.server.endpoint.annotation.ResponsePayload; import org.springframework.ws.soap.addressing.server.annotation.Action; import org.springframework.ws.soap.addressing.server.annotation.Address; @Endpoint -@Address("http://localhost:8080/StockService") -// optional +@Address("http://localhost:8080/StockService") // optional public class StockService { private DatatypeFactory datatypeFactory; @@ -41,7 +42,8 @@ public class StockService { @Action(value = "http://www.springframework.org/spring-ws/samples/stockquote/StockService/GetQuote", output = "http://www.springframework.org/spring-ws/samples/stockquote/StockService/Quotes") - public StockQuoteResponse getStockQuotes(StockQuoteRequest request) { + @ResponsePayload + public StockQuoteResponse getStockQuotes(@RequestPayload StockQuoteRequest request) { StockQuoteResponse response = new StockQuoteResponse(); XMLGregorianCalendar now = datatypeFactory.newXMLGregorianCalendar(new GregorianCalendar()); diff --git a/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockServiceConfiguration.java b/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockServiceConfiguration.java new file mode 100644 index 0000000..5d9f0dd --- /dev/null +++ b/stockquote/server/src/main/java/org/springframework/ws/samples/stockquote/ws/StockServiceConfiguration.java @@ -0,0 +1,81 @@ +package org.springframework.ws.samples.stockquote.ws; + +import java.util.Collections; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.ws.server.EndpointAdapter; +import org.springframework.ws.server.EndpointInterceptor; +import org.springframework.ws.server.EndpointMapping; +import org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter; +import org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping; +import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; +import org.springframework.ws.soap.server.SoapMessageDispatcher; +import org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor; +import org.springframework.ws.transport.http.HttpUrlConnectionMessageSender; +import org.springframework.ws.transport.http.WebServiceMessageReceiverHttpHandler; +import org.springframework.ws.transport.http.WsdlDefinitionHttpHandler; +import org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition; + +/** + * @author Arjen Poutsma + */ +@Configuration +@ComponentScan("org.springframework.ws.samples.stockquote.ws") +public class StockServiceConfiguration { + + @Bean + public WebServiceMessageReceiverHttpHandler soapHandler() { + WebServiceMessageReceiverHttpHandler soapHandler = new WebServiceMessageReceiverHttpHandler(); + soapHandler.setMessageFactory(messageFactory()); + soapHandler.setMessageReceiver(messageReceiver()); + return soapHandler; + } + + @Bean + public SaajSoapMessageFactory messageFactory() { + return new SaajSoapMessageFactory(); + } + + @Bean + public SoapMessageDispatcher messageReceiver() { + SoapMessageDispatcher messageReceiver = new SoapMessageDispatcher(); + messageReceiver.setEndpointAdapters( + Collections.singletonList(endpointAdapter())); + messageReceiver.setEndpointMappings( + Collections.singletonList(endpointMapping())); + return messageReceiver; + } + + @Bean + public DefaultMethodEndpointAdapter endpointAdapter() { + return new DefaultMethodEndpointAdapter(); + } + + @Bean + public AnnotationActionEndpointMapping endpointMapping() { + AnnotationActionEndpointMapping endpointMapping = new AnnotationActionEndpointMapping(); + endpointMapping.setMessageSender(messageSender()); + endpointMapping.setPreInterceptors(new EndpointInterceptor[] { new SoapEnvelopeLoggingInterceptor()}); + return endpointMapping; + } + + @Bean + public HttpUrlConnectionMessageSender messageSender() { + return new HttpUrlConnectionMessageSender(); + } + + @Bean + public WsdlDefinitionHttpHandler wsdlHandler() { + return new WsdlDefinitionHttpHandler(wsdlDefinition()); + } + + @Bean + public SimpleWsdl11Definition wsdlDefinition() { + return new SimpleWsdl11Definition(new ClassPathResource("/org/springframework/ws/samples/stockquote/ws/stockquote.wsdl")); + } + + +} diff --git a/stockquote/server/src/main/resources/org/springframework/ws/samples/stockquote/applicationContext.xml b/stockquote/server/src/main/resources/org/springframework/ws/samples/stockquote/applicationContext.xml deleted file mode 100644 index 8f53e13..0000000 --- a/stockquote/server/src/main/resources/org/springframework/ws/samples/stockquote/applicationContext.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/stockquote/server/src/main/resources/org/springframework/ws/samples/stockquote/ws/applicationContext-ws.xml b/stockquote/server/src/main/resources/org/springframework/ws/samples/stockquote/ws/applicationContext-ws.xml deleted file mode 100644 index ca23b94..0000000 --- a/stockquote/server/src/main/resources/org/springframework/ws/samples/stockquote/ws/applicationContext-ws.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file