Skip to content

Commit f33cf28

Browse files
committed
manually apply JSON patch
Signed-off-by: Min Jin <[email protected]>
1 parent 754bdfe commit f33cf28

File tree

2 files changed

+45
-5
lines changed

2 files changed

+45
-5
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
@@ -23,6 +23,9 @@
2323
import io.gsonfire.GsonFireBuilder;
2424
import io.gsonfire.TypeSelector;
2525

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

2831
import java.io.IOException;
@@ -35,6 +38,9 @@
3538
import java.time.ZoneId;
3639
import java.time.ZoneOffset;
3740
import java.time.format.DateTimeFormatter;
41+
import java.time.format.DateTimeFormatterBuilder;
42+
import java.time.format.DateTimeParseException;
43+
import java.time.temporal.ChronoField;
3844
import java.util.Date;
3945
import java.util.Locale;
4046
import java.util.Map;
@@ -50,9 +56,20 @@
5056
public class JSON {
5157
private static Gson gson;
5258
private static boolean isLenientOnJson = false;
59+
60+
private static final DateTimeFormatter RFC3339MICRO_FORMATTER =
61+
new DateTimeFormatterBuilder()
62+
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
63+
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))
64+
.optionalStart()
65+
.appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true)
66+
.optionalEnd()
67+
.appendLiteral("Z")
68+
.toFormatter();
69+
5370
private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter();
5471
private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter();
55-
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter();
72+
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER);
5673
private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter();
5774
private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter();
5875

@@ -65,8 +82,11 @@ public class JSON {
6582
public static GsonBuilder createGson() {
6683
GsonFireBuilder fireBuilder = new GsonFireBuilder()
6784
;
68-
GsonBuilder builder = fireBuilder.createGsonBuilder();
69-
return builder;
85+
GsonBuilder builder =
86+
fireBuilder
87+
.registerPreProcessor(V1Status.class, new V1StatusPreProcessor())
88+
.createGsonBuilder();
89+
return builder.setExclusionStrategies(new V1MetadataExclusionStrategy());
7090
}
7191

7292
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {
@@ -793,11 +813,14 @@ public static class ByteArrayAdapter extends TypeAdapter<byte[]> {
793813

794814
@Override
795815
public void write(JsonWriter out, byte[] value) throws IOException {
816+
boolean oldHtmlSafe = out.isHtmlSafe();
817+
out.setHtmlSafe(false);
796818
if (value == null) {
797819
out.nullValue();
798820
} else {
799821
out.value(ByteString.of(value).base64());
800822
}
823+
out.setHtmlSafe(oldHtmlSafe);
801824
}
802825

803826
@Override
@@ -853,7 +876,12 @@ public OffsetDateTime read(JsonReader in) throws IOException {
853876
if (date.endsWith("+0000")) {
854877
date = date.substring(0, date.length()-5) + "Z";
855878
}
856-
return OffsetDateTime.parse(date, formatter);
879+
try {
880+
return OffsetDateTime.parse(date, formatter);
881+
} catch (DateTimeParseException e) {
882+
// backward-compatibility for ISO8601 timestamp format
883+
return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
884+
}
857885
}
858886
}
859887
}

scripts/patches/json.diff

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1+
From eeb5069c974d3146495f8a9dc52653f029d3cc2d Mon Sep 17 00:00:00 2001
2+
From: Min Jin <[email protected]>
3+
Date: Tue, 4 Feb 2025 11:59:25 -0800
4+
Subject: [PATCH] manually apply JSON patch
5+
6+
---
7+
.../io/kubernetes/client/openapi/JSON.java | 36 ++++++++++++++++---
8+
1 file changed, 32 insertions(+), 4 deletions(-)
9+
110
diff --git a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java
2-
index 870629244..d7d2d5579 100644
11+
index dda3ec708..fe902b293 100644
312
--- a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java
413
+++ b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java
514
@@ -23,6 +23,9 @@ import com.google.gson.JsonElement;
@@ -87,3 +96,6 @@ index 870629244..d7d2d5579 100644
8796
}
8897
}
8998
}
99+
--
100+
2.40.0
101+

0 commit comments

Comments
 (0)