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);
}
}