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