ServerValues.resolveDeferredValue has incorrect cast
还没有人认领这个 Issue。
评估
调研方向
从 ServerValues.java:44 中的 ServerValues.resolveDeferredValue 开始,经过 ServerValues.resolveDeferredValueSnapshot 和 Repo.setValue 跟踪其调用方。使用文档中所述的 map 形式的 .sv 增量值,通过 DatabaseReference.setValue 重现该失败。当此输入不再因报告的 ClassCastException 而失败,并且已根据 issue 的复现步骤检查行为时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
- Operating System version: Gentoo Linux
- Firebase SDK version: 9.3.0
- Library version: 9.3.0 (but the bug goes back to at least 8.1.0)
- Firebase Product: RTDB
As ServerValue.increment is still not supported by this SDK 4 years after its introduction, I tried implementing it manually. This triggers a ClassCastException inside the SDK due to a bad assumption that the value of the .sv key is always a String.
Steps to reproduce:
- Create the data structure for ServerValue.increment as described in documentation (such as the REST documentation):
{
".sv": {
"increment": delta
}
}
- Call
setValueusing this data structure.
Relevant Code:
var node = databaseNode();
node.setValue(Map.of(".sv", Map.of("increment", delta)), callback);
Error:
2024-06-21T19:58:12,008Z [firebase-database-worker] ERROR c.g.firebase.database.core.RunLoop - Uncaught exception in Firebase Database runloop (9.3.0). Please report to firebase-database-client@google.com
java.lang.ClassCastException: class java.util.HashMap cannot be cast to class java.lang.String (java.util.HashMap and java.lang.String are in module java.base of loader 'bootstrap')
at com.google.firebase.database.core.ServerValues.resolveDeferredValue(ServerValues.java:44)
at com.google.firebase.database.core.ServerValues.resolveDeferredValueSnapshot(ServerValues.java:80)
at com.google.firebase.database.core.Repo.setValue(Repo.java:376)
at com.google.firebase.database.DatabaseReference$1.run(DatabaseReference.java:305)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
- 主要语言
- Java
- 星标
- 620
- 派生
- 305
- 平均合并
- 4 天 9 小时
- 30 天内合并 PR
- 4
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
firebase/firebase-admin-java 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 48/100
firebase/firebase-admin-java#1231 ·
-
api: core
firebase/firebase-admin-java#1198 · 3 条评论 · 已指派 1 人 ·
-
api: remoteconfig
firebase/firebase-admin-java#1196 · 1 条评论 · 已指派 2 人 ·
-
难度 3/5 1-2 天 新手友好度 45/100
firebase/firebase-admin-java#1192 · 3 条评论 ·
-
needs-triage type: feature request
难度 3/5 1-2 天 新手友好度 45/100
firebase/firebase-admin-java#1149 · 1 条评论 ·
查看 firebase/firebase-admin-java 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
elastic/gradle-plugins#157 ·
-
enhancement Tools
难度 1/5 1 小时以内 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 70/100
apache/rocketmq-dashboard#5008 ·
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
-
DETECT_PARAMETER_NAMES=false silently disables @ConstructorProperties-based Creator detection too 未关闭
难度 2/5 1-3 小时 新手友好度 70/100
FasterXML/jackson-databind#6229 ·