Skip to content

Commit 2986b2e

Browse files
Applied patches under scripts/patches/*.diff
Signed-off-by: Kubernetes Publisher <[email protected]>
1 parent 04f4f49 commit 2986b2e

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

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

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

27+
import io.kubernetes.client.gson.V1StatusPreProcessor;
28+
import io.kubernetes.client.openapi.models.V1Status;
2729
import okio.ByteString;
2830

2931
import java.io.IOException;
@@ -35,6 +37,9 @@
3537
import java.time.LocalDate;
3638
import java.time.OffsetDateTime;
3739
import java.time.format.DateTimeFormatter;
40+
import java.time.format.DateTimeFormatterBuilder;
41+
import java.time.format.DateTimeParseException;
42+
import java.time.temporal.ChronoField;
3843
import java.util.Date;
3944
import java.util.Locale;
4045
import java.util.Map;
@@ -49,17 +54,30 @@
4954
public class JSON {
5055
private static Gson gson;
5156
private static boolean isLenientOnJson = false;
57+
58+
private static final DateTimeFormatter RFC3339MICRO_FORMATTER =
59+
new DateTimeFormatterBuilder()
60+
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
61+
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))
62+
.optionalStart()
63+
.appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true)
64+
.optionalEnd()
65+
.appendLiteral("Z")
66+
.toFormatter();
5267
private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter();
5368
private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter();
54-
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter();
69+
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER);
5570
private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter();
5671
private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter();
5772

5873
@SuppressWarnings("unchecked")
5974
public static GsonBuilder createGson() {
6075
GsonFireBuilder fireBuilder = new GsonFireBuilder()
6176
;
62-
GsonBuilder builder = fireBuilder.createGsonBuilder();
77+
GsonBuilder builder =
78+
fireBuilder
79+
.registerPreProcessor(V1Status.class, new V1StatusPreProcessor())
80+
.createGsonBuilder();
6381
return builder;
6482
}
6583

@@ -778,11 +796,14 @@ public static class ByteArrayAdapter extends TypeAdapter<byte[]> {
778796

779797
@Override
780798
public void write(JsonWriter out, byte[] value) throws IOException {
799+
boolean oldHtmlSafe = out.isHtmlSafe();
800+
out.setHtmlSafe(false);
781801
if (value == null) {
782802
out.nullValue();
783803
} else {
784804
out.value(ByteString.of(value).base64());
785805
}
806+
out.setHtmlSafe(oldHtmlSafe);
786807
}
787808

788809
@Override
@@ -838,7 +859,12 @@ public OffsetDateTime read(JsonReader in) throws IOException {
838859
if (date.endsWith("+0000")) {
839860
date = date.substring(0, date.length()-5) + "Z";
840861
}
841-
return OffsetDateTime.parse(date, formatter);
862+
try {
863+
return OffsetDateTime.parse(date, formatter);
864+
} catch (DateTimeParseException e) {
865+
// backward-compatibility for ISO8601 timestamp format
866+
return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
867+
}
842868
}
843869
}
844870
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,9 @@ public void write(JsonWriter out, V1ListMeta value) throws IOException {
267267
@Override
268268
public V1ListMeta read(JsonReader in) throws IOException {
269269
JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
270-
validateJsonObject(jsonObj);
270+
271+
// Disable validation so delete API can tolerate non-status return object (graceful deletion)
272+
// validateJsonObject(jsonObj);
271273
return thisAdapter.fromJsonTree(jsonObj);
272274
}
273275

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 java.io.IOException;
2526
import java.util.HashMap;
@@ -260,7 +261,7 @@ public boolean equals(Object o) {
260261
}
261262
V1Secret v1Secret = (V1Secret) o;
262263
return Objects.equals(this.apiVersion, v1Secret.apiVersion) &&
263-
Objects.equals(this.data, v1Secret.data) &&
264+
MapUtils.equals(this.data, v1Secret.data) &&
264265
Objects.equals(this.immutable, v1Secret.immutable) &&
265266
Objects.equals(this.kind, v1Secret.kind) &&
266267
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
@@ -395,7 +395,8 @@ public void write(JsonWriter out, V1Status value) throws IOException {
395395
@Override
396396
public V1Status read(JsonReader in) throws IOException {
397397
JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
398-
validateJsonObject(jsonObj);
398+
// Disable validation so delete API can tolerate non-status return object (graceful deletion)
399+
// validateJsonObject(jsonObj);
399400
return thisAdapter.fromJsonTree(jsonObj);
400401
}
401402

0 commit comments

Comments
 (0)