Skip to content

Commit ec7a60f

Browse files
author
springdoc
committed
Added support for spring-context-indexer. fixes #262
1 parent 8ad7477 commit ec7a60f

File tree

69 files changed

+392
-162
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+392
-162
lines changed

pom.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<!--suppress ALL -->
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
34
<modelVersion>4.0.0</modelVersion>
45
<groupId>org.springdoc</groupId>
56
<artifactId>springdoc-openapi</artifactId>

springdoc-openapi-common/pom.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
1+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
23
<modelVersion>4.0.0</modelVersion>
34
<artifactId>springdoc-openapi-common</artifactId>
45
<name>${project.artifactId}</name>

springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ protected AbstractOpenApiResource(OpenAPIBuilder openAPIBuilder, AbstractRequest
6262
this.responseBuilder = responseBuilder;
6363
this.operationParser = operationParser;
6464
this.openApiCustomisers = openApiCustomisers;
65-
this.pathsToMatch=pathsToMatch;
65+
this.pathsToMatch = pathsToMatch;
6666
}
6767

6868
protected synchronized OpenAPI getOpenApi() {

springdoc-openapi-common/src/main/java/org/springdoc/config/SpringDocConfiguration.java

-18
This file was deleted.

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestBuilder.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,11 @@
3434

3535
public abstract class AbstractRequestBuilder {
3636

37+
protected static final List<Class> PARAM_TYPES_TO_IGNORE = new ArrayList<>();
3738
// using string litterals to support both validation-api v1 and v2
3839
private static final String[] ANNOTATIONS_FOR_REQUIRED = {NotNull.class.getName(), "javax.validation.constraints.NotBlank", "javax.validation.constraints.NotEmpty"};
3940
private static final String POSITIVE_OR_ZERO = "javax.validation.constraints.PositiveOrZero";
4041
private static final String NEGATIVE_OR_ZERO = "javax.validation.constraints.NegativeOrZero";
41-
private final AbstractParameterBuilder parameterBuilder;
42-
private final RequestBodyBuilder requestBodyBuilder;
43-
private final OperationBuilder operationBuilder;
44-
protected static final List<Class> PARAM_TYPES_TO_IGNORE = new ArrayList<>();
4542

4643
static {
4744
PARAM_TYPES_TO_IGNORE.add(WebRequest.class);
@@ -65,6 +62,10 @@ public abstract class AbstractRequestBuilder {
6562
PARAM_TYPES_TO_IGNORE.add(RequestAttribute.class);
6663
}
6764

65+
private final AbstractParameterBuilder parameterBuilder;
66+
private final RequestBodyBuilder requestBodyBuilder;
67+
private final OperationBuilder operationBuilder;
68+
6869
protected AbstractRequestBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
6970
OperationBuilder operationBuilder) {
7071
super();
@@ -151,7 +152,7 @@ public Operation build(Components components, HandlerMethod handlerMethod, Reque
151152
}
152153
}
153154

154-
setParams(operation, new ArrayList(map.values()) , requestBodyInfo);
155+
setParams(operation, new ArrayList(map.values()), requestBodyInfo);
155156
// allow for customisation
156157
operation = customiseOperation(operation, handlerMethod);
157158

springdoc-openapi-common/src/main/java/org/springdoc/core/Constants.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public final class Constants {
2323
public static final String APPLICATION_OPENAPI_YAML = "application/vnd.oai.openapi";
2424
public static final String DEFAULT_SWAGGER_UI_PATH = DEFAULT_PATH_SEPARATOR + "swagger-ui.html";
2525
public static final String SWAGGER_UI_PATH = "${springdoc.swagger-ui.path:#{T(org.springdoc.core.Constants).DEFAULT_SWAGGER_UI_PATH}}";
26-
public static final String MVC_SERVLET_PATH ="${spring.mvc.servlet.path:#{null}}";
26+
public static final String MVC_SERVLET_PATH = "${spring.mvc.servlet.path:#{null}}";
2727
public static final String GET_METHOD = "get";
2828
public static final String POST_METHOD = "post";
2929
public static final String PUT_METHOD = "put";
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package org.springdoc.core;
22

3-
import org.springframework.stereotype.Component;
4-
5-
@Component
63
public class IgnoredParameterAnnotationsDefault implements IgnoredParameterAnnotations {
74

85
}

springdoc-openapi-common/src/main/java/org/springdoc/core/MultipleOpenApiSupportConfiguration.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ public BeanFactoryPostProcessor beanFactoryPostProcessor() {
2222
}
2323
};
2424
}
25-
}
25+
}

springdoc-openapi-common/src/main/java/org/springdoc/core/OpenAPIBuilder.java

-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
2222
import org.springframework.core.annotation.AnnotationUtils;
2323
import org.springframework.core.type.filter.AnnotationTypeFilter;
24-
import org.springframework.stereotype.Component;
2524
import org.springframework.util.CollectionUtils;
2625
import org.springframework.web.bind.annotation.ControllerAdvice;
2726
import org.springframework.web.bind.annotation.RequestMapping;
@@ -34,7 +33,6 @@
3433

3534
import static org.springdoc.core.Constants.*;
3635

37-
@Component
3836
public class OpenAPIBuilder {
3937

4038
private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIBuilder.class);

springdoc-openapi-common/src/main/java/org/springdoc/core/OperationBuilder.java

-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import io.swagger.v3.oas.models.responses.ApiResponse;
1616
import io.swagger.v3.oas.models.responses.ApiResponses;
1717
import org.apache.commons.lang3.StringUtils;
18-
import org.springframework.stereotype.Component;
1918
import org.springframework.util.CollectionUtils;
2019

2120
import java.lang.reflect.Method;
@@ -24,7 +23,6 @@
2423

2524
import static org.springdoc.core.Constants.*;
2625

27-
@Component
2826
public class OperationBuilder {
2927

3028
private final AbstractParameterBuilder parameterBuilder;

springdoc-openapi-common/src/main/java/org/springdoc/core/PropertyResolverUtils.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package org.springdoc.core;
22

3-
import org.springframework.beans.factory.annotation.Autowired;
43
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
5-
import org.springframework.stereotype.Component;
64

7-
@Component
85
public class PropertyResolverUtils {
96

10-
@Autowired
117
ConfigurableBeanFactory factory;
128

9+
public PropertyResolverUtils(ConfigurableBeanFactory factory) {
10+
this.factory = factory;
11+
}
12+
1313
String resolve(String parameterProperty) {
1414
return factory.resolveEmbeddedValue(parameterProperty);
1515
}

springdoc-openapi-common/src/main/java/org/springdoc/core/RequestBodyBuilder.java

-2
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@
77
import io.swagger.v3.oas.models.media.Schema;
88
import io.swagger.v3.oas.models.parameters.RequestBody;
99
import org.apache.commons.lang3.StringUtils;
10-
import org.springframework.stereotype.Component;
1110
import org.springframework.web.bind.annotation.RequestPart;
1211
import org.springframework.web.method.HandlerMethod;
1312

1413
import java.util.Map;
1514
import java.util.Optional;
1615

1716
@SuppressWarnings("rawtypes")
18-
@Component
1917
public class RequestBodyBuilder {
2018

2119
private final AbstractParameterBuilder parameterBuilder;

springdoc-openapi-common/src/main/java/org/springdoc/core/SecurityParser.java

-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@
77
import io.swagger.v3.oas.models.Operation;
88
import io.swagger.v3.oas.models.security.*;
99
import org.apache.commons.lang3.StringUtils;
10-
import org.springframework.stereotype.Component;
1110
import org.springframework.util.CollectionUtils;
1211
import org.springframework.web.method.HandlerMethod;
1312

1413
import java.util.*;
1514

16-
@Component
1715
class SecurityParser {
1816

1917
private final PropertyResolverUtils propertyResolverUtils;

springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocAnnotationsUtils.java

-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import io.swagger.v3.oas.models.media.Schema;
1515
import org.apache.commons.lang3.ArrayUtils;
1616
import org.apache.commons.lang3.StringUtils;
17-
import org.springframework.stereotype.Component;
1817

1918
import java.lang.reflect.Type;
2019
import java.util.LinkedHashMap;
@@ -23,7 +22,6 @@
2322
import java.util.Optional;
2423

2524
@SuppressWarnings({"rawtypes"})
26-
@Component
2725
class SpringDocAnnotationsUtils extends AnnotationsUtils {
2826

2927
private final List<ModelConverter> modelConverters;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.springdoc.core;
2+
3+
import io.swagger.v3.core.converter.ModelConverter;
4+
import io.swagger.v3.oas.models.OpenAPI;
5+
import org.springdoc.core.converters.ObjectNodeConverter;
6+
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
7+
import org.springframework.context.ApplicationContext;
8+
import org.springframework.context.annotation.Bean;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
11+
12+
import java.util.List;
13+
import java.util.Optional;
14+
15+
@Configuration
16+
public class SpringDocConfiguration {
17+
18+
@Bean
19+
LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer() {
20+
return new LocalVariableTableParameterNameDiscoverer();
21+
}
22+
23+
@Bean
24+
ObjectNodeConverter objectNodeConverter() {
25+
return new ObjectNodeConverter();
26+
}
27+
28+
@Bean
29+
IgnoredParameterAnnotationsDefault ignoredParameterAnnotationsDefault() {
30+
return new IgnoredParameterAnnotationsDefault();
31+
}
32+
33+
@Bean
34+
public OpenAPIBuilder openAPIBuilder(Optional<OpenAPI> openAPI, ApplicationContext context, SecurityParser securityParser) {
35+
return new OpenAPIBuilder(openAPI, context, securityParser);
36+
}
37+
38+
@Bean
39+
public OperationBuilder operationBuilder(AbstractParameterBuilder parameterBuilder, RequestBodyBuilder requestBodyBuilder,
40+
SecurityParser securityParser, OpenAPIBuilder openAPIBuilder) {
41+
return new OperationBuilder(parameterBuilder, requestBodyBuilder,
42+
securityParser, openAPIBuilder);
43+
}
44+
45+
@Bean
46+
public PropertyResolverUtils propertyResolverUtils(ConfigurableBeanFactory factory) {
47+
return new PropertyResolverUtils(factory);
48+
}
49+
50+
@Bean
51+
public RequestBodyBuilder requestBodyBuilder(AbstractParameterBuilder parameterBuilder) {
52+
return new RequestBodyBuilder(parameterBuilder);
53+
}
54+
55+
@Bean
56+
public SecurityParser securityParser(PropertyResolverUtils propertyResolverUtils) {
57+
return new SecurityParser(propertyResolverUtils);
58+
}
59+
60+
@Bean
61+
public SpringDocAnnotationsUtils springDocAnnotationsUtils(List<ModelConverter> modelConverters) {
62+
return new SpringDocAnnotationsUtils(modelConverters);
63+
}
64+
65+
}

springdoc-openapi-common/src/main/java/org/springdoc/core/converters/ObjectNodeConverter.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@
88
import io.swagger.v3.core.util.Json;
99
import io.swagger.v3.oas.models.media.ObjectSchema;
1010
import io.swagger.v3.oas.models.media.Schema;
11-
import org.springframework.stereotype.Component;
1211

1312
import java.util.Iterator;
1413

1514
@SuppressWarnings("rawtypes")
16-
@Component
17-
class ObjectNodeConverter implements ModelConverter {
15+
public class ObjectNodeConverter implements ModelConverter {
1816

1917
@Override
2018
public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterator<ModelConverter> chain) {
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springdoc.config.SpringDocConfiguration
1+
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2+
org.springdoc.core.SpringDocConfiguration

springdoc-openapi-data-rest/pom.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
34
<parent>
45
<artifactId>springdoc-openapi</artifactId>
56
<groupId>org.springdoc</groupId>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.springdoc.core;
2+
3+
import org.springdoc.core.converters.PageableSupportConverter;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
7+
@Configuration
8+
public class SpringDocDataRestConfiguration {
9+
10+
@Bean
11+
PageableSupportConverter pageableSupportConverter() {
12+
return new PageableSupportConverter();
13+
}
14+
15+
}

springdoc-openapi-data-rest/src/main/java/org/springdoc/core/converters/PageableSupportConverter.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@
55
import io.swagger.v3.core.converter.ModelConverter;
66
import io.swagger.v3.core.converter.ModelConverterContext;
77
import io.swagger.v3.oas.models.media.Schema;
8-
import org.springframework.stereotype.Component;
98

109
import java.util.Iterator;
1110

12-
@Component
13-
class PageableSupportConverter implements ModelConverter {
11+
public class PageableSupportConverter implements ModelConverter {
1412

1513
private static final String PAGEABLE_TO_REPLACE = "org.springframework.data.domain.Pageable";
1614
private static final String PAGE_REQUEST_TO_REPLACE = "org.springframework.data.domain.PageRequest";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2+
org.springdoc.core.SpringDocDataRestConfiguration

springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app2/DatabaseLoader.java

+13-13
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,19 @@
2727
@Component
2828
class DatabaseLoader {
2929

30-
/**
31-
* Use Spring to inject a {@link EmployeeRepository} that can then load data. Since this will run only after the app
32-
* is operational, the database will be up.
33-
*
34-
* @param repository
35-
*/
36-
@Bean
37-
CommandLineRunner init(EmployeeRepository repository) {
30+
/**
31+
* Use Spring to inject a {@link EmployeeRepository} that can then load data. Since this will run only after the app
32+
* is operational, the database will be up.
33+
*
34+
* @param repository
35+
*/
36+
@Bean
37+
CommandLineRunner init(EmployeeRepository repository) {
3838

39-
return args -> {
40-
repository.save(new Employee("Frodo", "Baggins", "ring bearer"));
41-
repository.save(new Employee("Bilbo", "Baggins", "burglar"));
42-
};
43-
}
39+
return args -> {
40+
repository.save(new Employee("Frodo", "Baggins", "ring bearer"));
41+
repository.save(new Employee("Bilbo", "Baggins", "burglar"));
42+
};
43+
}
4444

4545
}

0 commit comments

Comments
 (0)