Polish Spring-WS smoke test
This commit polishes the smoke test for Spring Web Services, namely
clearing unused dependencies and clarify the necessary configuration:
1. No need to extend from `WsConfigurationAdapter` if no advanced
configuration is required
2. Spring Web Services creates a `XsdSchema` bean whose name matches
the name of the file. Added a `@Qualifier("hr")` to make that more
obvious as it would break if an additional schema was to be added.
Closes gh-44515
			
			
This commit is contained in:
		
							parent
							
								
									05082cef4c
								
							
						
					
					
						commit
						9b41bbdc5c
					
				|  | @ -10,8 +10,6 @@ dependencies { | |||
| 
 | ||||
| 	runtimeOnly("jaxen:jaxen") | ||||
| 	runtimeOnly("wsdl4j:wsdl4j") | ||||
| 	runtimeOnly("jakarta.activation:jakarta.activation-api") | ||||
| 	runtimeOnly("org.glassfish.jaxb:jaxb-runtime") | ||||
| 	 | ||||
| 	testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test")) | ||||
| 	testImplementation("org.springframework.ws:spring-ws-test") | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2012-2019 the original author or authors. | ||||
|  * Copyright 2012-2025 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. | ||||
|  | @ -16,22 +16,22 @@ | |||
| 
 | ||||
| package smoketest.webservices; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Qualifier; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.ws.config.annotation.WsConfigurerAdapter; | ||||
| import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition; | ||||
| import org.springframework.xml.xsd.XsdSchema; | ||||
| 
 | ||||
| @Configuration(proxyBeanMethods = false) | ||||
| public class WebServiceConfig extends WsConfigurerAdapter { | ||||
| class WebServiceConfig { | ||||
| 
 | ||||
| 	@Bean(name = "holiday") | ||||
| 	public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) { | ||||
| 	DefaultWsdl11Definition defaultWsdl11Definition(@Qualifier("hr") XsdSchema hrSchema) { | ||||
| 		DefaultWsdl11Definition wsdl = new DefaultWsdl11Definition(); | ||||
| 		wsdl.setPortTypeName("HumanResource"); | ||||
| 		wsdl.setLocationUri("/holidayService/"); | ||||
| 		wsdl.setTargetNamespace("https://company.example.com/hr/definitions"); | ||||
| 		wsdl.setSchema(countriesSchema); | ||||
| 		wsdl.setSchema(hrSchema); | ||||
| 		return wsdl; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2012-2022 the original author or authors. | ||||
|  * Copyright 2012-2025 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. | ||||
|  | @ -16,8 +16,7 @@ | |||
| 
 | ||||
| package smoketest.webservices.endpoint; | ||||
| 
 | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.util.Date; | ||||
| import java.time.LocalDate; | ||||
| 
 | ||||
| import org.jdom2.Element; | ||||
| import org.jdom2.Namespace; | ||||
|  | @ -54,10 +53,9 @@ public class HolidayEndpoint { | |||
| 	} | ||||
| 
 | ||||
| 	@PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest") | ||||
| 	public void handleHolidayRequest(@RequestPayload Element holidayRequest) throws Exception { | ||||
| 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); | ||||
| 		Date startDate = dateFormat.parse(this.startDateExpression.evaluateFirst(holidayRequest).getText()); | ||||
| 		Date endDate = dateFormat.parse(this.endDateExpression.evaluateFirst(holidayRequest).getText()); | ||||
| 	public void handleHolidayRequest(@RequestPayload Element holidayRequest) { | ||||
| 		LocalDate startDate = LocalDate.parse(this.startDateExpression.evaluateFirst(holidayRequest).getText()); | ||||
| 		LocalDate endDate = LocalDate.parse(this.endDateExpression.evaluateFirst(holidayRequest).getText()); | ||||
| 		String name = this.nameExpression.evaluateFirst(holidayRequest); | ||||
| 		this.humanResourceService.bookHoliday(startDate, endDate, name); | ||||
| 	} | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2012-2019 the original author or authors. | ||||
|  * Copyright 2012-2025 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. | ||||
|  | @ -16,10 +16,10 @@ | |||
| 
 | ||||
| package smoketest.webservices.service; | ||||
| 
 | ||||
| import java.util.Date; | ||||
| import java.time.LocalDate; | ||||
| 
 | ||||
| public interface HumanResourceService { | ||||
| 
 | ||||
| 	void bookHoliday(Date startDate, Date endDate, String name); | ||||
| 	void bookHoliday(LocalDate startDate, LocalDate endDate, String name); | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2012-2019 the original author or authors. | ||||
|  * Copyright 2012-2025 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. | ||||
|  | @ -16,7 +16,7 @@ | |||
| 
 | ||||
| package smoketest.webservices.service; | ||||
| 
 | ||||
| import java.util.Date; | ||||
| import java.time.LocalDate; | ||||
| 
 | ||||
| import org.apache.commons.logging.Log; | ||||
| import org.apache.commons.logging.LogFactory; | ||||
|  | @ -24,13 +24,13 @@ import org.apache.commons.logging.LogFactory; | |||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| @Service | ||||
| public class StubHumanResourceService implements HumanResourceService { | ||||
| class StubHumanResourceService implements HumanResourceService { | ||||
| 
 | ||||
| 	private final Log logger = LogFactory.getLog(StubHumanResourceService.class); | ||||
| 	private static final Log logger = LogFactory.getLog(StubHumanResourceService.class); | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void bookHoliday(Date startDate, Date endDate, String name) { | ||||
| 		this.logger.info("Booking holiday for [" + startDate + " - " + endDate + "] for [" + name + "]"); | ||||
| 	public void bookHoliday(LocalDate startDate, LocalDate endDate, String name) { | ||||
| 		logger.info("Booking holiday for [" + startDate + " - " + endDate + "] for [" + name + "]"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2012-2022 the original author or authors. | ||||
|  * Copyright 2012-2025 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. | ||||
|  | @ -50,11 +50,18 @@ class SampleWsApplicationTests { | |||
| 
 | ||||
| 	@Test | ||||
| 	void testSendingHolidayRequest(CapturedOutput output) { | ||||
| 		final String request = "<hr:HolidayRequest xmlns:hr=\"https://company.example.com/hr/schemas\">" | ||||
| 				+ "   <hr:Holiday>      <hr:StartDate>2013-10-20</hr:StartDate>" | ||||
| 				+ "      <hr:EndDate>2013-11-22</hr:EndDate>   </hr:Holiday>   <hr:Employee>" | ||||
| 				+ "      <hr:Number>1</hr:Number>      <hr:FirstName>John</hr:FirstName>" | ||||
| 				+ "      <hr:LastName>Doe</hr:LastName>   </hr:Employee></hr:HolidayRequest>"; | ||||
| 		String request = """ | ||||
| 				<hr:HolidayRequest xmlns:hr="https://company.example.com/hr/schemas"> | ||||
| 					<hr:Holiday> | ||||
| 						<hr:StartDate>2013-10-20</hr:StartDate> | ||||
| 						<hr:EndDate>2013-11-22</hr:EndDate> | ||||
| 					</hr:Holiday> | ||||
| 					<hr:Employee> | ||||
| 						<hr:Number>1</hr:Number> | ||||
| 						<hr:FirstName>John</hr:FirstName> | ||||
| 						<hr:LastName>Doe</hr:LastName> | ||||
| 					</hr:Employee> | ||||
| 				</hr:HolidayRequest>"""; | ||||
| 		StreamSource source = new StreamSource(new StringReader(request)); | ||||
| 		StreamResult result = new StreamResult(System.out); | ||||
| 		this.webServiceTemplate.sendSourceAndReceiveToResult(source, result); | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /* | ||||
|  * Copyright 2012-2023 the original author or authors. | ||||
|  * Copyright 2012-2025 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. | ||||
|  | @ -17,21 +17,16 @@ | |||
| package smoketest.webservices; | ||||
| 
 | ||||
| import java.io.StringReader; | ||||
| import java.text.DateFormat; | ||||
| import java.text.ParseException; | ||||
| import java.text.SimpleDateFormat; | ||||
| import java.time.LocalDate; | ||||
| 
 | ||||
| import javax.xml.transform.stream.StreamSource; | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.junit.jupiter.api.extension.ExtendWith; | ||||
| import smoketest.webservices.service.HumanResourceService; | ||||
| 
 | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.boot.test.autoconfigure.webservices.server.WebServiceServerTest; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| import org.springframework.boot.test.system.CapturedOutput; | ||||
| import org.springframework.boot.test.system.OutputCaptureExtension; | ||||
| import org.springframework.ws.test.server.MockWebServiceClient; | ||||
| import org.springframework.ws.test.server.RequestCreators; | ||||
| import org.springframework.ws.test.server.ResponseMatchers; | ||||
|  | @ -43,9 +38,9 @@ import static org.mockito.BDDMockito.then; | |||
|  * {@link MockWebServiceClient}. | ||||
|  * | ||||
|  * @author Andy Wilkinson | ||||
|  * @author Stephane Nicoll | ||||
|  */ | ||||
| @WebServiceServerTest | ||||
| @ExtendWith(OutputCaptureExtension.class) | ||||
| class WebServiceServerTestSampleWsApplicationTests { | ||||
| 
 | ||||
| 	@MockBean | ||||
|  | @ -55,17 +50,22 @@ class WebServiceServerTestSampleWsApplicationTests { | |||
| 	private MockWebServiceClient client; | ||||
| 
 | ||||
| 	@Test | ||||
| 	void testSendingHolidayRequest(CapturedOutput output) throws ParseException { | ||||
| 		String request = "<hr:HolidayRequest xmlns:hr=\"https://company.example.com/hr/schemas\">" | ||||
| 				+ "   <hr:Holiday>      <hr:StartDate>2013-10-20</hr:StartDate>" | ||||
| 				+ "      <hr:EndDate>2013-11-22</hr:EndDate>   </hr:Holiday>   <hr:Employee>" | ||||
| 				+ "      <hr:Number>1</hr:Number>      <hr:FirstName>John</hr:FirstName>" | ||||
| 				+ "      <hr:LastName>Doe</hr:LastName>   </hr:Employee></hr:HolidayRequest>"; | ||||
| 	void testSendingHolidayRequest() { | ||||
| 		String request = """ | ||||
| 				<hr:HolidayRequest xmlns:hr="https://company.example.com/hr/schemas"> | ||||
| 					<hr:Holiday> | ||||
| 						<hr:StartDate>2013-10-20</hr:StartDate> | ||||
| 						<hr:EndDate>2013-11-22</hr:EndDate> | ||||
| 					</hr:Holiday> | ||||
| 					<hr:Employee> | ||||
| 						<hr:Number>1</hr:Number> | ||||
| 						<hr:FirstName>John</hr:FirstName> | ||||
| 						<hr:LastName>Doe</hr:LastName> | ||||
| 					</hr:Employee> | ||||
| 				</hr:HolidayRequest>"""; | ||||
| 		StreamSource source = new StreamSource(new StringReader(request)); | ||||
| 		this.client.sendRequest(RequestCreators.withPayload(source)).andExpect(ResponseMatchers.noFault()); | ||||
| 		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); | ||||
| 		then(this.service).should() | ||||
| 			.bookHoliday(dateFormat.parse("2013-10-20"), dateFormat.parse("2013-11-22"), "John Doe"); | ||||
| 		then(this.service).should().bookHoliday(LocalDate.of(2013, 10, 20), LocalDate.of(2013, 11, 22), "John Doe"); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue