Skip to content

Commit

Permalink
swagger-api#3904 clean json field retrieval
Browse files Browse the repository at this point in the history
  • Loading branch information
konopski committed Oct 7, 2017
1 parent 8ac8b80 commit 28b6473
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,32 @@ public class JSON {
{{#children}}
classByDiscriminatorValue.put("{{name}}".toUpperCase(), {{classname}}.class);
{{/children}}
String discriminatorField = "{{discriminator}}";
String discriminatorValue = readElement.getAsJsonObject().get(discriminatorField).getAsString();
return (Class) classByDiscriminatorValue.get(discriminatorValue.toUpperCase());
return getClassByDiscriminator(
classByDiscriminatorValue,
getDiscriminatorValue(readElement, "{{discriminator}}"));
}
})
{{/parent}}
;
return fireBuilder.createGsonBuilder();
}

private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {
JsonElement element = readElement.getAsJsonObject().get(discriminatorField);
if(null == element) {
throw new IllegalArgumentException("missing discriminator field: <" + discriminatorField + ">");
}
return element.getAsString();
}

private static Class getClassByDiscriminator(Map classByDiscriminatorValue, String discriminatorValue) {
Class clazz = (Class) classByDiscriminatorValue.get(discriminatorValue.toUpperCase());
if(null == clazz) {
throw new IllegalArgumentException("cannot determine model class of name: <" + discriminatorValue + ">");
}
return clazz;
}

public JSON() {
gson = createGson()
.registerTypeAdapter(Date.class, dateTypeAdapter)
Expand Down
2 changes: 2 additions & 0 deletions samples/client/petstore/java/retrofit2/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ ext {
swagger_annotations_version = "1.5.15"
junit_version = "4.12"
threetenbp_version = "1.3.5"
json_fire_version = "1.8.0"
}

dependencies {
Expand All @@ -107,6 +108,7 @@ dependencies {
compile "com.squareup.retrofit2:converter-gson:$retrofit_version"
compile "io.swagger:swagger-annotations:$swagger_annotations_version"
compile "org.apache.oltu.oauth2:org.apache.oltu.oauth2.client:$oltu_version"
compile "io.gsonfire:gson-fire:$json_fire_version"
compile "org.threeten:threetenbp:$threetenbp_version"

testCompile "junit:junit:$junit_version"
Expand Down
1 change: 1 addition & 0 deletions samples/client/petstore/java/retrofit2/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ lazy val root = (project in file(".")).
"io.swagger" % "swagger-annotations" % "1.5.15" % "compile",
"org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.1" % "compile",
"org.threeten" % "threetenbp" % "1.3.5" % "compile",
"io.gsonfire" % "gson-fire" % "1.8.0" % "compile",
"junit" % "junit" % "4.12" % "test",
"com.novocode" % "junit-interface" % "0.11" % "test"
)
Expand Down
6 changes: 6 additions & 0 deletions samples/client/petstore/java/retrofit2/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,11 @@
<artifactId>org.apache.oltu.oauth2.client</artifactId>
<version>${oltu-version}</version>
</dependency>
<dependency>
<groupId>io.gsonfire</groupId>
<artifactId>gson-fire</artifactId>
<version>${gson-fire-version}</version>
</dependency>
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threetenbp</artifactId>
Expand All @@ -215,6 +220,7 @@
<java.version>1.7</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<gson-fire-version>1.8.0</gson-fire-version>
<swagger-core-version>1.5.15</swagger-core-version>
<retrofit-version>2.3.0</retrofit-version>
<threetenbp-version>1.3.5</threetenbp-version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,31 @@ public Class getClassForElement(JsonElement readElement) {
Map classByDiscriminatorValue = new HashMap();
classByDiscriminatorValue.put("Cat".toUpperCase(), Cat.class);
classByDiscriminatorValue.put("Dog".toUpperCase(), Dog.class);
String discriminatorField = "className";
String discriminatorValue = readElement.getAsJsonObject().get(discriminatorField).getAsString();
return (Class) classByDiscriminatorValue.get(discriminatorValue.toUpperCase());
return getClassByDiscriminator(
classByDiscriminatorValue,
getDiscriminatorValue(readElement, "className"));
}
})
;
return fireBuilder.createGsonBuilder();
}

private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {
JsonElement element = readElement.getAsJsonObject().get(discriminatorField);
if(null == element) {
throw new IllegalArgumentException("missing discriminator field: <" + discriminatorField + ">");
}
return element.getAsString();
}

private static Class getClassByDiscriminator(Map classByDiscriminatorValue, String discriminatorValue) {
Class clazz = (Class) classByDiscriminatorValue.get(discriminatorValue.toUpperCase());
if(null == clazz) {
throw new IllegalArgumentException("cannot determine model class of name: <" + discriminatorValue + ">");
}
return clazz;
}

public JSON() {
gson = createGson()
.registerTypeAdapter(Date.class, dateTypeAdapter)
Expand Down

0 comments on commit 28b6473

Please sign in to comment.