Skip to content

Commit 8e0a2b0

Browse files
committed
Add in custom patches
1 parent 9499cd8 commit 8e0a2b0

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import io.gsonfire.GsonFireBuilder;
2424
import io.gsonfire.TypeSelector;
2525

26+
import io.kubernetes.client.gson.V1StatusPreProcessor;
27+
import io.kubernetes.client.openapi.models.V1Status;
2628
import okio.ByteString;
2729

2830
import java.io.IOException;
@@ -34,7 +36,9 @@
3436
import java.time.OffsetDateTime;
3537
import java.time.ZoneId;
3638
import java.time.ZoneOffset;
37-
import java.time.format.DateTimeFormatter;
39+
import java.time.format.DateTimeFormatterBuilder;
40+
import java.time.format.DateTimeParseException;
41+
import java.time.temporal.ChronoField;
3842
import java.util.Date;
3943
import java.util.Locale;
4044
import java.util.Map;
@@ -50,9 +54,19 @@
5054
public class JSON {
5155
private static Gson gson;
5256
private static boolean isLenientOnJson = false;
57+
private static final DateTimeFormatter RFC3339MICRO_FORMATTER =
58+
new DateTimeFormatterBuilder()
59+
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
60+
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))
61+
.optionalStart()
62+
.appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true)
63+
.optionalEnd()
64+
.appendLiteral("Z")
65+
.toFormatter();
66+
5367
private static DateTypeAdapter dateTypeAdapter = new DateTypeAdapter();
5468
private static SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter();
55-
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter();
69+
private static OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER);
5670
private static LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter();
5771
private static ByteArrayAdapter byteArrayAdapter = new ByteArrayAdapter();
5872

@@ -65,7 +79,10 @@ public class JSON {
6579
public static GsonBuilder createGson() {
6680
GsonFireBuilder fireBuilder = new GsonFireBuilder()
6781
;
68-
GsonBuilder builder = fireBuilder.createGsonBuilder();
82+
GsonBuilder builder =
83+
fireBuilder
84+
.registerPreProcessor(V1Status.class, new V1StatusPreProcessor())
85+
.createGsonBuilder();
6986
return builder;
7087
}
7188

@@ -784,11 +801,15 @@ public static class ByteArrayAdapter extends TypeAdapter<byte[]> {
784801

785802
@Override
786803
public void write(JsonWriter out, byte[] value) throws IOException {
804+
boolean oldHtmlSafe = out.isHtmlSafe();
805+
out.setHtmlSafe(false);
806+
787807
if (value == null) {
788808
out.nullValue();
789809
} else {
790810
out.value(ByteString.of(value).base64());
791811
}
812+
out.setHtmlSafe(oldHtmlSafe);
792813
}
793814

794815
@Override
@@ -844,6 +865,12 @@ public OffsetDateTime read(JsonReader in) throws IOException {
844865
if (date.endsWith("+0000")) {
845866
date = date.substring(0, date.length()-5) + "Z";
846867
}
868+
try {
869+
return OffsetDateTime.parse(date, formatter);
870+
} catch (DateTimeParseException e) {
871+
// backward-compatibility for ISO8601 timestamp format
872+
return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
873+
}
847874
return OffsetDateTime.parse(date, formatter);
848875
}
849876
}

kubernetes/src/main/java/io/kubernetes/client/openapi/models/V1ListMeta.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,8 @@ public void write(JsonWriter out, V1ListMeta value) throws IOException {
258258
@Override
259259
public V1ListMeta read(JsonReader in) throws IOException {
260260
JsonElement jsonElement = elementAdapter.read(in);
261-
validateJsonElement(jsonElement);
261+
// Disable validation so delete API can tolerate non-status return object (graceful deletion)
262+
// validateJsonObject(jsonObj);
262263
return thisAdapter.fromJsonTree(jsonElement);
263264
}
264265

kubernetes/src/main/java/io/kubernetes/client/openapi/models/V1Secret.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.google.gson.annotations.SerializedName;
1919
import com.google.gson.stream.JsonReader;
2020
import com.google.gson.stream.JsonWriter;
21+
import io.kubernetes.client.custom.MapUtils;
2122
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2223
import java.io.IOException;
2324
import java.util.Arrays;
@@ -244,7 +245,7 @@ public boolean equals(Object o) {
244245
}
245246
V1Secret v1Secret = (V1Secret) o;
246247
return Objects.equals(this.apiVersion, v1Secret.apiVersion) &&
247-
Objects.equals(this.data, v1Secret.data) &&
248+
MapUtils.equals(this.data, v1Secret.data) &&
248249
Objects.equals(this.immutable, v1Secret.immutable) &&
249250
Objects.equals(this.kind, v1Secret.kind) &&
250251
Objects.equals(this.metadata, v1Secret.metadata) &&

kubernetes/src/main/java/io/kubernetes/client/openapi/models/V1Status.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,8 @@ public void write(JsonWriter out, V1Status value) throws IOException {
378378
@Override
379379
public V1Status read(JsonReader in) throws IOException {
380380
JsonElement jsonElement = elementAdapter.read(in);
381-
validateJsonElement(jsonElement);
381+
// Disable validation so delete API can tolerate non-status return object (graceful deletion)
382+
// validateJsonObject(jsonObj);
382383
return thisAdapter.fromJsonTree(jsonElement);
383384
}
384385

0 commit comments

Comments
 (0)