NULL_BOOLEAN is not compatible with Value Objects
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Beginnen Sie in google-http-client/src/main/java/com/google/api/client/util/Data.java, insbesondere bei Data.isNull und NULL_BOOLEAN, und reproduzieren Sie die im Issue gezeigten Assertions mit der Value-Class-Preview von JDK 28. Vergleichen Sie die beiden vorgeschlagenen Ansätze; abgeschlossen ist die Aufgabe, wenn gültige Boolean-, Integer- und Long-Werte von Data.isNull nicht mehr true zurückgeben und die Nachverfolgung von fehlenden und explizit null gesetzten Werten weiterhin korrekt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
google-http-client uses sentinel objects like NULL_BOOLEAN to distinguish between fields being absent and explicitly set to null:
Those sentinel fields are using deprecated constructors like new Boolean(true) (the deprecation warnings were suppressed in https://github.com/googleapis/google-http-java-client/pull/1215).
JDK 28 introduces a preview of the value classes feature (https://openjdk.org/jeps/401). With JEP 401 boxed primitive classes like Boolean and Integer become value classes that don't have identity, so instance are compared by value:
new Boolean(true) == Boolean.TRUEwill evaluate totruenew Integer(0) == Integer.valueOf(0)will evaluate totrue
This causes google-http-client's Data.isNull(object) to return true for legitimate values.
With JEP 401, assertions like these will start to fail:
assertThat(Data.isNull(true)).isFalse();
assertThat(Data.isNull(0)).isFalse();
assertThat(Data.isNull(0L)).isFalse();
Possible fixes:
- Introduce a new API like
JsonNullable<Boolean>to replace the use ofNULL_BOOLEAN - Maintain a set of explicitly set fields, that could be queried instead of relying on sentinel values.
- Vorherrschende Sprache
- Java
- Sterne
- 1.4k
- Forks
- 476
- Ø Merge
- 10 Std. 47 Min.
- Gemergte PRs (30 T.)
- 3
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus googleapis/google-http-java-client
-
Core: Validate header names and values to prevent CRLF injectionEvtl. vergeben @insaf021 hat das vor 106 Tagen übernommen. Offenpriority: p3
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
Core: XmlPullParser processes external DTD entities (XXE) — disable FEATURE_PROCESS_DOCDECL in Xml#createParser()Evtl. vergeben @insaf021 hat das vor 106 Tagen übernommen. Offenpriority: p3
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
-
Core: LowLevelHttpResponse not disconnected when HttpResponse construction throws RuntimeExceptionEvtl. vergeben @insaf021 hat das vor 106 Tagen übernommen. Offenpriority: p3
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
-
type: cleanup
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
-
org.apache.http.conn.ssl.SSLSocketFactory is deprecatedEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offenpriority: p2 type: cleanup
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Alle Issues in googleapis/google-http-java-client
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 80/100
finos/fluxnova-bpm-platform#387 ·
Maintainer antworten meist innerhalb von 4 Tagen
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
-
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
cpp-best-practices/project_validator#251 ·
Maintainer antworten meist innerhalb von 1 Tag
-
backend enhancement
Schwierigkeit 2/5 Ein halber Tag Anfängerfreundlichkeit 70/100
damodharg6/payledger#16 ·
-
[Bug]: An initiative list with no current entry logs an error on every changeEvtl. vergeben @dwizard0 hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag