firebase / firebase/firebase-admin-java

Error when use Firebase Admin SDK with GraalVM Native Image

未關閉
#852 6 則留言 10 個 reaction 已指派 0 人 在 GitHub 檢視
api: auth
主要語言
Java
星號
620
分支
305
平均合併
3 小時 23 分鐘
30 天內合併 PR
1

描述

* Operating System version: macOS 13.5
* Firebase SDK version: 9.2.0
* Library version: _____
* Firebase Product: auth

Hello,
I'm getting the error below when using Firebase Admin SDK with GraalVM native image.
When I run it with JVM it works perfectly.

Reference link: https://firebase.google.com/docs/auth/admin/manage-users#update_a_user

My code Example:

if (FirebaseApp.getApps().isEmpty()) new FirebaseUtil().init(FIREBASE_AUTH_KEY);

// Update User Firebase
UpdateRequest request = new UpdateRequest(firebaseUid)
.setPassword(user.getNewPassword());

FirebaseAuth.getInstance(FirebaseApp.getInstance()).updateUser(request);

Error:
java.lang.RuntimeException: java.lang.IllegalArgumentException:
at br.com.healthmode.serviceapilogin.service.LoginService.saveNewPassword(LoginService.java:86)
at br.com.healthmode.serviceapilogin.controller.LoginController.saveNewPassword(LoginController.java:60)
at br.com.healthmode.serviceapilogin.controller.$LoginController$Definition$Exec.dispatch(Unknown Source)
at io.micronaut.context.AbstractExecutableMethodsDefinition$DispatchedExecutableMethod.invoke(AbstractExecutableMethodsDefinition.java:371)
at io.micronaut.context.DefaultBeanContext$4.invoke(DefaultBeanContext.java:594)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:303)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:111)
at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:103)
at io.micronaut.http.server.RouteExecutor.lambda$executeRoute$14(RouteExecutor.java:659)
at reactor.core.publisher.FluxDeferContextual.subscribe(FluxDeferContextual.java:49)
at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:62)
at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194)
at io.micronaut.reactive.reactor.instrument.ReactorInstrumentation.lambda$init$0(ReactorInstrumentation.java:62)
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
at io.micronaut.scheduling.instrument.InvocationInstrumenterWrappedCallable.call(InvocationInstrumenterWrappedCallable.java:53)
at java.base@17.0.6/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base@17.0.6/java.lang.Thread.run(Thread.java:833)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)
Caused by: java.lang.IllegalArgumentException:
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:900)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:360)
at com.google.api.client.json.JsonParser.parse(JsonParser.java:318)
at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:162)
at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:144)
at com.google.firebase.internal.ErrorHandlingHttpClient.parse(ErrorHandlingHttpClient.java:120)
at com.google.firebase.auth.internal.AuthHttpClient.parse(AuthHttpClient.java:79)
at com.google.firebase.auth.FirebaseUserManager.lookupUserAccount(FirebaseUserManager.java:239)
at com.google.firebase.auth.FirebaseUserManager.getUserById(FirebaseUserManager.java:121)
at com.google.firebase.auth.AbstractFirebaseAuth$12.execute(AbstractFirebaseAuth.java:763)
at com.google.firebase.auth.AbstractFirebaseAuth$12.execute(AbstractFirebaseAuth.java:759)
at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36)
at com.google.firebase.auth.AbstractFirebaseAuth.updateUser(AbstractFirebaseAuth.java:740)
at br.com.healthmode.serviceapilogin.service.LoginService.saveNewPassword(LoginService.java:80)
... 21 more
Caused by: java.lang.IllegalArgumentException: unable to create new instance of class com.google.firebase.auth.internal.GetAccountInfoResponse because it has no accessible default constructor
at com.google.api.client.util.Types.handleExceptionForNewInstance(Types.java:162)
at com.google.api.client.util.Types.newInstance(Types.java:117)
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:768)
... 34 more
Caused by: java.lang.InstantiationException: com.google.firebase.auth.internal.GetAccountInfoResponse
at java.base@17.0.6/java.lang.Class.newInstance(DynamicHub.java:639)
at com.google.api.client.util.Types.newInstance(Types.java:113)
... 35 more
Caused by: java.lang.NoSuchMethodException: com.google.firebase.auth.internal.GetAccountInfoResponse.()
at java.base@17.0.6/java.lang.Class.getConstructor0(DynamicHub.java:3585)
at java.base@17.0.6/java.lang.Class.newInstance(DynamicHub.java:626)

Is there any incompatibility between Firebase Admin SDK and Native Image?

貢獻指南

開啟貢獻指南

研究方向

從提供的 FirebaseAuth.updateUser 路徑以及 FirebaseUserManager.lookupUserAccount、JsonParser 和 GetAccountInfoResponse 的堆疊追蹤項目開始。在 GraalVM Native Image 下重現 updateUser 呼叫,並將其與正常運作的 JVM 執行進行比較;完成的標準是確定 SDK 是否相容,並記錄或識別所需的 native-image 支援。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
firebase, java
領域
authentication, backend
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
需要釐清
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。