【问题标题】:Using com.sun.crypto.provider.SunJCE in OSGi Bundle在 OSGi Bundle 中使用 com.sun.crypto.provider.SunJCE
【发布时间】:2012-04-17 18:38:49
【问题描述】:

我正在尝试在 OSGi Bundle 中使用 com.sun.crypto.provider.SunJCE(用于 HMAC)。

我正在使用带有这些配置的 maven-bundle-plugin:

<Embed-Dependency>*;scope=runtime;inline=false</Embed-Dependency>
<Import-Package>*;resolution:=optional</Import-Package>

当我执行我的包时,我得到了这个错误:

Caused by: java.lang.ClassNotFoundException: com.sun.crypto.provider.SunJCE

如何获取我的 OSGi 包中的代码以访问 com.sun.crypto.provider?

【问题讨论】:

    标签: maven dependencies osgi bundle


    【解决方案1】:

    为什么需要 com.sun.crypto 类?一般来说,您可以通过 java.* API 访问加密函数吗?例如:

     KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
     SecretKey key = keyGen.generateKey();
     Mac mac = Mac.getInstance(key.getAlgorithm());
     mac.init(key);
     String str = "This message will be digested";
     byte[] utf8 = str.getBytes("UTF8");
     byte[] digest = mac.doFinal(utf8);
    

    【讨论】:

      【解决方案2】:

      看看你的 maven 配置,你会发现一件事是让你的所有包导入都是可选的是不明智的。它取消了 OSGi 通过将问题推迟到执行时间为您提供的许多好处,而不是在捆绑包开始时让您知道某些事情是不正确的。换句话说,缓慢失败而不是快速失败!它仅适用于真正可选的依赖项。

      当然,您的最终目标是完全不失败,而不仅仅是更快地失败。作为了解正在发生的事情的起点,您是否打开了构建的捆绑包并检查了加密包是否实际被嵌入?最好检查一下您的构建是否符合您的预期。

      但是,在这种特殊情况下,由于这是您通常希望 JVM 提供的类,我建议检查您的引导类路径以确保它可用,删除嵌入依赖项并使用 org.osgi。 framework.system.packages.extra 属性而不是嵌入依赖项。

      【讨论】:

        猜你喜欢
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 2011-07-28
        • 1970-01-01
        相关资源
        最近更新 更多