Extract code samples from docs
See gh-6313
This commit is contained in:
@@ -97,6 +97,7 @@ dependencies {
|
||||
implementation("org.springframework:spring-webflux")
|
||||
implementation("org.springframework.amqp:spring-amqp")
|
||||
implementation("org.springframework.amqp:spring-rabbit")
|
||||
implementation("org.springframework.batch:spring-batch-core")
|
||||
implementation("org.springframework.data:spring-data-cassandra")
|
||||
implementation("org.springframework.data:spring-data-couchbase")
|
||||
implementation("org.springframework.data:spring-data-elasticsearch")
|
||||
@@ -107,11 +108,14 @@ dependencies {
|
||||
implementation("org.springframework.data:spring-data-r2dbc")
|
||||
implementation("org.springframework.kafka:spring-kafka")
|
||||
implementation("org.springframework.kafka:spring-kafka-test")
|
||||
implementation("org.springframework.restdocs:spring-restdocs-mockmvc")
|
||||
implementation("org.springframework.restdocs:spring-restdocs-restassured")
|
||||
implementation("org.springframework.restdocs:spring-restdocs-webtestclient")
|
||||
implementation("org.springframework.security:spring-security-config")
|
||||
implementation("org.springframework.security:spring-security-oauth2-client")
|
||||
implementation("org.springframework.security:spring-security-web")
|
||||
implementation("org.springframework.ws:spring-ws-core")
|
||||
implementation("org.springframework.ws:spring-ws-test")
|
||||
implementation("org.junit.jupiter:junit-jupiter")
|
||||
implementation("org.yaml:snakeyaml")
|
||||
|
||||
|
||||
@@ -5649,7 +5649,7 @@ You can inject into your bean without needing to use any `@Qualifier`:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{include-springbootfeatures}/jta/primary/MyBean.java[tags=*]
|
||||
include::{include-springbootfeatures}/jta/primary/MyBean.java[tag=*]
|
||||
----
|
||||
|
||||
In some situations, you might want to process certain JMS messages by using a non-XA `ConnectionFactory`.
|
||||
@@ -5659,14 +5659,14 @@ If you want to use a non-XA `ConnectionFactory`, you can the `nonXaJmsConnection
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{include-springbootfeatures}/jta/nonxa/MyBean.java[tags=*]
|
||||
include::{include-springbootfeatures}/jta/nonxa/MyBean.java[tag=*]
|
||||
----
|
||||
|
||||
For consistency, the `jmsConnectionFactory` bean is also provided by using the bean alias `xaJmsConnectionFactory`:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{include-springbootfeatures}/jta/xa/MyBean.java[tags=*]
|
||||
include::{include-springbootfeatures}/jta/xa/MyBean.java[tag=*]
|
||||
----
|
||||
|
||||
|
||||
@@ -6301,7 +6301,7 @@ For instance, the following example asserts that the actual number is a float va
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{include-springbootfeatures}/testing/applications/json/AssertJ.java[tags=*]
|
||||
include::{include-springbootfeatures}/testing/applications/json/AssertJ.java[tag=*]
|
||||
----
|
||||
|
||||
|
||||
@@ -6652,67 +6652,25 @@ It can also be used to configure the host, scheme, and port that appears in any
|
||||
`@AutoConfigureRestDocs` customizes the `MockMvc` bean to use Spring REST Docs when testing Servlet-based web applications.
|
||||
You can inject it by using `@Autowired` and use it in your tests as you normally would when using Mock MVC and Spring REST Docs, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
|
||||
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
||||
|
||||
@WebMvcTest(UserController.class)
|
||||
@AutoConfigureRestDocs
|
||||
class UserDocumentationTests {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mvc;
|
||||
|
||||
@Test
|
||||
void listUsers() throws Exception {
|
||||
this.mvc.perform(get("/users").accept(MediaType.TEXT_PLAIN))
|
||||
.andExpect(status().isOk())
|
||||
.andDo(document("list-users"));
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/restdocs/mvc/UserDocumentationTests.java[]
|
||||
----
|
||||
|
||||
If you require more control over Spring REST Docs configuration than offered by the attributes of `@AutoConfigureRestDocs`, you can use a `RestDocsMockMvcConfigurationCustomizer` bean, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@TestConfiguration
|
||||
static class CustomizationConfiguration
|
||||
implements RestDocsMockMvcConfigurationCustomizer {
|
||||
|
||||
@Override
|
||||
public void customize(MockMvcRestDocumentationConfigurer configurer) {
|
||||
configurer.snippets().withTemplateFormat(TemplateFormats.markdown());
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/restdocs/mvc/CustomizationConfiguration.java[]
|
||||
----
|
||||
|
||||
If you want to make use of Spring REST Docs support for a parameterized output directory, you can create a `RestDocumentationResultHandler` bean.
|
||||
The auto-configuration calls `alwaysDo` with this result handler, thereby causing each `MockMvc` call to automatically generate the default snippets.
|
||||
The following example shows a `RestDocumentationResultHandler` being defined:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@TestConfiguration(proxyBeanMethods = false)
|
||||
static class ResultHandlerConfiguration {
|
||||
|
||||
@Bean
|
||||
public RestDocumentationResultHandler restDocumentation() {
|
||||
return MockMvcRestDocumentation.document("{method-name}");
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/restdocs/mvc/ResultHandlerConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -6766,25 +6724,9 @@ TIP: A list of the auto-configuration settings that are enabled by `@WebServiceC
|
||||
|
||||
The following example shows the `@WebServiceClientTest` annotation in use:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@WebServiceClientTest(ExampleWebServiceClient.class)
|
||||
class WebServiceClientIntegrationTests {
|
||||
|
||||
@Autowired
|
||||
private MockWebServiceServer server;
|
||||
|
||||
@Autowired
|
||||
private ExampleWebServiceClient client;
|
||||
|
||||
@Test
|
||||
void mockServerCall() {
|
||||
this.server.expect(payload(new StringSource("<request/>"))).andRespond(
|
||||
withPayload(new StringSource("<response><status>200</status></response>")));
|
||||
assertThat(this.client.test()).extracting(Response::getStatus).isEqualTo(200);
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/webservices/MyWebServiceClientTests.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -6794,13 +6736,9 @@ The following example shows the `@WebServiceClientTest` annotation in use:
|
||||
Each slice provides one or more `@AutoConfigure...` annotations that namely defines the auto-configurations that should be included as part of a slice.
|
||||
Additional auto-configurations can be added on a test-by-test basis by creating a custom `@AutoConfigure...` annotation or by adding `@ImportAutoConfiguration` to the test as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@JdbcTest
|
||||
@ImportAutoConfiguration(IntegrationAutoConfiguration.class)
|
||||
class ExampleJdbcTests {
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/slicing/ExampleJdbcTests.java[]
|
||||
----
|
||||
|
||||
NOTE: Make sure to not use the regular `@Import` annotation to import auto-configurations as they are handled in a specific way by Spring Boot.
|
||||
@@ -6825,21 +6763,17 @@ It then becomes important not to litter the application's main class with config
|
||||
Assume that you are using Spring Batch and you rely on the auto-configuration for it.
|
||||
You could define your `@SpringBootApplication` as follows:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@SpringBootApplication
|
||||
@EnableBatchProcessing
|
||||
public class SampleApplication { ... }
|
||||
include::{include-springbootfeatures}/testing/applications/slicing/SampleApplication.java[]
|
||||
----
|
||||
|
||||
Because this class is the source configuration for the test, any slice test actually tries to start Spring Batch, which is definitely not what you want to do.
|
||||
A recommended approach is to move that area-specific configuration to a separate `@Configuration` class at the same level as your application, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableBatchProcessing
|
||||
public class BatchConfiguration { ... }
|
||||
include::{include-springbootfeatures}/testing/applications/slicing/BatchConfiguration.java[]
|
||||
----
|
||||
|
||||
NOTE: Depending on the complexity of your application, you may either have a single `@Configuration` class for your customizations or one class per domain area.
|
||||
@@ -6848,38 +6782,25 @@ The latter approach lets you enable it in one of your tests, if necessary, with
|
||||
Test slices exclude `@Configuration` classes from scanning.
|
||||
For example, for a `@WebMvcTest`, the following configuration will not include the given `WebMvcConfigurer` bean in the application context loaded by the test slice:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Configuration
|
||||
public class WebConfiguration {
|
||||
@Bean
|
||||
public WebMvcConfigurer testConfigurer() {
|
||||
return new WebMvcConfigurer() {
|
||||
...
|
||||
};
|
||||
}
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/slicing/WebConfiguration.java[]
|
||||
----
|
||||
|
||||
The configuration below will, however, cause the custom `WebMvcConfigurer` to be loaded by the test slice.
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Component
|
||||
public class TestWebMvcConfigurer implements WebMvcConfigurer {
|
||||
...
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/applications/slicing/TestWebMvcConfigurer.java[]
|
||||
----
|
||||
|
||||
Another source of confusion is classpath scanning.
|
||||
Assume that, while you structured your code in a sensible way, you need to scan an additional package.
|
||||
Your application may resemble the following code:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@SpringBootApplication
|
||||
@ComponentScan({ "com.example.app", "org.acme.another" })
|
||||
public class SampleApplication { ... }
|
||||
include::{include-springbootfeatures}/testing/applications/slicing/scan/SampleApplication.java[]
|
||||
----
|
||||
|
||||
Doing so effectively overrides the default component scan directive with the side effect of scanning those two packages regardless of the slice that you chose.
|
||||
@@ -6909,17 +6830,16 @@ A few test utility classes that are generally useful when testing your applicati
|
||||
|
||||
|
||||
[[boot-features-configfileapplicationcontextinitializer-test-utility]]
|
||||
==== ConfigFileApplicationContextInitializer
|
||||
`ConfigFileApplicationContextInitializer` is an `ApplicationContextInitializer` that you can apply to your tests to load Spring Boot `application.properties` files.
|
||||
==== ConfigDataApplicationContextInitializer
|
||||
`ConfigDataApplicationContextInitializer` is an `ApplicationContextInitializer` that you can apply to your tests to load Spring Boot `application.properties` files.
|
||||
You can use it when you do not need the full set of features provided by `@SpringBootTest`, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@ContextConfiguration(classes = Config.class,
|
||||
initializers = ConfigFileApplicationContextInitializer.class)
|
||||
include::{include-springbootfeatures}/testing/utils/MyConfigFileTests.java[]
|
||||
----
|
||||
|
||||
NOTE: Using `ConfigFileApplicationContextInitializer` alone does not provide support for `@Value("${...}")` injection.
|
||||
NOTE: Using `ConfigDataApplicationContextInitializer` alone does not provide support for `@Value("${...}")` injection.
|
||||
Its only job is to ensure that `application.properties` files are loaded into Spring's `Environment`.
|
||||
For `@Value` support, you need to either additionally configure a `PropertySourcesPlaceholderConfigurer` or use `@SpringBootTest`, which auto-configures one for you.
|
||||
|
||||
@@ -6930,9 +6850,9 @@ For `@Value` support, you need to either additionally configure a `PropertySourc
|
||||
`TestPropertyValues` lets you quickly add properties to a `ConfigurableEnvironment` or `ConfigurableApplicationContext`.
|
||||
You can call it with `key=value` strings, as follows:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
TestPropertyValues.of("org=Spring", "name=Boot").applyTo(env);
|
||||
include::{include-springbootfeatures}/testing/utils/MyEnvironmentTests.java[tag=*]
|
||||
----
|
||||
|
||||
|
||||
@@ -6967,20 +6887,9 @@ If you do use Apache's HTTP client, some additional test-friendly features are e
|
||||
|
||||
`TestRestTemplate` can be instantiated directly in your integration tests, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
public class MyTest {
|
||||
|
||||
private TestRestTemplate template = new TestRestTemplate();
|
||||
|
||||
@Test
|
||||
public void testRequest() throws Exception {
|
||||
HttpHeaders headers = this.template.getForEntity(
|
||||
"https://myhost.example.com/example", String.class).getHeaders();
|
||||
assertThat(headers.getLocation()).hasHost("other.example.com");
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/utils/testresttemplate/MyTest.java[]
|
||||
----
|
||||
|
||||
Alternatively, if you use the `@SpringBootTest` annotation with `WebEnvironment.RANDOM_PORT` or `WebEnvironment.DEFINED_PORT`, you can inject a fully configured `TestRestTemplate` and start using it.
|
||||
@@ -7040,34 +6949,17 @@ It does, however, auto-configure a `WebServiceTemplateBuilder`, which can be use
|
||||
|
||||
The following code shows a typical example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Service
|
||||
public class MyService {
|
||||
|
||||
private final WebServiceTemplate webServiceTemplate;
|
||||
|
||||
public MyService(WebServiceTemplateBuilder webServiceTemplateBuilder) {
|
||||
this.webServiceTemplate = webServiceTemplateBuilder.build();
|
||||
}
|
||||
|
||||
public DetailsResp someWsCall(DetailsReq detailsReq) {
|
||||
return (DetailsResp) this.webServiceTemplate.marshalSendAndReceive(detailsReq, new SoapActionCallback(ACTION));
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/webservices/MyService.java[]
|
||||
----
|
||||
|
||||
By default, `WebServiceTemplateBuilder` detects a suitable HTTP-based `WebServiceMessageSender` using the available HTTP client libraries on the classpath.
|
||||
You can also customize read and connection timeouts as follows:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Bean
|
||||
public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
|
||||
return builder.messageSenders(new HttpWebServiceMessageSenderBuilder()
|
||||
.setConnectTimeout(5000).setReadTimeout(2000).build()).build();
|
||||
}
|
||||
include::{include-springbootfeatures}/webservices/MyWebServiceTemplateConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -7150,25 +7042,9 @@ This mechanism does not apply the same way to `@Bean` methods where typically th
|
||||
|
||||
To handle this scenario, a separate `@Configuration` class can be used to isolate the condition, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
// Some conditions
|
||||
public class MyAutoConfiguration {
|
||||
|
||||
// Auto-configured beans
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnClass(EmbeddedAcmeService.class)
|
||||
static class EmbeddedConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public EmbeddedAcmeService embeddedAcmeService() { ... }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/creatingautoconfiguration/classconditions/MyAutoConfiguration.java[]
|
||||
----
|
||||
|
||||
TIP: If you use `@ConditionalOnClass` or `@ConditionalOnMissingClass` as a part of a meta-annotation to compose your own composed annotations, you must use `name` as referring to the class in such a case is not handled.
|
||||
@@ -7183,16 +7059,9 @@ The `search` attribute lets you limit the `ApplicationContext` hierarchy that sh
|
||||
|
||||
When placed on a `@Bean` method, the target type defaults to the return type of the method, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class MyAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public MyService myService() { ... }
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/creatingautoconfiguration/beanconditions/MyAutoConfiguration.java[]
|
||||
----
|
||||
|
||||
In the preceding example, the `myService` bean is going to be created if no bean of type `MyService` is already contained in the `ApplicationContext`.
|
||||
@@ -7278,17 +7147,9 @@ The runner can also be used to display the `ConditionEvaluationReport`.
|
||||
The report can be printed at `INFO` or `DEBUG` level.
|
||||
The following example shows how to use the `ConditionEvaluationReportLoggingListener` to print the report in auto-configuration tests.
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@Test
|
||||
void autoConfigTest() {
|
||||
ConditionEvaluationReportLoggingListener initializer = new ConditionEvaluationReportLoggingListener(
|
||||
LogLevel.INFO);
|
||||
ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withInitializer(initializer).run((context) -> {
|
||||
// Do something...
|
||||
});
|
||||
}
|
||||
include::{include-springbootfeatures}/testing/ConditionEvaluationReportTests.java[tag=*]
|
||||
----
|
||||
|
||||
|
||||
@@ -7352,24 +7213,9 @@ As a rule of thumb, prefix all your keys with a namespace that you own (e.g. `ac
|
||||
|
||||
Make sure that configuration keys are documented by adding field javadoc for each property, as shown in the following example:
|
||||
|
||||
[source,java,pending-extract=true,indent=0]
|
||||
[source,java,indent=0]
|
||||
----
|
||||
@ConfigurationProperties("acme")
|
||||
public class AcmeProperties {
|
||||
|
||||
/**
|
||||
* Whether to check the location of acme resources.
|
||||
*/
|
||||
private boolean checkLocation = true;
|
||||
|
||||
/**
|
||||
* Timeout for establishing a connection to the acme server.
|
||||
*/
|
||||
private Duration loginTimeout = Duration.ofSeconds(3);
|
||||
|
||||
// getters & setters
|
||||
|
||||
}
|
||||
include::{include-springbootfeatures}/creatingautoconfiguration/configurationkeys/AcmeProperties.java[]
|
||||
----
|
||||
|
||||
NOTE: You should only use plain text with `@ConfigurationProperties` field Javadoc, since they are not processed before being added to the JSON.
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.creatingautoconfiguration.beanconditions;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class MyAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public SomeService someService() {
|
||||
return new SomeService();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.creatingautoconfiguration.beanconditions;
|
||||
|
||||
public class SomeService {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.creatingautoconfiguration.classconditions;
|
||||
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
// Some conditions ...
|
||||
public class MyAutoConfiguration {
|
||||
|
||||
// Auto-configured beans ...
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnClass(SomeService.class)
|
||||
public static class SomeServiceConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public SomeService someService() {
|
||||
return new SomeService();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.creatingautoconfiguration.classconditions;
|
||||
|
||||
class SomeService {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.creatingautoconfiguration.configurationkeys;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
@ConfigurationProperties("acme")
|
||||
public class AcmeProperties {
|
||||
|
||||
/**
|
||||
* Whether to check the location of acme resources.
|
||||
*/
|
||||
private boolean checkLocation = true;
|
||||
|
||||
/**
|
||||
* Timeout for establishing a connection to the acme server.
|
||||
*/
|
||||
private Duration loginTimeout = Duration.ofSeconds(3);
|
||||
|
||||
// @fold:on // getters/setters ...
|
||||
public boolean isCheckLocation() {
|
||||
return this.checkLocation;
|
||||
}
|
||||
|
||||
public void setCheckLocation(boolean checkLocation) {
|
||||
this.checkLocation = checkLocation;
|
||||
}
|
||||
|
||||
public Duration getLoginTimeout() {
|
||||
return this.loginTimeout;
|
||||
}
|
||||
|
||||
public void setLoginTimeout(Duration loginTimeout) {
|
||||
this.loginTimeout = loginTimeout;
|
||||
}
|
||||
// @fold:off
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener;
|
||||
import org.springframework.boot.logging.LogLevel;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
|
||||
public class ConditionEvaluationReportTests {
|
||||
|
||||
// start::code[]
|
||||
@Test
|
||||
void autoConfigTest() {
|
||||
ConditionEvaluationReportLoggingListener initializer = new ConditionEvaluationReportLoggingListener(
|
||||
LogLevel.INFO);
|
||||
new ApplicationContextRunner().withInitializer(initializer).run((context) -> {
|
||||
// Test something...
|
||||
});
|
||||
}
|
||||
// end::code[]
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.restdocs.mvc;
|
||||
|
||||
import org.springframework.boot.test.autoconfigure.restdocs.RestDocsMockMvcConfigurationCustomizer;
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentationConfigurer;
|
||||
import org.springframework.restdocs.templates.TemplateFormats;
|
||||
|
||||
@TestConfiguration
|
||||
public class CustomizationConfiguration implements RestDocsMockMvcConfigurationCustomizer {
|
||||
|
||||
@Override
|
||||
public void customize(MockMvcRestDocumentationConfigurer configurer) {
|
||||
configurer.snippets().withTemplateFormat(TemplateFormats.markdown());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.restdocs.mvc;
|
||||
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
|
||||
import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler;
|
||||
|
||||
@TestConfiguration(proxyBeanMethods = false)
|
||||
public class ResultHandlerConfiguration {
|
||||
|
||||
@Bean
|
||||
public RestDocumentationResultHandler restDocumentation() {
|
||||
return MockMvcRestDocumentation.document("{method-name}");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.restdocs.mvc;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
|
||||
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest(UserController.class)
|
||||
@AutoConfigureRestDocs
|
||||
class UserDocumentationTests {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mvc;
|
||||
|
||||
@Test
|
||||
void listUsers() throws Exception {
|
||||
// @formatter:off
|
||||
this.mvc.perform(get("/users").accept(MediaType.TEXT_PLAIN))
|
||||
.andExpect(status().isOk())
|
||||
.andDo(document("list-users"));
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
}
|
||||
// @chomp:file
|
||||
|
||||
class UserController {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.slicing;
|
||||
|
||||
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableBatchProcessing
|
||||
public class BatchConfiguration {
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.slicing;
|
||||
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration;
|
||||
import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
|
||||
|
||||
@JdbcTest
|
||||
@ImportAutoConfiguration(IntegrationAutoConfiguration.class)
|
||||
class ExampleJdbcTests {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.slicing;
|
||||
|
||||
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableBatchProcessing
|
||||
public class SampleApplication {
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.slicing;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Component
|
||||
public class TestWebMvcConfigurer implements WebMvcConfigurer {
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.slicing;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Configuration
|
||||
public class WebConfiguration {
|
||||
|
||||
@Bean
|
||||
public WebMvcConfigurer testConfigurer() {
|
||||
return new WebMvcConfigurer() {
|
||||
// ...
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.slicing.scan;
|
||||
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
@SpringBootApplication
|
||||
@ComponentScan({ "com.example.app", "org.acme.another" })
|
||||
public class SampleApplication {
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.webservices;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.webservices.client.WebServiceClientTest;
|
||||
import org.springframework.ws.test.client.MockWebServiceServer;
|
||||
import org.springframework.xml.transform.StringSource;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.ws.test.client.RequestMatchers.payload;
|
||||
import static org.springframework.ws.test.client.ResponseCreators.withPayload;
|
||||
|
||||
@WebServiceClientTest(SomeWebService.class)
|
||||
class MyWebServiceClientTests {
|
||||
|
||||
@Autowired
|
||||
private MockWebServiceServer server;
|
||||
|
||||
@Autowired
|
||||
private SomeWebService someWebService;
|
||||
|
||||
@Test
|
||||
void mockServerCall() {
|
||||
// @formatter:off
|
||||
this.server
|
||||
.expect(payload(new StringSource("<request/>")))
|
||||
.andRespond(withPayload(new StringSource("<response><status>200</status></response>")));
|
||||
assertThat(this.someWebService.test())
|
||||
.extracting(Response::getStatus)
|
||||
.isEqualTo(200);
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.webservices;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "request")
|
||||
class Request {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.webservices;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "response")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
class Response {
|
||||
|
||||
private int status;
|
||||
|
||||
int getStatus() {
|
||||
return this.status;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2012-2020 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.applications.webservices;
|
||||
|
||||
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.ws.client.core.WebServiceTemplate;
|
||||
|
||||
@Service
|
||||
public class SomeWebService {
|
||||
|
||||
private final WebServiceTemplate webServiceTemplate;
|
||||
|
||||
public SomeWebService(WebServiceTemplateBuilder builder) {
|
||||
this.webServiceTemplate = builder.build();
|
||||
}
|
||||
|
||||
public Response test() {
|
||||
return (Response) this.webServiceTemplate.marshalSendAndReceive("https://example.com", new Request());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.utils;
|
||||
|
||||
import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
@ContextConfiguration(classes = Config.class, initializers = ConfigDataApplicationContextInitializer.class)
|
||||
class MyConfigFileTests {
|
||||
|
||||
// ...
|
||||
|
||||
}
|
||||
// @chomp:file
|
||||
|
||||
class Config {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.utils;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.test.util.TestPropertyValues;
|
||||
import org.springframework.mock.env.MockEnvironment;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class MyEnvironmentTests {
|
||||
|
||||
// start::code[]
|
||||
@Test
|
||||
void testPropertySources() {
|
||||
MockEnvironment environment = new MockEnvironment();
|
||||
TestPropertyValues.of("org=Spring", "name=Boot").applyTo(environment);
|
||||
assertThat(environment.getProperty("name")).isEqualTo("Boot");
|
||||
}
|
||||
// end::code[]
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.testing.utils.testresttemplate;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class MyTest {
|
||||
|
||||
private TestRestTemplate template = new TestRestTemplate();
|
||||
|
||||
@Test
|
||||
void testRequest() throws Exception {
|
||||
ResponseEntity<String> headers = this.template.getForEntity("https://myhost.example.com/example", String.class);
|
||||
assertThat(headers.getHeaders().getLocation()).hasHost("other.example.com");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.webservices;
|
||||
|
||||
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.ws.client.core.WebServiceTemplate;
|
||||
import org.springframework.ws.soap.client.core.SoapActionCallback;
|
||||
|
||||
@Service
|
||||
public class MyService {
|
||||
|
||||
private final WebServiceTemplate webServiceTemplate;
|
||||
|
||||
public MyService(WebServiceTemplateBuilder webServiceTemplateBuilder) {
|
||||
this.webServiceTemplate = webServiceTemplateBuilder.build();
|
||||
}
|
||||
|
||||
public SomeResponse someWsCall(SomeRequest detailsReq) {
|
||||
return (SomeResponse) this.webServiceTemplate.marshalSendAndReceive(detailsReq,
|
||||
new SoapActionCallback("https://ws.example.com/action"));
|
||||
}
|
||||
|
||||
}
|
||||
// @chomp:file
|
||||
|
||||
class SomeRequest {
|
||||
|
||||
}
|
||||
|
||||
class SomeResponse {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.boot.docs.springbootfeatures.webservices;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.springframework.boot.webservices.client.HttpWebServiceMessageSenderBuilder;
|
||||
import org.springframework.boot.webservices.client.WebServiceTemplateBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.ws.client.core.WebServiceTemplate;
|
||||
import org.springframework.ws.transport.WebServiceMessageSender;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class MyWebServiceTemplateConfiguration {
|
||||
|
||||
@Bean
|
||||
public WebServiceTemplate webServiceTemplate(WebServiceTemplateBuilder builder) {
|
||||
// @formatter:off
|
||||
WebServiceMessageSender sender = new HttpWebServiceMessageSenderBuilder()
|
||||
.setConnectTimeout(Duration.ofSeconds(5))
|
||||
.setReadTimeout(Duration.ofSeconds(2))
|
||||
.build();
|
||||
return builder.messageSenders(sender).build();
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Examples for the "Spring Boot Features - Web Services" section.
|
||||
*/
|
||||
package org.springframework.boot.docs.springbootfeatures.webservices;
|
||||
Reference in New Issue
Block a user