Skip to content

Commit

Permalink
Merge pull request #3043 from vilppuvuorinen/indirect-properties-poc
Browse files Browse the repository at this point in the history
Indirect properties PoC
  • Loading branch information
frantuma authored Oct 9, 2019
2 parents 2ef222c + 2efdedf commit 49aac2d
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyMetadata;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
Expand Down Expand Up @@ -135,7 +136,25 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
(io.swagger.v3.oas.annotations.media.ArraySchema) resolvedSchemaOrArrayAnnotation :
null;

final BeanDescription beanDesc = _mapper.getSerializationConfig().introspect(type);
final BeanDescription beanDesc;
{
BeanDescription recurBeanDesc = _mapper.getSerializationConfig().introspect(type);

HashSet<String> visited = new HashSet<>();
JsonSerialize jsonSerialize = recurBeanDesc.getClassAnnotations().get(JsonSerialize.class);
while (jsonSerialize != null && !Void.class.equals(jsonSerialize.as())) {
String asName = jsonSerialize.as().getName();
if (visited.contains(asName)) break;
visited.add(asName);

recurBeanDesc = _mapper.getSerializationConfig().introspect(
_mapper.constructType(jsonSerialize.as())
);
jsonSerialize = recurBeanDesc.getClassAnnotations().get(JsonSerialize.class);
}
beanDesc = recurBeanDesc;
}


String name = annotatedType.getName();
if (StringUtils.isBlank(name)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.swagger.v3.core.converting;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.common.collect.ImmutableSet;
import io.swagger.v3.core.converter.ModelConverters;
import io.swagger.v3.core.matchers.SerializationMatchers;
Expand Down Expand Up @@ -31,6 +33,7 @@
import io.swagger.v3.oas.models.media.NumberSchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.media.StringSchema;
import org.testng.annotations.Ignore;
import org.testng.annotations.Test;

import java.io.IOException;
Expand Down Expand Up @@ -370,4 +373,42 @@ class DateModel {
@io.swagger.v3.oas.annotations.media.Schema
public Double doubleValue;
}

@Test
public void indirectPropertiesRecognized() {
final Map<String, Schema> models = ModelConverters.getInstance().read(BaseClass.class);
final Schema model = models.get("BaseClass");
assertNotNull(model);
assertEquals(model.getName(), "BaseClass");
assertNotNull(model.getProperties());
assertEquals(model.getProperties().size(), 1);
}

@JsonSerialize(as = AnnotatedImplementationClass.class)
abstract class BaseClass {
public abstract String field();
}
class AnnotatedImplementationClass extends BaseClass {
@Override
@JsonProperty
public String field() {
return "value";
}
}

@Test
@Ignore
public void directPropertiesRecognized() {
final Map<String, Schema> models = ModelConverters.getInstance().read(AnnotatedBaseClass.class);
final Schema model = models.get("AnnotatedBaseClass");
assertNotNull(model);
assertEquals(model.getName(), "AnnotatedBaseClass");
assertNotNull(model.getProperties());
assertEquals(model.getProperties().size(), 1);
}

abstract class AnnotatedBaseClass {
@JsonProperty
public abstract String field();
}
}

0 comments on commit 49aac2d

Please sign in to comment.