Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix #2932 - Spring Boot 2.2.2 #3159

Merged
16 changes: 8 additions & 8 deletions gradle/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ ext {
classGraph = "4.1.7"
equalsverifierVersion = '3.1.5'
groovy = "2.5.4"
jacocoVersion = '0.8.1'
jackson = '2.9.8'
jacocoVersion = '0.8.5'
jackson = '2.10.0'
joda = "2.10.1"
jsonPath = "2.4.0"
jsonAssert = "1.5.0"
Expand All @@ -18,13 +18,13 @@ ext {
slf4j = "1.7.25"
snakeyaml = '1.23'
spock = "1.3-RC1-groovy-2.5"
spring = "5.1.5.RELEASE"
springIntegration = "5.1.3.RELEASE"
springHateoas = "0.25.1.RELEASE"
springDataRest = "3.1.5.RELEASE"
springPluginVersion = "1.2.0.RELEASE"
spring = "5.2.2.RELEASE"
springIntegration = "5.2.2.RELEASE"
springHateoas = "1.0.2.RELEASE"
springDataRest = "3.2.3.RELEASE"
springPluginVersion = "2.0.0.RELEASE"
swagger2Core = "1.5.20"
springBoot = "2.1.3.RELEASE"
springBoot = "2.2.2.RELEASE"
springfoxRfc6570Version = "1.0.0"
undercouch = "3.4.3"
validationApiVersion = '2.0.1.Final'
Expand Down
1 change: 1 addition & 0 deletions springfox-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ dependencies {

testCompile libs.test
testCompile libs.clientProvidedServlet
testCompile libs.springProvidedWithMvc
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.Resources;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.CollectionModel;
import org.springframework.web.method.HandlerMethod;

import java.lang.annotation.Annotation;
Expand Down Expand Up @@ -95,26 +95,26 @@ static String propertyIdentifierName(PersistentProperty<?> property) {

static ResolvedType propertyResponse(PersistentProperty<?> property, TypeResolver resolver) {
if (property.isCollectionLike()) {
return resolver.resolve(Resources.class, property.getComponentType());
return resolver.resolve(CollectionModel.class, property.getComponentType());
} else if (property.isMap()) {
return resolver.resolve(
Resource.class,
EntityModel.class,
resolver.resolve(
Map.class,
String.class,
property.getMapValueType()));
}
return resolver.resolve(Resource.class, property.getType());
return resolver.resolve(EntityModel.class, property.getType());
}

static ResolvedType propertyItemResponse(PersistentProperty<?> property, TypeResolver resolver) {
if (property.isCollectionLike()) {
return resolver.resolve(Resource.class, property.getComponentType());
return resolver.resolve(EntityModel.class, property.getComponentType());
} else if (property.isMap()) {
return resolver.resolve(
Resource.class,
EntityModel.class,
property.getMapValueType());
}
return resolver.resolve(Resource.class, property.getType());
return resolver.resolve(EntityModel.class, property.getType());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.Resources;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.CollectionModel;
import org.springframework.http.MediaType;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMethod;
Expand Down Expand Up @@ -324,17 +324,17 @@ private ResolvedType inferReturnType(
methodResolver.methodReturnType(handler);

if (isContainerType(methodReturnType)) {
return resolver.resolve(Resources.class,
return resolver.resolve(CollectionModel.class,
collectionElementType(methodReturnType));
} else if (Iterable.class.isAssignableFrom(methodReturnType.getErasedType())) {
return resolver.resolve(Resources.class, domainReturnType);
return resolver.resolve(CollectionModel.class, domainReturnType);
} else if (Types.isBaseType(domainReturnType)) {
return domainReturnType;
} else if (Types.isVoid(domainReturnType)) {
return resolver.resolve(Void.TYPE);
}

return resolver.resolve(Resource.class, domainReturnType);
return resolver.resolve(EntityModel.class, domainReturnType);
}

private List<ResolvedMethodParameter> transferResolvedMethodParameterList(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.TypeResolver;
import org.springframework.hateoas.RelProvider;
import org.springframework.hateoas.Resources;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.server.LinkRelationProvider;
import springfox.documentation.builders.ModelPropertyBuilder;
import springfox.documentation.schema.Model;
import springfox.documentation.schema.ModelProperty;
Expand All @@ -43,13 +43,13 @@
class EmbeddedCollectionModelProvider implements SyntheticModelProviderPlugin {

private final TypeResolver resolver;
private final RelProvider relProvider;
private final LinkRelationProvider relProvider;
private final TypeNameExtractor typeNameExtractor;
private final EnumTypeDeterminer enumTypeDeterminer;

EmbeddedCollectionModelProvider(
TypeResolver resolver,
RelProvider relProvider,
LinkRelationProvider relProvider,
TypeNameExtractor typeNameExtractor,
EnumTypeDeterminer enumTypeDeterminer) {
this.resolver = resolver;
Expand Down Expand Up @@ -86,9 +86,9 @@ public List<ModelProperty> properties(ModelContext context) {
Class<?> type = typeParameters.get(0).getErasedType();
return singletonList(
new ModelPropertyBuilder()
.name(relProvider.getCollectionResourceRelFor(type))
.name(relProvider.getCollectionResourceRelFor(type).value())
.type(resolver.resolve(List.class, type))
.qualifiedType(Resources.class.getName())
.qualifiedType(CollectionModel.class.getName())
.position(0)
.required(true)
.isHidden(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.TypeResolver;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.Resources;
import springfox.documentation.builders.ModelPropertyBuilder;
import springfox.documentation.schema.Model;
import springfox.documentation.schema.ModelProperty;
Expand Down Expand Up @@ -139,7 +139,7 @@ public Set<ResolvedType> dependencies(ModelContext context) {

@Override
public boolean supports(ModelContext delimiter) {
return Resources.class.equals(resourceType(delimiter.getType()).getErasedType())
return CollectionModel.class.equals(resourceType(delimiter.getType()).getErasedType())
&& delimiter.getDocumentationType() == DocumentationType.SWAGGER_2;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.hateoas.RelProvider;
import org.springframework.hateoas.server.LinkRelationProvider;
import springfox.documentation.schema.TypeNameExtractor;
import springfox.documentation.spi.schema.EnumTypeDeterminer;

Expand All @@ -41,7 +41,7 @@ public ResourcesModelProvider resourcesModelProvider(
public EmbeddedCollectionModelProvider embeddedCollectionProvider(
TypeResolver resolver,
@Qualifier("_relProvider")
RelProvider relProvider,
LinkRelationProvider relProvider,
TypeNameExtractor typeNameExtractor,
EnumTypeDeterminer enumTypeDeterminer) {
return new EmbeddedCollectionModelProvider(resolver, relProvider, typeNameExtractor, enumTypeDeterminer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ private String modelName(
if (!isMapType(asResolved(context.getType())) && knownNames.containsKey(context.getTypeId())) {
return knownNames.get(context.getTypeId());
}
TypeNameProviderPlugin selected = typeNameProviders.getPluginFor(
TypeNameProviderPlugin selected = typeNameProviders.getPluginOrDefaultFor(
context.getDocumentationType(),
new DefaultTypeNameProvider());
String modelName = selected.nameFor(((ResolvedType) context.getType()).getErasedType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,12 @@
import java.util.Optional;
import java.util.Set;

import static java.util.Optional.*;

@Component
public class SchemaPluginsManager {
private final PluginRegistry<ModelPropertyBuilderPlugin, DocumentationType> propertyEnrichers;
private final PluginRegistry<ModelBuilderPlugin, DocumentationType> modelEnrichers;
private final PluginRegistry<ViewProviderPlugin, DocumentationType> viewProviders;
private final PluginRegistry<SyntheticModelProviderPlugin, ModelContext> syntheticModelProviders;
private final PluginRegistry<SyntheticModelProviderPlugin, ModelContext> syntheticModelProviders;

@Autowired
public SchemaPluginsManager(
Expand Down Expand Up @@ -80,27 +78,21 @@ public Model model(ModelContext context) {
}

public ViewProviderPlugin viewProvider(DocumentationType documentationType) {
return viewProviders.getPluginFor(documentationType);
return viewProviders.getPluginFor(documentationType)
.orElseThrow(() -> new IllegalStateException("No ViewProviderPlugin for " + documentationType.getName()));
}

public Optional<Model> syntheticModel(ModelContext context) {
if (syntheticModelProviders.hasPluginFor(context)) {
return of(syntheticModelProviders.getPluginFor(context).create(context));
}
return empty();
return syntheticModelProviders.getPluginFor(context).map(plugin -> plugin.create(context));
}

public List<ModelProperty> syntheticProperties(ModelContext context) {
if (syntheticModelProviders.hasPluginFor(context)) {
return syntheticModelProviders.getPluginFor(context).properties(context);
}
return new ArrayList<ModelProperty>();
return syntheticModelProviders.getPluginFor(context).map(plugin -> plugin.properties(context))
.orElseGet(ArrayList::new);
}

public Set<ResolvedType> dependencies(ModelContext context) {
if (syntheticModelProviders.hasPluginFor(context)) {
return syntheticModelProviders.getPluginFor(context).dependencies(context);
}
return new HashSet<ResolvedType>();
return syntheticModelProviders.getPluginFor(context).map(plugin -> plugin.dependencies(context))
.orElseGet(HashSet::new);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

package springfox.documentation.schema
import com.fasterxml.classmate.TypeResolver
import org.springframework.hateoas.Resources
import org.springframework.hateoas.CollectionModel
import org.springframework.http.ResponseEntity
import spock.lang.Specification
import spock.lang.Unroll
Expand Down Expand Up @@ -57,20 +57,20 @@ class AlternateTypeProviderSpec extends Specification {
sut.alternateFor(resolvedSource) == resolver.resolve(expectedAlternate)

where:
rule | source | expectedAlternate
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(ComplexType) | genericClassOfType(ComplexType)
newRule(genericClassOfType(WildcardType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), ComplexType) | genericClassOfType(SimpleType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(ComplexType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | ComplexType | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | Void | Void
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(String) | String
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | SimpleType
mismatchedNestedGenericRule() | nestedGenericType(SimpleType) | nestedGenericType(nestedGenericType(SimpleType))
newRule(genericClassOfType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | resolver.resolve(ResponseEntity, SimpleType)
hateoasResourcesRule() | resources(SimpleTypeResource) | resolver.resolve(List, SimpleType)
rule | source | expectedAlternate
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(ComplexType) | genericClassOfType(ComplexType)
newRule(genericClassOfType(WildcardType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), ComplexType) | genericClassOfType(SimpleType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(ComplexType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | ComplexType | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | Void | Void
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(String) | String
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | SimpleType
mismatchedNestedGenericRule() | nestedGenericType(SimpleType) | nestedGenericType(nestedGenericType(SimpleType))
newRule(genericClassOfType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | resolver.resolve(ResponseEntity, SimpleType)
hateoasCollectionModelRule() | resources(SimpleTypeEntityModel) | resolver.resolve(List, SimpleType)
}

@Unroll
Expand All @@ -84,27 +84,26 @@ class AlternateTypeProviderSpec extends Specification {
sut.alternateFor(resolvedSource) == resolver.resolve(expectedAlternate)

where:
rule | source | expectedAlternate

newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(ComplexType) | genericClassOfType(ComplexType)
newRule(genericClassOfType(WildcardType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), ComplexType) | genericClassOfType(SimpleType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(ComplexType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | ComplexType | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | Void | Void
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(String) | String
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | SimpleType
mismatchedNestedGenericRule() | nestedGenericType(SimpleType) | nestedGenericType(nestedGenericType(SimpleType))
newRule(genericClassOfType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | resolver.resolve(ResponseEntity, SimpleType)
hateoasResourcesRule() | resources(SimpleTypeResource) | resolver.resolve(List, SimpleType)
rule | source | expectedAlternate
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(SimpleType), SimpleType) | genericClassOfType(ComplexType) | genericClassOfType(ComplexType)
newRule(genericClassOfType(WildcardType), SimpleType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), ComplexType) | genericClassOfType(SimpleType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(SimpleType) | SimpleType
newRule(genericClassOfType(WildcardType), WildcardType) | genericClassOfType(ComplexType) | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | ComplexType | ComplexType
newRule(genericClassOfType(WildcardType), WildcardType) | Void | Void
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(String) | String
newRule(nestedGenericType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | SimpleType
mismatchedNestedGenericRule() | nestedGenericType(SimpleType) | nestedGenericType(nestedGenericType(SimpleType))
newRule(genericClassOfType(WildcardType), WildcardType) | nestedGenericType(SimpleType) | resolver.resolve(ResponseEntity, SimpleType)
hateoasCollectionModelRule() | resources(SimpleTypeEntityModel) | resolver.resolve(List, SimpleType)
}

AlternateTypeRule hateoasResourcesRule() {
AlternateTypeRule hateoasCollectionModelRule() {
def typeResolver = new TypeResolver()
newRule(
typeResolver.resolve(Resources.class, SimpleTypeResource.class),
typeResolver.resolve(CollectionModel.class, SimpleTypeEntityModel.class),
typeResolver.resolve(List.class, SimpleType.class))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class GenericTypeSpec extends SchemaSpecification {
alternateTypeProvider(),
namingStrategy,
emptySet())
def propertyLookup = ["GenericType": "genericField", "Resource": "links"]
def propertyLookup = ["GenericType": "genericField", "EntityModel": "links"]

when:
Model asInput = modelProvider.modelFor(inputContext).get()
Expand All @@ -78,7 +78,7 @@ class GenericTypeSpec extends SchemaSpecification {
genericCollectionWithEnum() | "List" | "List«string»" | "java.util.Collection<springfox.documentation.schema.ExampleEnum>"
genericTypeWithPrimitiveArray() | "Array" | "Array«byte»" | "byte"
genericTypeWithComplexArray() | "Array" | "Array«SimpleType»" | null
genericResource() | "List" | "SubclassOfResourceSupport" | null
genericEntityModel() | "List" | "SubclassOfRepresentationModel" | null
}

@Unroll
Expand Down