FireBase 消息无法在 OSGI 包中加载 admin_sdk.properties
Posted
技术标签:
【中文标题】FireBase 消息无法在 OSGI 包中加载 admin_sdk.properties【英文标题】:FireBase Messaging fails to load admin_sdk.properties in OSGI bundle 【发布时间】:2021-06-03 03:09:49 【问题描述】:我正在使用 Firebase-admin:7.1.0 通过我的服务器 (WSO2IS) 发送推送通知。 Java版本采用8.0.275。
我已按照文档https://firebase.google.com/docs/admin/setup#java 进行设置。 JSON 文件存在,环境变量被导出,FireBase 被初始化使用:
FirebaseOptions options =
FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.build();
FirebaseApp.initializeApp(options);
当尝试使用以下方式发送推送通知时:
FirebaseMessaging.getInstance().send(message);
我得到以下异常:
java.lang.NullPointerException: Failed to load: admin_sdk.properties
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:910)
at com.google.firebase.internal.SdkUtils.loadSdkVersion(SdkUtils.java:46)
at com.google.firebase.internal.SdkUtils.<clinit>(SdkUtils.java:31)
at com.google.firebase.messaging.FirebaseMessagingClientImpl.<clinit>(FirebaseMessagingClientImpl.java:65)
at com.google.firebase.messaging.FirebaseMessaging$6.get(FirebaseMessaging.java:414)
at com.google.firebase.messaging.FirebaseMessaging$6.get(FirebaseMessaging.java:411)
at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
at com.google.firebase.messaging.FirebaseMessaging.getMessagingClient(FirebaseMessaging.java:296)
at com.google.firebase.messaging.FirebaseMessaging.sendOp(FirebaseMessaging.java:131)
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:102)
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:86)
找不到有关此故障的任何信息。有什么想法吗?
编辑: 首先,这是使用 maven 的 apache felix 插件集成到 OSGI 包中的。很可能,pom.xml 文件的配置是罪魁祸首..
关于 pom.xml 的一些信息如下:
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>7.1.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
...
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.2.0</version>
<extensions>true</extensions>
<configuration>
<obrRepository>NONE</obrRepository>
<instructions>
<Bundle-SymbolicName>$project.artifactId</Bundle-SymbolicName>
<Bundle-Name>$project.artifactId</Bundle-Name>
<Axis2Module>$project.artifactId-$project.version</Axis2Module>
<Import-Package>
com.google.firebase.*,
com.google.api.*,
com.google.auth.*,
*;resolution:=optional
</Import-Package>
<Export-Package>
com.google.firebase.*,
com.google.api.*,
com.google.auth.*;
</Export-Package>
</instructions>
</configuration>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
</plugin>
编辑#2:
firebase 的依赖 jar 是 firebase-admin-7.1.0.jar,其中包含包 com.google.firebase、META-INF 文件夹和 admin_sdk.properties 文件。当然,当我导出包时 com.google.whatever 属性文件没有随包一起导出,这就是异常背后的原因。
那么,问题是,我如何确保属性文件包含在包中?
【问题讨论】:
【参考方案1】:在这种情况下,您始终可以将有问题的整个 jar 添加到您的 OSGI 包中。
Embed-Dependency
标签可以用在felix的bundle的配置标签中。
最终形式:
<bundle>
<configuration>
<import / export etc>...
<Embed-Dependency>
firebase-admin;scope=compile|runtime
</Embed-Dependency>
</configuration>
</bundle>
【讨论】:
以上是关于FireBase 消息无法在 OSGI 包中加载 admin_sdk.properties的主要内容,如果未能解决你的问题,请参考以下文章