Skip to content

Commit 1d0cb54

Browse files
Applied patches under scripts/patches/*.diff
Signed-off-by: Kubernetes Publisher <[email protected]>
1 parent 9f8f903 commit 1d0cb54

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
import io.gsonfire.GsonFireBuilder;
2525
import io.gsonfire.TypeSelector;
2626

27+
import io.kubernetes.client.gson.V1MetadataExclusionStrategy;
28+
import io.kubernetes.client.gson.V1StatusPreProcessor;
29+
import io.kubernetes.client.openapi.models.V1Status;
2730
import okio.ByteString;
2831

2932
import java.io.IOException;
@@ -38,6 +41,9 @@
3841
import java.time.LocalDate;
3942
import java.time.OffsetDateTime;
4043
import java.time.format.DateTimeFormatter;
44+
import java.time.format.DateTimeFormatterBuilder;
45+
import java.time.format.DateTimeParseException;
46+
import java.time.temporal.ChronoField;
4147
import java.util.Date;
4248
import java.util.Locale;
4349
import java.util.Map;
@@ -52,18 +58,32 @@
5258
public class JSON {
5359
private static Gson gson;
5460
private static boolean isLenientOnJson = false;
61+
62+
private static final DateTimeFormatter RFC3339MICRO_FORMATTER =
63+
new DateTimeFormatterBuilder()
64+
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
65+
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))
66+
.optionalStart()
67+
.appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true)
68+
.optionalEnd()
69+
.appendLiteral("Z")
70+
.toFormatter();
71+
5572
private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter();
5673
private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter();
57-
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter();
74+
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER);
5875
private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter();
5976
private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter();
6077

6178
@SuppressWarnings("unchecked")
6279
public static GsonBuilder createGson() {
6380
GsonFireBuilder fireBuilder = new GsonFireBuilder()
6481
;
65-
GsonBuilder builder = fireBuilder.createGsonBuilder();
66-
return builder;
82+
GsonBuilder builder =
83+
fireBuilder
84+
.registerPreProcessor(V1Status.class, new V1StatusPreProcessor())
85+
.createGsonBuilder();
86+
return builder.setExclusionStrategies(new V1MetadataExclusionStrategy());
6787
}
6888

6989
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {
@@ -907,11 +927,14 @@ public static class ByteArrayAdapter extends TypeAdapter<byte[]> {
907927

908928
@Override
909929
public void write(JsonWriter out, byte[] value) throws IOException {
930+
boolean oldHtmlSafe = out.isHtmlSafe();
931+
out.setHtmlSafe(false);
910932
if (value == null) {
911933
out.nullValue();
912934
} else {
913935
out.value(ByteString.of(value).base64());
914936
}
937+
out.setHtmlSafe(oldHtmlSafe);
915938
}
916939

917940
@Override
@@ -967,7 +990,12 @@ public OffsetDateTime read(JsonReader in) throws IOException {
967990
if (date.endsWith("+0000")) {
968991
date = date.substring(0, date.length()-5) + "Z";
969992
}
970-
return OffsetDateTime.parse(date, formatter);
993+
try {
994+
return OffsetDateTime.parse(date, formatter);
995+
} catch (DateTimeParseException e) {
996+
// backward-compatibility for ISO8601 timestamp format
997+
return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
998+
}
971999
}
9721000
}
9731001
}

kubernetes/src/main/java/io/kubernetes/client/openapi/models/V1ListMeta.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,8 @@ public void write(JsonWriter out, V1ListMeta value) throws IOException {
267267
@Override
268268
public V1ListMeta read(JsonReader in) throws IOException {
269269
JsonElement jsonElement = elementAdapter.read(in);
270-
validateJsonElement(jsonElement);
270+
// Disable validation so delete API can tolerate non-status return object (graceful deletion)
271+
// validateJsonObject(jsonObj);
271272
return thisAdapter.fromJsonTree(jsonElement);
272273
}
273274

kubernetes/src/main/java/io/kubernetes/client/openapi/models/V1Secret.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.google.gson.annotations.SerializedName;
2121
import com.google.gson.stream.JsonReader;
2222
import com.google.gson.stream.JsonWriter;
23+
import io.kubernetes.client.custom.MapUtils;
2324
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2425
import io.swagger.annotations.ApiModel;
2526
import io.swagger.annotations.ApiModelProperty;
@@ -263,7 +264,7 @@ public boolean equals(Object o) {
263264
}
264265
V1Secret v1Secret = (V1Secret) o;
265266
return Objects.equals(this.apiVersion, v1Secret.apiVersion) &&
266-
Objects.equals(this.data, v1Secret.data) &&
267+
MapUtils.equals(this.data, v1Secret.data) &&
267268
Objects.equals(this.immutable, v1Secret.immutable) &&
268269
Objects.equals(this.kind, v1Secret.kind) &&
269270
Objects.equals(this.metadata, v1Secret.metadata) &&

kubernetes/src/main/java/io/kubernetes/client/openapi/models/V1Status.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,8 @@ public void write(JsonWriter out, V1Status value) throws IOException {
391391
@Override
392392
public V1Status read(JsonReader in) throws IOException {
393393
JsonElement jsonElement = elementAdapter.read(in);
394-
validateJsonElement(jsonElement);
394+
// Disable validation so delete API can tolerate non-status return object (graceful deletion)
395+
// validateJsonObject(jsonObj);
395396
return thisAdapter.fromJsonTree(jsonElement);
396397
}
397398

0 commit comments

Comments
 (0)