From 077ed8325e4e0975fb5bbae2676d7d4907b61586 Mon Sep 17 00:00:00 2001 From: Brendan Burns <5751682+brendandburns@users.noreply.github.com> Date: Mon, 9 Sep 2024 21:58:25 +0000 Subject: [PATCH] Fixes --- examples/pom.xml | 4 +- .../io/kubernetes/client/openapi/JSON.java | 2 +- scripts/patches/json.diff | 86 ++----------------- .../java/io/kubernetes/client/util/Yaml.java | 16 ++++ 4 files changed, 26 insertions(+), 82 deletions(-) diff --git a/examples/pom.xml b/examples/pom.xml index 83e4ac3273..df872d361d 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -17,10 +17,12 @@ client-java-examples-parent - examples-release-17 + examples-release-latest diff --git a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java index cff284332a..0aade725e9 100644 --- a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java +++ b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java @@ -36,6 +36,7 @@ import java.time.OffsetDateTime; import java.time.ZoneId; import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.format.DateTimeParseException; import java.time.temporal.ChronoField; @@ -871,7 +872,6 @@ public OffsetDateTime read(JsonReader in) throws IOException { // backward-compatibility for ISO8601 timestamp format return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME); } - return OffsetDateTime.parse(date, formatter); } } } diff --git a/scripts/patches/json.diff b/scripts/patches/json.diff index 76c459e370..9f67aad246 100644 --- a/scripts/patches/json.diff +++ b/scripts/patches/json.diff @@ -1,86 +1,12 @@ diff --git a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java -index 8d0f4c47d..cff284332 100644 +index 42b65fbb3..0aade725e 100644 --- a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java +++ b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java -@@ -23,6 +23,8 @@ import com.google.gson.JsonElement; - import io.gsonfire.GsonFireBuilder; - import io.gsonfire.TypeSelector; - -+import io.kubernetes.client.gson.V1StatusPreProcessor; -+import io.kubernetes.client.openapi.models.V1Status; - import okio.ByteString; - - import java.io.IOException; -@@ -34,7 +36,9 @@ import java.time.LocalDate; - import java.time.OffsetDateTime; - import java.time.ZoneId; - import java.time.ZoneOffset; --import java.time.format.DateTimeFormatter; -+import java.time.format.DateTimeFormatterBuilder; -+import java.time.format.DateTimeParseException; -+import java.time.temporal.ChronoField; - import java.util.Date; - import java.util.Locale; - import java.util.Map; -@@ -50,9 +54,19 @@ import java.util.TimeZone; - public class JSON { - private static Gson gson; - private static boolean isLenientOnJson = false; -+ private static final DateTimeFormatter RFC3339MICRO_FORMATTER = -+ new DateTimeFormatterBuilder() -+ .parseDefaulting(ChronoField.OFFSET_SECONDS, 0) -+ .append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")) -+ .optionalStart() -+ .appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true) -+ .optionalEnd() -+ .appendLiteral("Z") -+ .toFormatter(); -+ - private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter(); - private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter(); -- private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(); -+ private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER); - private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter(); - private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter(); - -@@ -65,7 +79,10 @@ public class JSON { - public static GsonBuilder createGson() { - GsonFireBuilder fireBuilder = new GsonFireBuilder() - ; -- GsonBuilder builder = fireBuilder.createGsonBuilder(); -+ GsonBuilder builder = -+ fireBuilder -+ .registerPreProcessor(V1Status.class, new V1StatusPreProcessor()) -+ .createGsonBuilder(); - return builder; - } - -@@ -784,11 +801,15 @@ public class JSON { - - @Override - public void write(JsonWriter out, byte[] value) throws IOException { -+ boolean oldHtmlSafe = out.isHtmlSafe(); -+ out.setHtmlSafe(false); -+ - if (value == null) { - out.nullValue(); - } else { - out.value(ByteString.of(value).base64()); - } -+ out.setHtmlSafe(oldHtmlSafe); - } - - @Override -@@ -844,6 +865,12 @@ public class JSON { - if (date.endsWith("+0000")) { - date = date.substring(0, date.length()-5) + "Z"; +@@ -872,7 +872,6 @@ public class JSON { + // backward-compatibility for ISO8601 timestamp format + return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME); } -+ try { -+ return OffsetDateTime.parse(date, formatter); -+ } catch (DateTimeParseException e) { -+ // backward-compatibility for ISO8601 timestamp format -+ return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME); -+ } - return OffsetDateTime.parse(date, formatter); +- return OffsetDateTime.parse(date, formatter); } } + } diff --git a/util/src/main/java/io/kubernetes/client/util/Yaml.java b/util/src/main/java/io/kubernetes/client/util/Yaml.java index 242cf857d5..adaba8955a 100644 --- a/util/src/main/java/io/kubernetes/client/util/Yaml.java +++ b/util/src/main/java/io/kubernetes/client/util/Yaml.java @@ -39,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.DumperOptions.FlowStyle; import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.constructor.BaseConstructor; @@ -275,6 +276,18 @@ public CustomRepresenter() { this.representers.put(byte[].class, new RepresentByteArray()); this.representers.put(Quantity.class, new RepresentQuantity()); this.representers.put(OffsetDateTime.class, new RepresentDateTime()); + /* + this.representers.put(ArrayList.class, new Represent() { + @Override + public Node representData(Object data) { + ArrayList arr = (ArrayList) data; + if (arr.size() == 0) { + // return representScalar(Tag.NULL, "null"); + return null; + } + return representSequence(Tag.SEQ, arr, FlowStyle.AUTO); + } + });*/ } private class RepresentDateTime implements Represent { @@ -366,6 +379,9 @@ protected NodeTuple representJavaBeanProperty( if (propertyValue == null) { return null; } + if (propertyValue instanceof ArrayList && ((ArrayList)propertyValue).size() == 0) { + return null; + } return super.representJavaBeanProperty(javaBean, property, propertyValue, customTag); } }