【问题标题】:weblogic classloading binary resourceweblogic类加载二进制资源
【发布时间】:2013-10-08 20:05:19
【问题描述】:

我正在尝试在我的应用程序中使用二进制资源。我需要它来加密/解密密码。该文件位于我耳朵的“类”文件夹中,就像应用程序可以毫无问题地访问的属性文件一样。

无论如何,我正在加载文件如下。

ClassLoader.class.getResourceAsStrem(/file.xxxx);

但在二进制文件的情况下,结果 InputStream 为空。

问题是,为什么它适用于属性文件而不适用于二进制文件?如何加载二进制资源?

最好的问候。

【问题讨论】:

    标签: java resources weblogic classloader weblogic-10.x


    【解决方案1】:
    1. 确保文件在类路径中可用。
    2. 改用上下文类加载器 - 这将确保尝试查找文件的代码也可以驻留在共享库中。

    以下内容:

    Thread.currentThread().getContextClassLoader().getResourceAsStream(..)
    

    希望对您有所帮助。

    【讨论】:

    • 看起来不错。我明天在办公室试试。但是,为什么使用属性文件而不使用二进制文件?
    • 我正在使用下一个代码来加载资源: InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(/myBinaryFile.bin) 现在的问题是 weblogic 不是返回一个 InputStrem,返回一个名为“SafeZipFileInputStream”的专有对象
    • 如果你对 SafeZipFileInputStream 执行 javap,你会注意到这个类从 java.io.FilterInputStream 扩展而来,而 java.io.FilterInputStream 又从 java.io.InputStream 扩展 所以,只要你使用基类,它不应该改变流类型是什么。如果只作为 InputStream 使用会不会有问题?
    • 是的,生成的文件是 weblogic 生成的 jar ($WL_HOME/servers..../6iiuve/war/WEB-INF/lib/_wl_cls_gen.jar) 从war文件,不是我的二进制文件。
    • 为什么不先打印出所有可用资源,看看您的文件是否被拾取?与上面的代码相同,只是您执行 getResources() 而不是 getResourceAsStream(),然后遍历枚举并将它们打印出来以查看您的文件是否偶数出现与否。
    【解决方案2】:

    使用你当前所在的类名代替 ClassLoader。

    YourClass.class.getResourceAsStrem(/file.xxxx);
    

    【讨论】:

      猜你喜欢
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多