|
| 1 | +From eeb5069c974d3146495f8a9dc52653f029d3cc2d Mon Sep 17 00:00:00 2001 |
| 2 | + |
| 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 | + |
| 10 | +diff --git a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java |
| 11 | +index dda3ec708..fe902b293 100644 |
| 12 | +--- a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java |
| 13 | ++++ b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java |
| 14 | +@@ -23,6 +23,9 @@ import com.google.gson.JsonElement; |
| 15 | + import io.gsonfire.GsonFireBuilder; |
| 16 | + import io.gsonfire.TypeSelector; |
| 17 | + |
| 18 | ++import io.kubernetes.client.gson.V1MetadataExclusionStrategy; |
| 19 | ++import io.kubernetes.client.gson.V1StatusPreProcessor; |
| 20 | ++import io.kubernetes.client.openapi.models.V1Status; |
| 21 | + import okio.ByteString; |
| 22 | + |
| 23 | + import java.io.IOException; |
| 24 | +@@ -35,6 +38,9 @@ import java.time.OffsetDateTime; |
| 25 | + import java.time.ZoneId; |
| 26 | + import java.time.ZoneOffset; |
| 27 | + import java.time.format.DateTimeFormatter; |
| 28 | ++import java.time.format.DateTimeFormatterBuilder; |
| 29 | ++import java.time.format.DateTimeParseException; |
| 30 | ++import java.time.temporal.ChronoField; |
| 31 | + import java.util.Date; |
| 32 | + import java.util.Locale; |
| 33 | + import java.util.Map; |
| 34 | +@@ -50,9 +56,20 @@ import java.util.TimeZone; |
| 35 | + public class JSON { |
| 36 | + private static Gson gson; |
| 37 | + private static boolean isLenientOnJson = false; |
| 38 | ++ |
| 39 | ++ private static final DateTimeFormatter RFC3339MICRO_FORMATTER = |
| 40 | ++ new DateTimeFormatterBuilder() |
| 41 | ++ .parseDefaulting(ChronoField.OFFSET_SECONDS, 0) |
| 42 | ++ .append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")) |
| 43 | ++ .optionalStart() |
| 44 | ++ .appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true) |
| 45 | ++ .optionalEnd() |
| 46 | ++ .appendLiteral("Z") |
| 47 | ++ .toFormatter(); |
| 48 | ++ |
| 49 | + private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter(); |
| 50 | + private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter(); |
| 51 | +- private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(); |
| 52 | ++ private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER); |
| 53 | + private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter(); |
| 54 | + private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter(); |
| 55 | + |
| 56 | +@@ -65,8 +82,11 @@ public class JSON { |
| 57 | + public static GsonBuilder createGson() { |
| 58 | + GsonFireBuilder fireBuilder = new GsonFireBuilder() |
| 59 | + ; |
| 60 | +- GsonBuilder builder = fireBuilder.createGsonBuilder(); |
| 61 | +- return builder; |
| 62 | ++ GsonBuilder builder = |
| 63 | ++ fireBuilder |
| 64 | ++ .registerPreProcessor(V1Status.class, new V1StatusPreProcessor()) |
| 65 | ++ .createGsonBuilder(); |
| 66 | ++ return builder.setExclusionStrategies(new V1MetadataExclusionStrategy()); |
| 67 | + } |
| 68 | + |
| 69 | + private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) { |
| 70 | +@@ -793,11 +813,14 @@ public class JSON { |
| 71 | + |
| 72 | + @Override |
| 73 | + public void write(JsonWriter out, byte[] value) throws IOException { |
| 74 | ++ boolean oldHtmlSafe = out.isHtmlSafe(); |
| 75 | ++ out.setHtmlSafe(false); |
| 76 | + if (value == null) { |
| 77 | + out.nullValue(); |
| 78 | + } else { |
| 79 | + out.value(ByteString.of(value).base64()); |
| 80 | + } |
| 81 | ++ out.setHtmlSafe(oldHtmlSafe); |
| 82 | + } |
| 83 | + |
| 84 | + @Override |
| 85 | +@@ -853,7 +876,12 @@ public class JSON { |
| 86 | + if (date.endsWith("+0000")) { |
| 87 | + date = date.substring(0, date.length()-5) + "Z"; |
| 88 | + } |
| 89 | +- return OffsetDateTime.parse(date, formatter); |
| 90 | ++ try { |
| 91 | ++ return OffsetDateTime.parse(date, formatter); |
| 92 | ++ } catch (DateTimeParseException e) { |
| 93 | ++ // backward-compatibility for ISO8601 timestamp format |
| 94 | ++ return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME); |
| 95 | ++ } |
| 96 | + } |
| 97 | + } |
| 98 | + } |
| 99 | +-- |
| 100 | +2.40.0 |
| 101 | + |
0 commit comments