Upgrade to Spring Boot + Spring Data.

Update this repository to use modern Spring practices including:

* Spring Boot
* Spring Data JPA
* Spring Framework's Java configuration
This commit is contained in:
Greg L. Turnquist
2020-06-22 09:44:38 -05:00
parent 29b50cc066
commit 27b18118c1
186 changed files with 5247 additions and 5200 deletions

View File

@@ -0,0 +1,12 @@
package org.springframework.ws.samples.echo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class EchoApplication {
public static void main(String[] args) {
SpringApplication.run(EchoApplication.class, args);
}
}

View File

@@ -19,10 +19,8 @@ package org.springframework.ws.samples.echo.config;
import java.util.List;
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.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.server.EndpointInterceptor;
import org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor;
@@ -35,9 +33,7 @@ import org.springframework.xml.xsd.SimpleXsdSchema;
*
* @author Arjen Poutsma
*/
@EnableWs
@Configuration
@ComponentScan("org.springframework.ws.samples.echo")
public class EchoConfig extends WsConfigurerAdapter {
@Bean
@@ -47,7 +43,9 @@ public class EchoConfig extends WsConfigurerAdapter {
@Override
public void addInterceptors(List<EndpointInterceptor> interceptors) {
PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor();
validatingInterceptor.setXsdSchema(echoXsd());
validatingInterceptor.setValidateRequest(true);
validatingInterceptor.setValidateResponse(true);
@@ -56,12 +54,13 @@ public class EchoConfig extends WsConfigurerAdapter {
interceptors.add(new PayloadLoggingInterceptor());
}
@Bean
public DefaultWsdl11Definition echo() {
@Bean("echo-server")
public DefaultWsdl11Definition echo(SimpleXsdSchema echoXsd) {
DefaultWsdl11Definition definition = new DefaultWsdl11Definition();
definition.setPortTypeName("Echo");
definition.setLocationUri("http://localhost:8080/echo/services");
definition.setSchema(echoXsd());
definition.setLocationUri("http://localhost:8080/echo-server/services");
definition.setSchema(echoXsd);
return definition;
}

View File

@@ -1,43 +0,0 @@
/*
* Copyright 2005-2014 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.echo.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.ws.transport.http.support.AbstractAnnotationConfigMessageDispatcherServletInitializer;
/**
* {@link WebApplicationInitializer} for the echo sample.
* @author Arjen Poutsma
*/
public class EchoServletInitializer
extends AbstractAnnotationConfigMessageDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{EchoConfig.class};
}
@Override
public boolean isTransformWsdlLocations() {
return true;
}
}

View File

@@ -24,10 +24,10 @@ package org.springframework.ws.samples.echo.service;
*/
public interface EchoService {
/**
* Returns the given string.
*
* @return <code>s</code>
*/
String echo(String s);
/**
* Returns the given string.
*
* @return <code>message</code>
*/
String echo(String message);
}

View File

@@ -28,7 +28,7 @@ import org.springframework.ws.samples.echo.service.EchoService;
@Service
public class EchoServiceImpl implements EchoService {
public String echo(String s) {
return s;
}
public String echo(String message) {
return message;
}
}

View File

@@ -20,14 +20,12 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.ws.samples.echo.service.EchoService;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -43,62 +41,64 @@ import org.w3c.dom.Text;
@Endpoint
public class EchoEndpoint {
/**
* Namespace of both request and response.
*/
public static final String NAMESPACE_URI = "http://www.springframework.org/spring-ws/samples/echo";
/**
* Namespace of both request and response.
*/
public static final String NAMESPACE_URI = "http://www.springframework.org/spring-ws/samples/echo";
/**
* The local name of the expected request.
*/
public static final String ECHO_REQUEST_LOCAL_NAME = "echoRequest";
/**
* The local name of the expected request.
*/
public static final String ECHO_REQUEST_LOCAL_NAME = "echoRequest";
/**
* The local name of the created response.
*/
public static final String ECHO_RESPONSE_LOCAL_NAME = "echoResponse";
/**
* The local name of the created response.
*/
public static final String ECHO_RESPONSE_LOCAL_NAME = "echoResponse";
private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
private final EchoService echoService;
private final EchoService echoService;
@Autowired
public EchoEndpoint(EchoService echoService) {
this.echoService = echoService;
}
public EchoEndpoint(EchoService echoService) {
this.echoService = echoService;
}
/**
* Reads the given <code>requestElement</code>, and sends a the response back.
*
* @param requestElement the contents of the SOAP message as DOM elements
* @return the response element
*/
@PayloadRoot(localPart = ECHO_REQUEST_LOCAL_NAME, namespace = NAMESPACE_URI)
@ResponsePayload
public Element handleEchoRequest(@RequestPayload Element requestElement) throws ParserConfigurationException {
/**
* Reads the given <code>requestElement</code>, and sends a the response back.
*
* @param requestElement the contents of the SOAP message as DOM elements
* @return the response element
*/
@PayloadRoot(localPart = ECHO_REQUEST_LOCAL_NAME, namespace = NAMESPACE_URI)
@ResponsePayload
public Element handleEchoRequest(@RequestPayload Element requestElement) throws ParserConfigurationException {
Assert.isTrue(NAMESPACE_URI.equals(requestElement.getNamespaceURI()), "Invalid namespace");
Assert.isTrue(ECHO_REQUEST_LOCAL_NAME.equals(requestElement.getLocalName()), "Invalid local name");
Assert.isTrue(NAMESPACE_URI.equals(requestElement.getNamespaceURI()), "Invalid namespace");
Assert.isTrue(ECHO_REQUEST_LOCAL_NAME.equals(requestElement.getLocalName()), "Invalid local name");
NodeList children = requestElement.getChildNodes();
Text requestText = null;
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i).getNodeType() == Node.TEXT_NODE) {
requestText = (Text) children.item(i);
break;
}
}
if (requestText == null) {
throw new IllegalArgumentException("Could not find request text node");
}
NodeList children = requestElement.getChildNodes();
Text requestText = null;
String echo = echoService.echo(requestText.getNodeValue());
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i).getNodeType() == Node.TEXT_NODE) {
requestText = (Text) children.item(i);
break;
}
}
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element responseElement = document.createElementNS(NAMESPACE_URI, ECHO_RESPONSE_LOCAL_NAME);
Text responseText = document.createTextNode(echo);
responseElement.appendChild(responseText);
return responseElement;
}
if (requestText == null) {
throw new IllegalArgumentException("Could not find request text node");
}
String echo = echoService.echo(requestText.getNodeValue());
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element responseElement = document.createElementNS(NAMESPACE_URI, ECHO_RESPONSE_LOCAL_NAME);
Text responseText = document.createTextNode(echo);
responseElement.appendChild(responseText);
return responseElement;
}
}

View File

@@ -0,0 +1,9 @@
logging:
level:
org.springframework:
ws: TRACE
web: TRACE
xml: DEBUG
spring:
webservices:
path: /echo-server

View File

@@ -1,7 +0,0 @@
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
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

View File

@@ -16,60 +16,56 @@
package org.springframework.ws.samples.echo.ws;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.ws.samples.echo.service.EchoService;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import static org.easymock.EasyMock.*;
public class EchoEndpointTest {
private EchoEndpoint endpoint;
private EchoEndpoint endpoint;
private Document requestDocument;
private Document requestDocument;
private Document responseDocument;
private Document responseDocument;
private EchoService mock;
private EchoService echoServiceMock;
@Before
public void setUp() throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
requestDocument = documentBuilder.newDocument();
responseDocument = documentBuilder.newDocument();
mock = createMock(EchoService.class);
endpoint = new EchoEndpoint(mock);
}
@BeforeEach
public void setUp() throws Exception {
@Test
public void testInvokeInternal() throws Exception {
Element echoRequest =
requestDocument.createElementNS(EchoEndpoint.NAMESPACE_URI, EchoEndpoint.ECHO_REQUEST_LOCAL_NAME);
String content = "ABC";
Text requestText = requestDocument.createTextNode(content);
echoRequest.appendChild(requestText);
String result = "DEF";
expect(mock.echo(content)).andReturn(result);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
requestDocument = documentBuilder.newDocument();
responseDocument = documentBuilder.newDocument();
echoServiceMock = mock(EchoService.class);
endpoint = new EchoEndpoint(echoServiceMock);
}
replay(mock);
@Test
public void testInvokeInternal() throws Exception {
Element echoResponse = endpoint.handleEchoRequest(echoRequest);
Assert.assertEquals("Invalid namespace", EchoEndpoint.NAMESPACE_URI, echoResponse.getNamespaceURI());
Assert.assertEquals("Invalid namespace", EchoEndpoint.ECHO_RESPONSE_LOCAL_NAME, echoResponse.getLocalName());
Text responseText = (Text) echoResponse.getChildNodes().item(0);
Assert.assertEquals("Invalid content", result, responseText.getNodeValue());
Element echoRequest = requestDocument.createElementNS(EchoEndpoint.NAMESPACE_URI,
EchoEndpoint.ECHO_REQUEST_LOCAL_NAME);
Text requestText = requestDocument.createTextNode("ABC");
echoRequest.appendChild(requestText);
when(echoServiceMock.echo("ABC")).thenReturn("DEF");
verify(mock);
}
Element echoResponse = endpoint.handleEchoRequest(echoRequest);
}
assertThat(echoResponse.getNamespaceURI()).isEqualTo(EchoEndpoint.NAMESPACE_URI);
assertThat(echoResponse.getLocalName()).isEqualTo(EchoEndpoint.ECHO_RESPONSE_LOCAL_NAME);
assertThat(echoResponse.getChildNodes().item(0).getNodeValue()).isEqualTo("DEF");
verify(echoServiceMock);
}
}