Skip to content

Commit 42784ee

Browse files
Ravisankar-ChallaRavisankar Challa
and
Ravisankar Challa
authored
[Java][MicroProfile] Use jsonb imports for serializing and deserializing enum (#6064)
* Use jsonb imports for serializing and deserializing pojo * Fix: Exclude jsonbProperty class when withXml=true Co-authored-by: Ravisankar Challa <[email protected]>
1 parent 380b173 commit 42784ee

File tree

10 files changed

+151
-61
lines changed

10 files changed

+151
-61
lines changed

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/enumClass.mustache

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
1+
{{#withXml}}
12
@XmlType(name="{{datatypeWithEnum}}")
23
@XmlEnum({{dataType}}.class)
4+
{{/withXml}}
5+
{{^withXml}}
6+
@JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
7+
@JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
8+
{{/withXml}}
39
public enum {{datatypeWithEnum}} {
410
511
{{#allowableValues}}
12+
{{#withXml}}
613
{{#enumVars}}@XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}) {{name}}({{dataType}}.valueOf({{{value}}})){{^-last}}, {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}
14+
{{/withXml}}
15+
{{^withXml}}
16+
{{#enumVars}}{{name}}({{dataType}}.valueOf({{{value}}})){{^-last}}, {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}
17+
{{/withXml}}
718
{{/allowableValues}}
819

920

10-
private {{dataType}} value;
21+
{{dataType}} value;
1122

1223
{{datatypeWithEnum}} ({{dataType}} v) {
1324
value = v;
@@ -22,6 +33,7 @@ public enum {{datatypeWithEnum}} {
2233
return String.valueOf(value);
2334
}
2435

36+
{{#withXml}}
2537
public static {{datatypeWithEnum}} fromValue(String v) {
2638
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
2739
if (String.valueOf(b.value).equals(v)) {
@@ -30,4 +42,25 @@ public enum {{datatypeWithEnum}} {
3042
}
3143
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + v + "'");{{/useNullForUnknownEnumValue}}
3244
}
45+
{{/withXml}}
46+
{{^withXml}}
47+
public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
48+
@Override
49+
public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
50+
for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
51+
if (String.valueOf(b.value).equals(parser.getString())) {
52+
return b;
53+
}
54+
}
55+
{{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
56+
}
57+
}
58+
59+
public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
60+
@Override
61+
public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
62+
generator.write(obj.value);
63+
}
64+
}
65+
{{/withXml}}
3366
}

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/pojo.mustache

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
1+
{{#withXml}}
12
import javax.xml.bind.annotation.XmlElement;
23
import javax.xml.bind.annotation.XmlRootElement;
34
import javax.xml.bind.annotation.XmlAccessType;
45
import javax.xml.bind.annotation.XmlAccessorType;
56
import javax.xml.bind.annotation.XmlType;
67
import javax.xml.bind.annotation.XmlEnum;
78
import javax.xml.bind.annotation.XmlEnumValue;
9+
{{/withXml}}
10+
{{^withXml}}
11+
import java.lang.reflect.Type;
12+
import javax.json.bind.annotation.JsonbTypeDeserializer;
13+
import javax.json.bind.annotation.JsonbTypeSerializer;
14+
import javax.json.bind.serializer.DeserializationContext;
15+
import javax.json.bind.serializer.JsonbDeserializer;
16+
import javax.json.bind.serializer.JsonbSerializer;
17+
import javax.json.bind.serializer.SerializationContext;
18+
import javax.json.stream.JsonGenerator;
19+
import javax.json.stream.JsonParser;
820
import javax.json.bind.annotation.JsonbProperty;
21+
{{/withXml}}
922

1023
{{#withXml}}
1124
@XmlAccessorType(XmlAccessType.FIELD)
@@ -56,7 +69,9 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}}{{#serializ
5669
{{/maximum}}
5770
* @return {{name}}
5871
**/
72+
{{^withXml}}
5973
@JsonbProperty("{{baseName}}")
74+
{{/withXml}}
6075
{{#vendorExtensions.x-extra-annotation}}
6176
{{{vendorExtensions.x-extra-annotation}}}
6277
{{/vendorExtensions.x-extra-annotation}}

modules/openapi-generator/src/main/resources/Java/libraries/microprofile/pom.mustache

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@
102102
<artifactId>javax.json.bind-api</artifactId>
103103
<version>1.0</version>
104104
</dependency>
105+
<dependency>
106+
<groupId>javax.json</groupId>
107+
<artifactId>javax.json-api</artifactId>
108+
<version>1.1.4</version>
109+
</dependency>
105110
<dependency>
106111
<groupId>javax.xml.bind</groupId>
107112
<artifactId>jaxb-api</artifactId>

samples/client/petstore/java/microprofile-rest-client/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@
8989
<artifactId>javax.json.bind-api</artifactId>
9090
<version>1.0</version>
9191
</dependency>
92+
<dependency>
93+
<groupId>javax.json</groupId>
94+
<artifactId>javax.json-api</artifactId>
95+
<version>1.1.4</version>
96+
</dependency>
9297
<dependency>
9398
<groupId>javax.xml.bind</groupId>
9499
<artifactId>jaxb-api</artifactId>

samples/client/petstore/java/microprofile-rest-client/src/main/java/org/openapitools/client/model/Category.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
package org.openapitools.client.model;
2626

2727

28-
import javax.xml.bind.annotation.XmlElement;
29-
import javax.xml.bind.annotation.XmlRootElement;
30-
import javax.xml.bind.annotation.XmlAccessType;
31-
import javax.xml.bind.annotation.XmlAccessorType;
32-
import javax.xml.bind.annotation.XmlType;
33-
import javax.xml.bind.annotation.XmlEnum;
34-
import javax.xml.bind.annotation.XmlEnumValue;
28+
import java.lang.reflect.Type;
29+
import javax.json.bind.annotation.JsonbTypeDeserializer;
30+
import javax.json.bind.annotation.JsonbTypeSerializer;
31+
import javax.json.bind.serializer.DeserializationContext;
32+
import javax.json.bind.serializer.JsonbDeserializer;
33+
import javax.json.bind.serializer.JsonbSerializer;
34+
import javax.json.bind.serializer.SerializationContext;
35+
import javax.json.stream.JsonGenerator;
36+
import javax.json.stream.JsonParser;
3537
import javax.json.bind.annotation.JsonbProperty;
3638

3739
/**

samples/client/petstore/java/microprofile-rest-client/src/main/java/org/openapitools/client/model/ModelApiResponse.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
package org.openapitools.client.model;
2626

2727

28-
import javax.xml.bind.annotation.XmlElement;
29-
import javax.xml.bind.annotation.XmlRootElement;
30-
import javax.xml.bind.annotation.XmlAccessType;
31-
import javax.xml.bind.annotation.XmlAccessorType;
32-
import javax.xml.bind.annotation.XmlType;
33-
import javax.xml.bind.annotation.XmlEnum;
34-
import javax.xml.bind.annotation.XmlEnumValue;
28+
import java.lang.reflect.Type;
29+
import javax.json.bind.annotation.JsonbTypeDeserializer;
30+
import javax.json.bind.annotation.JsonbTypeSerializer;
31+
import javax.json.bind.serializer.DeserializationContext;
32+
import javax.json.bind.serializer.JsonbDeserializer;
33+
import javax.json.bind.serializer.JsonbSerializer;
34+
import javax.json.bind.serializer.SerializationContext;
35+
import javax.json.stream.JsonGenerator;
36+
import javax.json.stream.JsonParser;
3537
import javax.json.bind.annotation.JsonbProperty;
3638

3739
/**

samples/client/petstore/java/microprofile-rest-client/src/main/java/org/openapitools/client/model/Order.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@
2626

2727
import java.util.Date;
2828

29-
import javax.xml.bind.annotation.XmlElement;
30-
import javax.xml.bind.annotation.XmlRootElement;
31-
import javax.xml.bind.annotation.XmlAccessType;
32-
import javax.xml.bind.annotation.XmlAccessorType;
33-
import javax.xml.bind.annotation.XmlType;
34-
import javax.xml.bind.annotation.XmlEnum;
35-
import javax.xml.bind.annotation.XmlEnumValue;
29+
import java.lang.reflect.Type;
30+
import javax.json.bind.annotation.JsonbTypeDeserializer;
31+
import javax.json.bind.annotation.JsonbTypeSerializer;
32+
import javax.json.bind.serializer.DeserializationContext;
33+
import javax.json.bind.serializer.JsonbDeserializer;
34+
import javax.json.bind.serializer.JsonbSerializer;
35+
import javax.json.bind.serializer.SerializationContext;
36+
import javax.json.stream.JsonGenerator;
37+
import javax.json.stream.JsonParser;
3638
import javax.json.bind.annotation.JsonbProperty;
3739

3840
/**
@@ -48,14 +50,14 @@ public class Order {
4850

4951
private Date shipDate;
5052

51-
@XmlType(name="StatusEnum")
52-
@XmlEnum(String.class)
53+
@JsonbTypeSerializer(StatusEnum.Serializer.class)
54+
@JsonbTypeDeserializer(StatusEnum.Deserializer.class)
5355
public enum StatusEnum {
5456

55-
@XmlEnumValue("placed") PLACED(String.valueOf("placed")), @XmlEnumValue("approved") APPROVED(String.valueOf("approved")), @XmlEnumValue("delivered") DELIVERED(String.valueOf("delivered"));
57+
PLACED(String.valueOf("placed")), APPROVED(String.valueOf("approved")), DELIVERED(String.valueOf("delivered"));
5658

5759

58-
private String value;
60+
String value;
5961

6062
StatusEnum (String v) {
6163
value = v;
@@ -70,13 +72,23 @@ public String toString() {
7072
return String.valueOf(value);
7173
}
7274

73-
public static StatusEnum fromValue(String v) {
74-
for (StatusEnum b : StatusEnum.values()) {
75-
if (String.valueOf(b.value).equals(v)) {
76-
return b;
75+
public static final class Deserializer implements JsonbDeserializer<StatusEnum> {
76+
@Override
77+
public StatusEnum deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
78+
for (StatusEnum b : StatusEnum.values()) {
79+
if (String.valueOf(b.value).equals(parser.getString())) {
80+
return b;
81+
}
7782
}
83+
throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");
84+
}
85+
}
86+
87+
public static final class Serializer implements JsonbSerializer<StatusEnum> {
88+
@Override
89+
public void serialize(StatusEnum obj, JsonGenerator generator, SerializationContext ctx) {
90+
generator.write(obj.value);
7891
}
79-
throw new IllegalArgumentException("Unexpected value '" + v + "'");
8092
}
8193
}
8294

samples/client/petstore/java/microprofile-rest-client/src/main/java/org/openapitools/client/model/Pet.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@
2929
import org.openapitools.client.model.Category;
3030
import org.openapitools.client.model.Tag;
3131

32-
import javax.xml.bind.annotation.XmlElement;
33-
import javax.xml.bind.annotation.XmlRootElement;
34-
import javax.xml.bind.annotation.XmlAccessType;
35-
import javax.xml.bind.annotation.XmlAccessorType;
36-
import javax.xml.bind.annotation.XmlType;
37-
import javax.xml.bind.annotation.XmlEnum;
38-
import javax.xml.bind.annotation.XmlEnumValue;
32+
import java.lang.reflect.Type;
33+
import javax.json.bind.annotation.JsonbTypeDeserializer;
34+
import javax.json.bind.annotation.JsonbTypeSerializer;
35+
import javax.json.bind.serializer.DeserializationContext;
36+
import javax.json.bind.serializer.JsonbDeserializer;
37+
import javax.json.bind.serializer.JsonbSerializer;
38+
import javax.json.bind.serializer.SerializationContext;
39+
import javax.json.stream.JsonGenerator;
40+
import javax.json.stream.JsonParser;
3941
import javax.json.bind.annotation.JsonbProperty;
4042

4143
/**
@@ -53,14 +55,14 @@ public class Pet {
5355

5456
private List<Tag> tags = null;
5557

56-
@XmlType(name="StatusEnum")
57-
@XmlEnum(String.class)
58+
@JsonbTypeSerializer(StatusEnum.Serializer.class)
59+
@JsonbTypeDeserializer(StatusEnum.Deserializer.class)
5860
public enum StatusEnum {
5961

60-
@XmlEnumValue("available") AVAILABLE(String.valueOf("available")), @XmlEnumValue("pending") PENDING(String.valueOf("pending")), @XmlEnumValue("sold") SOLD(String.valueOf("sold"));
62+
AVAILABLE(String.valueOf("available")), PENDING(String.valueOf("pending")), SOLD(String.valueOf("sold"));
6163

6264

63-
private String value;
65+
String value;
6466

6567
StatusEnum (String v) {
6668
value = v;
@@ -75,13 +77,23 @@ public String toString() {
7577
return String.valueOf(value);
7678
}
7779

78-
public static StatusEnum fromValue(String v) {
79-
for (StatusEnum b : StatusEnum.values()) {
80-
if (String.valueOf(b.value).equals(v)) {
81-
return b;
80+
public static final class Deserializer implements JsonbDeserializer<StatusEnum> {
81+
@Override
82+
public StatusEnum deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
83+
for (StatusEnum b : StatusEnum.values()) {
84+
if (String.valueOf(b.value).equals(parser.getString())) {
85+
return b;
86+
}
8287
}
88+
throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");
89+
}
90+
}
91+
92+
public static final class Serializer implements JsonbSerializer<StatusEnum> {
93+
@Override
94+
public void serialize(StatusEnum obj, JsonGenerator generator, SerializationContext ctx) {
95+
generator.write(obj.value);
8396
}
84-
throw new IllegalArgumentException("Unexpected value '" + v + "'");
8597
}
8698
}
8799

samples/client/petstore/java/microprofile-rest-client/src/main/java/org/openapitools/client/model/Tag.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
package org.openapitools.client.model;
2626

2727

28-
import javax.xml.bind.annotation.XmlElement;
29-
import javax.xml.bind.annotation.XmlRootElement;
30-
import javax.xml.bind.annotation.XmlAccessType;
31-
import javax.xml.bind.annotation.XmlAccessorType;
32-
import javax.xml.bind.annotation.XmlType;
33-
import javax.xml.bind.annotation.XmlEnum;
34-
import javax.xml.bind.annotation.XmlEnumValue;
28+
import java.lang.reflect.Type;
29+
import javax.json.bind.annotation.JsonbTypeDeserializer;
30+
import javax.json.bind.annotation.JsonbTypeSerializer;
31+
import javax.json.bind.serializer.DeserializationContext;
32+
import javax.json.bind.serializer.JsonbDeserializer;
33+
import javax.json.bind.serializer.JsonbSerializer;
34+
import javax.json.bind.serializer.SerializationContext;
35+
import javax.json.stream.JsonGenerator;
36+
import javax.json.stream.JsonParser;
3537
import javax.json.bind.annotation.JsonbProperty;
3638

3739
/**

samples/client/petstore/java/microprofile-rest-client/src/main/java/org/openapitools/client/model/User.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
package org.openapitools.client.model;
2626

2727

28-
import javax.xml.bind.annotation.XmlElement;
29-
import javax.xml.bind.annotation.XmlRootElement;
30-
import javax.xml.bind.annotation.XmlAccessType;
31-
import javax.xml.bind.annotation.XmlAccessorType;
32-
import javax.xml.bind.annotation.XmlType;
33-
import javax.xml.bind.annotation.XmlEnum;
34-
import javax.xml.bind.annotation.XmlEnumValue;
28+
import java.lang.reflect.Type;
29+
import javax.json.bind.annotation.JsonbTypeDeserializer;
30+
import javax.json.bind.annotation.JsonbTypeSerializer;
31+
import javax.json.bind.serializer.DeserializationContext;
32+
import javax.json.bind.serializer.JsonbDeserializer;
33+
import javax.json.bind.serializer.JsonbSerializer;
34+
import javax.json.bind.serializer.SerializationContext;
35+
import javax.json.stream.JsonGenerator;
36+
import javax.json.stream.JsonParser;
3537
import javax.json.bind.annotation.JsonbProperty;
3638

3739
/**

0 commit comments

Comments
 (0)