[Java][Client] JSON-B serialization support (#8729)

* Added JSON-B support.

* Mention jsonb in docs
This commit is contained in:
Dheeraj Nalluri 2021-02-27 01:32:46 -06:00 committed by GitHub
parent 2b716684f3
commit 264b017eec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 163 additions and 23 deletions

View File

@ -52,7 +52,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|scmDeveloperConnection|SCM developer connection in generated pom.xml| |scm:git:git@github.com:openapitools/openapi-generator.git| |scmDeveloperConnection|SCM developer connection in generated pom.xml| |scm:git:git@github.com:openapitools/openapi-generator.git|
|scmUrl|SCM URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| |scmUrl|SCM URL in generated pom.xml| |https://github.com/openapitools/openapi-generator|
|serializableModel|boolean - toggle "implements Serializable" for generated models| |false| |serializableModel|boolean - toggle "implements Serializable" for generated models| |false|
|serializationLibrary|Serialization library, default depends from the library|<dl><dt>**jackson**</dt><dd>Use Jackson as serialization library</dd><dt>**gson**</dt><dd>Use Gson as serialization library</dd></dl>|null| |serializationLibrary|Serialization library, default depends from the library|<dl><dt>**jsonb**</dt><dd>Use JSON-B as serialization library</dd><dt>**jackson**</dt><dd>Use Jackson as serialization library</dd><dt>**gson**</dt><dd>Use Gson as serialization library</dd></dl>|null|
|snapshotVersion|Uses a SNAPSHOT version.|<dl><dt>**true**</dt><dd>Use a SnapShot Version</dd><dt>**false**</dt><dd>Use a Release Version</dd></dl>|null| |snapshotVersion|Uses a SNAPSHOT version.|<dl><dt>**true**</dt><dd>Use a SnapShot Version</dd><dt>**false**</dt><dd>Use a Release Version</dd></dl>|null|
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true|
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|

View File

@ -540,13 +540,6 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
} }
} }
if (additionalProperties.containsKey(WITH_XML)) {
setWithXml(Boolean.parseBoolean(additionalProperties.get(WITH_XML).toString()));
if (withXml) {
additionalProperties.put(WITH_XML, "true");
}
}
if (additionalProperties.containsKey(DATE_LIBRARY)) { if (additionalProperties.containsKey(DATE_LIBRARY)) {
setDateLibrary(additionalProperties.get("dateLibrary").toString()); setDateLibrary(additionalProperties.get("dateLibrary").toString());
} }

View File

@ -87,6 +87,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
public static final String SERIALIZATION_LIBRARY_GSON = "gson"; public static final String SERIALIZATION_LIBRARY_GSON = "gson";
public static final String SERIALIZATION_LIBRARY_JACKSON = "jackson"; public static final String SERIALIZATION_LIBRARY_JACKSON = "jackson";
public static final String SERIALIZATION_LIBRARY_JSONB = "jsonb";
protected String gradleWrapperPackage = "gradle.wrapper"; protected String gradleWrapperPackage = "gradle.wrapper";
protected boolean useRxJava = false; protected boolean useRxJava = false;
@ -179,6 +180,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen
Map<String, String> serializationOptions = new HashMap<>(); Map<String, String> serializationOptions = new HashMap<>();
serializationOptions.put(SERIALIZATION_LIBRARY_GSON, "Use Gson as serialization library"); serializationOptions.put(SERIALIZATION_LIBRARY_GSON, "Use Gson as serialization library");
serializationOptions.put(SERIALIZATION_LIBRARY_JACKSON, "Use Jackson as serialization library"); serializationOptions.put(SERIALIZATION_LIBRARY_JACKSON, "Use Jackson as serialization library");
serializationOptions.put(SERIALIZATION_LIBRARY_JSONB, "Use JSON-B as serialization library");
serializationLibrary.setEnum(serializationOptions); serializationLibrary.setEnum(serializationOptions);
cliOptions.add(serializationLibrary); cliOptions.add(serializationLibrary);
@ -554,21 +556,33 @@ public class JavaClientCodegen extends AbstractJavaCodegen
LOGGER.info("No serializationLibrary configured, using '" + SERIALIZATION_LIBRARY_GSON + "' as fallback"); LOGGER.info("No serializationLibrary configured, using '" + SERIALIZATION_LIBRARY_GSON + "' as fallback");
setSerializationLibrary(SERIALIZATION_LIBRARY_GSON); setSerializationLibrary(SERIALIZATION_LIBRARY_GSON);
} }
if (SERIALIZATION_LIBRARY_JACKSON.equals(getSerializationLibrary())) { switch (getSerializationLibrary()) {
case SERIALIZATION_LIBRARY_JACKSON:
additionalProperties.put(SERIALIZATION_LIBRARY_JACKSON, "true"); additionalProperties.put(SERIALIZATION_LIBRARY_JACKSON, "true");
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON); additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
additionalProperties.remove(SERIALIZATION_LIBRARY_JSONB);
supportingFiles.add(new SupportingFile("RFC3339DateFormat.mustache", invokerFolder, "RFC3339DateFormat.java")); supportingFiles.add(new SupportingFile("RFC3339DateFormat.mustache", invokerFolder, "RFC3339DateFormat.java"));
if (!NATIVE.equals(getLibrary())) { if (!NATIVE.equals(getLibrary())) {
if ("threetenbp".equals(dateLibrary) && !usePlayWS) { if ("threetenbp".equals(dateLibrary) && !usePlayWS) {
supportingFiles.add(new SupportingFile("CustomInstantDeserializer.mustache", invokerFolder, "CustomInstantDeserializer.java")); supportingFiles.add(new SupportingFile("CustomInstantDeserializer.mustache", invokerFolder, "CustomInstantDeserializer.java"));
} }
} }
} else if (SERIALIZATION_LIBRARY_GSON.equals(getSerializationLibrary())) { break;
case SERIALIZATION_LIBRARY_GSON:
additionalProperties.put(SERIALIZATION_LIBRARY_GSON, "true"); additionalProperties.put(SERIALIZATION_LIBRARY_GSON, "true");
additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON); additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON);
} else { additionalProperties.remove(SERIALIZATION_LIBRARY_JSONB);
break;
case SERIALIZATION_LIBRARY_JSONB:
additionalProperties.put(SERIALIZATION_LIBRARY_JSONB, "true");
additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON); additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON);
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON); additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
break;
default:
additionalProperties.remove(SERIALIZATION_LIBRARY_JACKSON);
additionalProperties.remove(SERIALIZATION_LIBRARY_GSON);
additionalProperties.remove(SERIALIZATION_LIBRARY_JSONB);
break;
} }
// authentication related files // authentication related files
@ -974,6 +988,8 @@ public class JavaClientCodegen extends AbstractJavaCodegen
this.serializationLibrary = SERIALIZATION_LIBRARY_JACKSON; this.serializationLibrary = SERIALIZATION_LIBRARY_JACKSON;
} else if (SERIALIZATION_LIBRARY_GSON.equalsIgnoreCase(serializationLibrary)) { } else if (SERIALIZATION_LIBRARY_GSON.equalsIgnoreCase(serializationLibrary)) {
this.serializationLibrary = SERIALIZATION_LIBRARY_GSON; this.serializationLibrary = SERIALIZATION_LIBRARY_GSON;
} else if (SERIALIZATION_LIBRARY_JSONB.equalsIgnoreCase(serializationLibrary)) {
this.serializationLibrary = SERIALIZATION_LIBRARY_JSONB;
} else { } else {
throw new IllegalArgumentException("Unexpected serializationLibrary value: " + serializationLibrary); throw new IllegalArgumentException("Unexpected serializationLibrary value: " + serializationLibrary);
} }

View File

@ -23,6 +23,18 @@ import com.fasterxml.jackson.dataformat.xml.annotation.*;
{{#withXml}} {{#withXml}}
import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.*;
{{/withXml}} {{/withXml}}
{{#jsonb}}
import java.lang.reflect.Type;
import javax.json.bind.annotation.JsonbTypeDeserializer;
import javax.json.bind.annotation.JsonbTypeSerializer;
import javax.json.bind.serializer.DeserializationContext;
import javax.json.bind.serializer.JsonbDeserializer;
import javax.json.bind.serializer.JsonbSerializer;
import javax.json.bind.serializer.SerializationContext;
import javax.json.stream.JsonGenerator;
import javax.json.stream.JsonParser;
import javax.json.bind.annotation.JsonbProperty;
{{/jsonb}}
{{#parcelableModel}} {{#parcelableModel}}
import android.os.Parcelable; import android.os.Parcelable;
import android.os.Parcel; import android.os.Parcel;

View File

@ -16,6 +16,10 @@ import com.google.gson.stream.JsonWriter;
{{#gson}} {{#gson}}
@JsonAdapter({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.Adapter.class) @JsonAdapter({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.Adapter.class)
{{/gson}} {{/gson}}
{{#jsonb}}
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
{{/jsonb}}
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} { public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} {
{{#allowableValues}}{{#enumVars}} {{#allowableValues}}{{#enumVars}}
{{#enumDescription}} {{#enumDescription}}
@ -23,6 +27,9 @@ public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum
* {{enumDescription}} * {{enumDescription}}
*/ */
{{/enumDescription}} {{/enumDescription}}
{{#withXml}}
@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
{{/withXml}}
{{{name}}}({{{value}}}){{^-last}}, {{{name}}}({{{value}}}){{^-last}},
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}} {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
@ -70,4 +77,24 @@ public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum
} }
} }
{{/gson}} {{/gson}}
{{#jsonb}}
public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
@Override
public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
if (String.valueOf(b.value).equals(parser.getString())) {
return b;
}
}
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
}
}
public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
@Override
public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
generator.write(obj.value);
}
}
{{/jsonb}}
} }

View File

@ -4,6 +4,14 @@
{{#gson}} {{#gson}}
@JsonAdapter({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}.Adapter.class) @JsonAdapter({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}.Adapter.class)
{{/gson}} {{/gson}}
{{#jsonb}}
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
{{/jsonb}}
{{#withXml}}
@XmlType(name="{{datatypeWithEnum}}")
@XmlEnum({{dataType}}.class)
{{/withXml}}
public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} { public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
{{#allowableValues}} {{#allowableValues}}
{{#enumVars}} {{#enumVars}}
@ -12,6 +20,9 @@
* {{enumDescription}} * {{enumDescription}}
*/ */
{{/enumDescription}} {{/enumDescription}}
{{#withXml}}
@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
{{/withXml}}
{{{name}}}({{{value}}}){{^-last}}, {{{name}}}({{{value}}}){{^-last}},
{{/-last}}{{#-last}};{{/-last}} {{/-last}}{{#-last}};{{/-last}}
{{/enumVars}} {{/enumVars}}
@ -61,4 +72,24 @@
} }
} }
{{/gson}} {{/gson}}
{{#jsonb}}
public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
@Override
public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
if (String.valueOf(b.value).equals(parser.getString())) {
return b;
}
}
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
}
}
public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
@Override
public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
generator.write(obj.value);
}
}
{{/jsonb}}
} }

View File

@ -179,6 +179,9 @@ public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{{#vendorE
{{^required}} {{^required}}
@javax.annotation.Nullable @javax.annotation.Nullable
{{/required}} {{/required}}
{{#jsonb}}
@JsonbProperty("{{baseName}}")
{{/jsonb}}
{{#useBeanValidation}}{{>beanValidation}}{{/useBeanValidation}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}") {{#useBeanValidation}}{{>beanValidation}}{{/useBeanValidation}} @ApiModelProperty({{#example}}example = "{{{example}}}", {{/example}}{{#required}}required = {{required}}, {{/required}}value = "{{{description}}}")
{{#vendorExtensions.x-extra-annotation}} {{#vendorExtensions.x-extra-annotation}}
{{{vendorExtensions.x-extra-annotation}}} {{{vendorExtensions.x-extra-annotation}}}
@ -276,7 +279,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{{#vendorE
* Convert the given object to string with each line indented by 4 spaces * Convert the given object to string with each line indented by 4 spaces
* (except the first line). * (except the first line).
*/ */
private String toIndentedString(Object o) { private{{#jsonb}} static{{/jsonb}} String toIndentedString(Object o) {
if (o == null) { if (o == null) {
return "null"; return "null";
} }

View File

@ -47,13 +47,19 @@ public class BigCat extends Cat {
/** /**
* Gets or Sets kind * Gets or Sets kind
*/ */
@XmlType(name="KindEnum")
@XmlEnum(String.class)
public enum KindEnum { public enum KindEnum {
@XmlEnumValue("lions")
LIONS("lions"), LIONS("lions"),
@XmlEnumValue("tigers")
TIGERS("tigers"), TIGERS("tigers"),
@XmlEnumValue("leopards")
LEOPARDS("leopards"), LEOPARDS("leopards"),
@XmlEnumValue("jaguars")
JAGUARS("jaguars"); JAGUARS("jaguars");
private String value; private String value;

View File

@ -41,13 +41,19 @@ public class BigCatAllOf {
/** /**
* Gets or Sets kind * Gets or Sets kind
*/ */
@XmlType(name="KindEnum")
@XmlEnum(String.class)
public enum KindEnum { public enum KindEnum {
@XmlEnumValue("lions")
LIONS("lions"), LIONS("lions"),
@XmlEnumValue("tigers")
TIGERS("tigers"), TIGERS("tigers"),
@XmlEnumValue("leopards")
LEOPARDS("leopards"), LEOPARDS("leopards"),
@XmlEnumValue("jaguars")
JAGUARS("jaguars"); JAGUARS("jaguars");
private String value; private String value;

View File

@ -44,9 +44,13 @@ public class EnumArrays {
/** /**
* Gets or Sets justSymbol * Gets or Sets justSymbol
*/ */
@XmlType(name="JustSymbolEnum")
@XmlEnum(String.class)
public enum JustSymbolEnum { public enum JustSymbolEnum {
@XmlEnumValue(">=")
GREATER_THAN_OR_EQUAL_TO(">="), GREATER_THAN_OR_EQUAL_TO(">="),
@XmlEnumValue("$")
DOLLAR("$"); DOLLAR("$");
private String value; private String value;
@ -83,9 +87,13 @@ public class EnumArrays {
/** /**
* Gets or Sets arrayEnum * Gets or Sets arrayEnum
*/ */
@XmlType(name="ArrayEnumEnum")
@XmlEnum(String.class)
public enum ArrayEnumEnum { public enum ArrayEnumEnum {
@XmlEnumValue("fish")
FISH("fish"), FISH("fish"),
@XmlEnumValue("crab")
CRAB("crab"); CRAB("crab");
private String value; private String value;

View File

@ -27,10 +27,13 @@ import com.fasterxml.jackson.annotation.JsonValue;
*/ */
public enum EnumClass { public enum EnumClass {
@XmlEnumValue("_abc")
_ABC("_abc"), _ABC("_abc"),
@XmlEnumValue("-efg")
_EFG("-efg"), _EFG("-efg"),
@XmlEnumValue("(xyz)")
_XYZ_("(xyz)"); _XYZ_("(xyz)");
private String value; private String value;

View File

@ -46,11 +46,16 @@ public class EnumTest {
/** /**
* Gets or Sets enumString * Gets or Sets enumString
*/ */
@XmlType(name="EnumStringEnum")
@XmlEnum(String.class)
public enum EnumStringEnum { public enum EnumStringEnum {
@XmlEnumValue("UPPER")
UPPER("UPPER"), UPPER("UPPER"),
@XmlEnumValue("lower")
LOWER("lower"), LOWER("lower"),
@XmlEnumValue("")
EMPTY(""); EMPTY("");
private String value; private String value;
@ -87,11 +92,16 @@ public class EnumTest {
/** /**
* Gets or Sets enumStringRequired * Gets or Sets enumStringRequired
*/ */
@XmlType(name="EnumStringRequiredEnum")
@XmlEnum(String.class)
public enum EnumStringRequiredEnum { public enum EnumStringRequiredEnum {
@XmlEnumValue("UPPER")
UPPER("UPPER"), UPPER("UPPER"),
@XmlEnumValue("lower")
LOWER("lower"), LOWER("lower"),
@XmlEnumValue("")
EMPTY(""); EMPTY("");
private String value; private String value;
@ -128,9 +138,13 @@ public class EnumTest {
/** /**
* Gets or Sets enumInteger * Gets or Sets enumInteger
*/ */
@XmlType(name="EnumIntegerEnum")
@XmlEnum(Integer.class)
public enum EnumIntegerEnum { public enum EnumIntegerEnum {
@XmlEnumValue("1")
NUMBER_1(1), NUMBER_1(1),
@XmlEnumValue("-1")
NUMBER_MINUS_1(-1); NUMBER_MINUS_1(-1);
private Integer value; private Integer value;
@ -167,9 +181,13 @@ public class EnumTest {
/** /**
* Gets or Sets enumNumber * Gets or Sets enumNumber
*/ */
@XmlType(name="EnumNumberEnum")
@XmlEnum(Double.class)
public enum EnumNumberEnum { public enum EnumNumberEnum {
@XmlEnumValue("1.1")
NUMBER_1_DOT_1(1.1), NUMBER_1_DOT_1(1.1),
@XmlEnumValue("-1.2")
NUMBER_MINUS_1_DOT_2(-1.2); NUMBER_MINUS_1_DOT_2(-1.2);
private Double value; private Double value;

View File

@ -54,9 +54,13 @@ public class MapTest {
/** /**
* Gets or Sets inner * Gets or Sets inner
*/ */
@XmlType(name="InnerEnum")
@XmlEnum(String.class)
public enum InnerEnum { public enum InnerEnum {
@XmlEnumValue("UPPER")
UPPER("UPPER"), UPPER("UPPER"),
@XmlEnumValue("lower")
LOWER("lower"); LOWER("lower");
private String value; private String value;

View File

@ -63,11 +63,16 @@ public class Order {
/** /**
* Order Status * Order Status
*/ */
@XmlType(name="StatusEnum")
@XmlEnum(String.class)
public enum StatusEnum { public enum StatusEnum {
@XmlEnumValue("placed")
PLACED("placed"), PLACED("placed"),
@XmlEnumValue("approved")
APPROVED("approved"), APPROVED("approved"),
@XmlEnumValue("delivered")
DELIVERED("delivered"); DELIVERED("delivered");
private String value; private String value;

View File

@ -27,10 +27,13 @@ import com.fasterxml.jackson.annotation.JsonValue;
*/ */
public enum OuterEnum { public enum OuterEnum {
@XmlEnumValue("placed")
PLACED("placed"), PLACED("placed"),
@XmlEnumValue("approved")
APPROVED("approved"), APPROVED("approved"),
@XmlEnumValue("delivered")
DELIVERED("delivered"); DELIVERED("delivered");
private String value; private String value;

View File

@ -80,11 +80,16 @@ public class Pet {
/** /**
* pet status in the store * pet status in the store
*/ */
@XmlType(name="StatusEnum")
@XmlEnum(String.class)
public enum StatusEnum { public enum StatusEnum {
@XmlEnumValue("available")
AVAILABLE("available"), AVAILABLE("available"),
@XmlEnumValue("pending")
PENDING("pending"), PENDING("pending"),
@XmlEnumValue("sold")
SOLD("sold"); SOLD("sold");
private String value; private String value;