Skip to content

Commit 5dac2ce

Browse files
committed
Add an exclusion strategy for V1ObjectMeta.managedFields.
1 parent c2d12cb commit 5dac2ce

File tree

3 files changed

+111
-9
lines changed

3 files changed

+111
-9
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
Copyright 2024 The Kubernetes Authors.
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
http://www.apache.org/licenses/LICENSE-2.0
7+
Unless required by applicable law or agreed to in writing, software
8+
distributed under the License is distributed on an "AS IS" BASIS,
9+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
See the License for the specific language governing permissions and
11+
limitations under the License.
12+
*/
13+
package io.kubernetes.client.gson;
14+
15+
import com.google.gson.ExclusionStrategy;
16+
import com.google.gson.FieldAttributes;
17+
import io.kubernetes.client.openapi.models.V1ObjectMeta;
18+
19+
public class V1MetadataExclusionStrategy implements com.google.gson.ExclusionStrategy {
20+
public boolean shouldSkipField(FieldAttributes f) {
21+
// Don't serialize the 'managedFields' field.
22+
return (f.getDeclaringClass().equals(V1ObjectMeta.class) && f.getName().equalsIgnoreCase("managedFields"));
23+
}
24+
25+
public boolean shouldSkipClass(Class<?> clazz) {
26+
return false;
27+
}
28+
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.google.gson.JsonElement;
2323
import io.gsonfire.GsonFireBuilder;
2424
import io.gsonfire.TypeSelector;
25-
25+
import io.kubernetes.client.gson.V1MetadataExclusionStrategy;
2626
import io.kubernetes.client.gson.V1StatusPreProcessor;
2727
import io.kubernetes.client.openapi.models.V1Status;
2828
import okio.ByteString;
@@ -78,13 +78,12 @@ public class JSON {
7878

7979
@SuppressWarnings("unchecked")
8080
public static GsonBuilder createGson() {
81-
GsonFireBuilder fireBuilder = new GsonFireBuilder()
82-
;
81+
GsonFireBuilder fireBuilder = new GsonFireBuilder();
8382
GsonBuilder builder =
8483
fireBuilder
8584
.registerPreProcessor(V1Status.class, new V1StatusPreProcessor())
8685
.createGsonBuilder();
87-
return builder;
86+
return builder.setExclusionStrategies(new V1MetadataExclusionStrategy());
8887
}
8988

9089
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {

scripts/patches/json.diff

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,87 @@
11
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 42b65fbb3..0aade725e 100644
2+
index 4406c2199..f56413a25 100644
33
--- a/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java
44
+++ b/kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java
5-
@@ -872,7 +872,6 @@ public class JSON {
6-
// backward-compatibility for ISO8601 timestamp format
7-
return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
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+
+ return builder.setExclusionStrategies(new V1MetadataExclusionStrategy());
56+
}
57+
58+
private static String getDiscriminatorValue(JsonElement readElement, String discriminatorField) {
59+
@@ -721,11 +739,14 @@ public class JSON {
60+
61+
@Override
62+
public void write(JsonWriter out, byte[] value) throws IOException {
63+
+ boolean oldHtmlSafe = out.isHtmlSafe();
64+
+ out.setHtmlSafe(false);
65+
if (value == null) {
66+
out.nullValue();
67+
} else {
68+
out.value(ByteString.of(value).base64());
69+
}
70+
+ out.setHtmlSafe(oldHtmlSafe);
71+
}
72+
73+
@Override
74+
@@ -781,7 +802,12 @@ public class JSON {
75+
if (date.endsWith("+0000")) {
76+
date = date.substring(0, date.length()-5) + "Z";
877
}
978
- return OffsetDateTime.parse(date, formatter);
79+
+ try {
80+
+ return OffsetDateTime.parse(date, formatter);
81+
+ } catch (DateTimeParseException e) {
82+
+ // backward-compatibility for ISO8601 timestamp format
83+
+ return OffsetDateTime.parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
84+
+ }
1085
}
1186
}
12-
}
87+
}

0 commit comments

Comments
 (0)