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的主要内容,如果未能解决你的问题,请参考以下文章

mvtnorm无法在MS r-client版本3.4.3中加载

无法在捆绑包中加载 NIB

无法在捆绑包中加载 NIB

无法在捆绑包中加载 NIB。可可豆项目

设置可重用标头时出错:'无法在包中加载 NIB

无法在 Karaf 中加载捆绑包