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("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")

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");
* 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;
}

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");
* 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);
}

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");
* 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);
}

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");
* 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 + "]");
}
}

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");
* 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);

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");
* you may not use this file except in compliance with the License.
@ -17,20 +17,15 @@
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.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.ws.test.server.MockWebServiceClient;
import org.springframework.ws.test.server.RequestCreators;
@ -43,9 +38,9 @@ import static org.mockito.BDDMockito.then;
* {@link MockWebServiceClient}.
*
* @author Andy Wilkinson
* @author Stephane Nicoll
*/
@WebServiceServerTest
@ExtendWith(OutputCaptureExtension.class)
class WebServiceServerTestSampleWsApplicationTests {
@MockitoBean
@ -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");
}
}