Merge branch '3.4.x'

Closes gh-44522
This commit is contained in:
Stéphane Nicoll 2025-03-04 15:24:23 +01:00
commit 013f3b8741
7 changed files with 50 additions and 47 deletions

View File

@ -10,8 +10,6 @@ dependencies {
runtimeOnly("jaxen:jaxen") runtimeOnly("jaxen:jaxen")
runtimeOnly("wsdl4j:wsdl4j") 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(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
testImplementation("org.springframework.ws:spring-ws-test") testImplementation("org.springframework.ws:spring-ws-test")

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,22 +16,22 @@
package smoketest.webservices; package smoketest.webservices;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition; import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.XsdSchema; import org.springframework.xml.xsd.XsdSchema;
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
public class WebServiceConfig extends WsConfigurerAdapter { class WebServiceConfig {
@Bean(name = "holiday") @Bean(name = "holiday")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema countriesSchema) { DefaultWsdl11Definition defaultWsdl11Definition(@Qualifier("hr") XsdSchema hrSchema) {
DefaultWsdl11Definition wsdl = new DefaultWsdl11Definition(); DefaultWsdl11Definition wsdl = new DefaultWsdl11Definition();
wsdl.setPortTypeName("HumanResource"); wsdl.setPortTypeName("HumanResource");
wsdl.setLocationUri("/holidayService/"); wsdl.setLocationUri("/holidayService/");
wsdl.setTargetNamespace("https://company.example.com/hr/definitions"); wsdl.setTargetNamespace("https://company.example.com/hr/definitions");
wsdl.setSchema(countriesSchema); wsdl.setSchema(hrSchema);
return wsdl; return wsdl;
} }

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,8 +16,7 @@
package smoketest.webservices.endpoint; package smoketest.webservices.endpoint;
import java.text.SimpleDateFormat; import java.time.LocalDate;
import java.util.Date;
import org.jdom2.Element; import org.jdom2.Element;
import org.jdom2.Namespace; import org.jdom2.Namespace;
@ -54,10 +53,9 @@ public class HolidayEndpoint {
} }
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest") @PayloadRoot(namespace = NAMESPACE_URI, localPart = "HolidayRequest")
public void handleHolidayRequest(@RequestPayload Element holidayRequest) throws Exception { public void handleHolidayRequest(@RequestPayload Element holidayRequest) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); LocalDate startDate = LocalDate.parse(this.startDateExpression.evaluateFirst(holidayRequest).getText());
Date startDate = dateFormat.parse(this.startDateExpression.evaluateFirst(holidayRequest).getText()); LocalDate endDate = LocalDate.parse(this.endDateExpression.evaluateFirst(holidayRequest).getText());
Date endDate = dateFormat.parse(this.endDateExpression.evaluateFirst(holidayRequest).getText());
String name = this.nameExpression.evaluateFirst(holidayRequest); String name = this.nameExpression.evaluateFirst(holidayRequest);
this.humanResourceService.bookHoliday(startDate, endDate, name); this.humanResourceService.bookHoliday(startDate, endDate, name);
} }

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,10 +16,10 @@
package smoketest.webservices.service; package smoketest.webservices.service;
import java.util.Date; import java.time.LocalDate;
public interface HumanResourceService { public interface HumanResourceService {
void bookHoliday(Date startDate, Date endDate, String name); void bookHoliday(LocalDate startDate, LocalDate endDate, String name);
} }

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,7 +16,7 @@
package smoketest.webservices.service; package smoketest.webservices.service;
import java.util.Date; import java.time.LocalDate;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -24,13 +24,13 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@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 @Override
public void bookHoliday(Date startDate, Date endDate, String name) { public void bookHoliday(LocalDate startDate, LocalDate endDate, String name) {
this.logger.info("Booking holiday for [" + startDate + " - " + endDate + "] for [" + name + "]"); logger.info("Booking holiday for [" + startDate + " - " + endDate + "] for [" + name + "]");
} }
} }

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -50,11 +50,18 @@ class SampleWsApplicationTests {
@Test @Test
void testSendingHolidayRequest(CapturedOutput output) { void testSendingHolidayRequest(CapturedOutput output) {
final String request = "<hr:HolidayRequest xmlns:hr=\"https://company.example.com/hr/schemas\">" String request = """
+ " <hr:Holiday> <hr:StartDate>2013-10-20</hr:StartDate>" <hr:HolidayRequest xmlns:hr="https://company.example.com/hr/schemas">
+ " <hr:EndDate>2013-11-22</hr:EndDate> </hr:Holiday> <hr:Employee>" <hr:Holiday>
+ " <hr:Number>1</hr:Number> <hr:FirstName>John</hr:FirstName>" <hr:StartDate>2013-10-20</hr:StartDate>
+ " <hr:LastName>Doe</hr:LastName> </hr:Employee></hr:HolidayRequest>"; <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)); StreamSource source = new StreamSource(new StringReader(request));
StreamResult result = new StreamResult(System.out); StreamResult result = new StreamResult(System.out);
this.webServiceTemplate.sendSourceAndReceiveToResult(source, result); this.webServiceTemplate.sendSourceAndReceiveToResult(source, result);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2024 the original author or authors. * Copyright 2012-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -17,20 +17,15 @@
package smoketest.webservices; package smoketest.webservices;
import java.io.StringReader; import java.io.StringReader;
import java.text.DateFormat; import java.time.LocalDate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamSource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import smoketest.webservices.service.HumanResourceService; import smoketest.webservices.service.HumanResourceService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.webservices.server.WebServiceServerTest; import org.springframework.boot.test.autoconfigure.webservices.server.WebServiceServerTest;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.ws.test.server.MockWebServiceClient; import org.springframework.ws.test.server.MockWebServiceClient;
import org.springframework.ws.test.server.RequestCreators; import org.springframework.ws.test.server.RequestCreators;
@ -43,9 +38,9 @@ import static org.mockito.BDDMockito.then;
* {@link MockWebServiceClient}. * {@link MockWebServiceClient}.
* *
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Stephane Nicoll
*/ */
@WebServiceServerTest @WebServiceServerTest
@ExtendWith(OutputCaptureExtension.class)
class WebServiceServerTestSampleWsApplicationTests { class WebServiceServerTestSampleWsApplicationTests {
@MockitoBean @MockitoBean
@ -55,17 +50,22 @@ class WebServiceServerTestSampleWsApplicationTests {
private MockWebServiceClient client; private MockWebServiceClient client;
@Test @Test
void testSendingHolidayRequest(CapturedOutput output) throws ParseException { void testSendingHolidayRequest() {
String request = "<hr:HolidayRequest xmlns:hr=\"https://company.example.com/hr/schemas\">" String request = """
+ " <hr:Holiday> <hr:StartDate>2013-10-20</hr:StartDate>" <hr:HolidayRequest xmlns:hr="https://company.example.com/hr/schemas">
+ " <hr:EndDate>2013-11-22</hr:EndDate> </hr:Holiday> <hr:Employee>" <hr:Holiday>
+ " <hr:Number>1</hr:Number> <hr:FirstName>John</hr:FirstName>" <hr:StartDate>2013-10-20</hr:StartDate>
+ " <hr:LastName>Doe</hr:LastName> </hr:Employee></hr:HolidayRequest>"; <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)); StreamSource source = new StreamSource(new StringReader(request));
this.client.sendRequest(RequestCreators.withPayload(source)).andExpect(ResponseMatchers.noFault()); this.client.sendRequest(RequestCreators.withPayload(source)).andExpect(ResponseMatchers.noFault());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); then(this.service).should().bookHoliday(LocalDate.of(2013, 10, 20), LocalDate.of(2013, 11, 22), "John Doe");
then(this.service).should()
.bookHoliday(dateFormat.parse("2013-10-20"), dateFormat.parse("2013-11-22"), "John Doe");
} }
} }