RawImageInputStream 的 JAI ImageIO NoClassDefFoundError

2024-02-16

我对这个问题很困惑。我在 jai-imageio-core 上使用 1.3.0 版本,请检查下面的依赖项,我完全无法从 jar 中弄清楚如何在 JVM 中加载一个类文件 (RawImageReaderSpi) 但未加载 RawImageInputStream。

我已在 tomcat 7 容器中部署了 Spring Boot Web 服务。

这个问题是随机出现的,我注意到当我重新启动 TC 容器并部署新版本的服务时,这个问题会间歇性地出现。

任何线索都受到高度赞赏。

我花了一天时间试图弄清楚出了什么问题,最后却觉得自己很愚蠢

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-core</artifactId>
    <version>1.3.0</version>
</dependency>

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-jpeg2000</artifactId>
    <version>1.3.0</version>
</dependency>

java.lang.NoClassDefFoundError: com/github/jaiimageio/stream/RawImageInputStream
        at com.github.jaiimageio.impl.plugins.raw.RawImageReaderSpi.canDecodeInput(RawImageReaderSpi.java:102) ~[jai-imageio-core-1.3.0.jar:1.3.0]
        at javax.imageio.ImageIO$CanDecodeInputFilter.filter(ImageIO.java:567) ~[na:1.8.0_121]
        at javax.imageio.spi.FilterIterator.advance(ServiceRegistry.java:821) ~[na:1.8.0_121]
        at javax.imageio.spi.FilterIterator.(ServiceRegistry.java:815) ~[na:1.8.0_121]
        at javax.imageio.spi.ServiceRegistry.getServiceProviders(ServiceRegistry.java:516) ~[na:1.8.0_121]
        at javax.imageio.ImageIO.getImageReaders(ImageIO.java:646) ~[na:1.8.0_121]
        at javax.imageio.ImageIO.read(ImageIO.java:1438) ~[na:1.8.0_121]
        at javax.imageio.ImageIO.read(ImageIO.java:1352) ~[na:1.8.0_121]
        at my-package.a.b(a.java:155) ~[classes/:na]
        at my-package.a.b(a.java:181) ~[classes/:na]
        at my-package.a.b(a.java:84) ~[classes/:na]
        at my-package.a$$FastClassBySpringCGLIB$$5f66283f.invoke() ~[spring-core-4.1.3.RELEASE.jar:na]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:267) ~[spring-tx-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at my-package.a$$EnhancerBySpringCGLIB$$dfc04a57.b() ~[spring-core-4.1.3.RELEASE.jar:na]
        at my-package.a.b(c.java:165) ~[classes/:na]
        at my-package.a$$FastClassBySpringCGLIB$$67dbe4b2.invoke() ~[spring-core-4.1.3.RELEASE.jar:na]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:267) ~[spring-tx-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653) ~[spring-aop-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at my-package.a$$EnhancerBySpringCGLIB$$d153236a.processApprovedApplications() ~[spring-core-4.1.3.RELEASE.jar:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_121]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_121]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_121]
        at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) ~[spring-context-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) [spring-context-4.1.3.RELEASE.jar:4.1.3.RELEASE]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_121]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_121]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_121]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_121]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_121]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_121]  

这里的问题是一个已知问题ImageIO插件和容器(如 Web/servlet 容器)。将插件部署为 Web 应用程序的一部分并没有得到很好的支持ImageIO.

The ImageIO registry https://docs.oracle.com/javase/8/docs/api/javax/imageio/spi/IIORegistry.html跟踪注册的插件实际上是 JVM 全局的(它实际上是每个应用程序上下文的注册表,但是,通常只有一个应用程序上下文*)。

  • 最安全的选择是将插件(及其所有依赖项)安装在容器的“共享”或“公共”lib 文件夹中。这可确保插件仅安装一次,并且它们可用于所有容器的上下文。这需要对容器环境进行控制,并且由于需要手动安装和完整的容器重新启动,因此升级也可能很麻烦。

  • 如果您更喜欢将插件部署为 Web 应用程序的一部分,我知道的唯一选择是使用com.twelvemonkeys.servlet.image.IIOProviderContextListener如上所述here https://github.com/haraldk/TwelveMonkeys#deploying-the-plugins-in-a-web-app.

    或者,在 Spring Boot 项目中使用它而无需web.xml文件中,您可以将以下行添加到onStartup()方法在你的SpringBootServletInitializer所描述的子类here https://github.com/haraldk/TwelveMonkeys/issues/16#issuecomment-326128071:

    servletContext.addListener(IIOProviderContextListener.class);
    

    请注意,您必须完全重启容器第一次启用上下文监听器后,ImageIO可能已经受到早期部署的“污染”。

*) 不要与容器的 Web 应用程序上下文混淆,容器的 Web 应用程序上下文可能有很多。


[怎么可能]一个类文件(RawImageReaderSpi) 已加载到 JVM 中,但是RawImageInputStream没有加载?

这是链接中提到的情况,其中 Web 应用程序的早期部署已注册RawImageReaderSpi注册表中的类,而由于重新部署,该部署中的其余类已被删除。这RawImageInputStream class may be可从新部署中使用,但由于新的 Web 应用程序上下文使用不同的ClassLoader例如,原始 Spi 类无法将其视为它正在查找的同一类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RawImageInputStream 的 JAI ImageIO NoClassDefFoundError 的相关文章

  • BufferedImage getRGB 与 Raster getSample

    我正在尝试用 Java 进行一些图像处理 我使用 ImageIO 库来读取和写入图像 我可以通过以下两种方式读取图像像素值 可能还有其他方法不知道 使用 BufferedImage 的 getRGB 方法 像素 image getRGB x
  • ImageIO.read() 返回 403 错误

    我有以下代码 public BufferedImage urlToImage String imageUrl throws MalformedURLException IOException URL url new URL imageUrl
  • 使用 Java 和 awt.Robot 时提高屏幕捕获速度

    编辑 如果有人还有任何其他关于提高屏幕捕获性能的建议 请随时分享 因为它可能完全解决我的问题 各位开发者大家好 我正在为自己开发一些基本的屏幕捕获软件 截至目前 我已经得到了一些概念证明 修补代码 它使用 java awt Robot 将屏
  • Java / JAI - 将图像保存为灰度

    我尝试保存tiff而不是灰度颜色 我怎么能这样做呢 必须使用JAI 因为这是一场争吵 预先非常感谢并致以最诚挚的问候 你想要的是下载JAI 图像 I O 工具 它为 JAI 提供 ImageIO 适配器 一旦安装完毕 一切就很顺利了 fin
  • 如何使用 ImageWriter 和 ImageIO 在 Java 中编码动画 GIF?

    我查遍了所有地方 但似乎找不到任何易于理解的解释 我发现其他 Java 用户编写的类和方法可以做到这一点 但我希望自己编写 这里是createImage 的方法GIFanim 也许这会给你一个开始 public byte createIma
  • 如何解决由 ImageIO 插件引起的 OutOfMemoryError 错误?

    在工作中 我们有一些 Tomcat 服务器运行多个 Web 应用程序 其中大约一半必须执行一些图像处理 在进行图像处理之前 这些网络应用程序会执行以下操作ImageIO scanForPlugins 将适当的图像读取器和写入器放入内存中 虽
  • Java 8 ImageIO 在 Linux 中错误读取 JPEG

    我正在尝试读取用户上传的 JPEG 图像 任意 以在服务器应用程序中创建缩略图 系统在 Windows7 Oracle Java 8u11 中运行良好 但我在服务器上的 CentOS 下遇到颜色模型问题 原始图像是 http studio
  • 我能知道 BufferedImage 最初的文件类型是什么吗?

    在我的代码中 我有一个缓冲图像 http docs oracle com javase 7 docs api java awt image BufferedImage html那是装载有ImageIO http docs oracle co
  • 将文件中的图像读/写到 BufferedImage 的最快方法?

    在 Java Grails 中将文件中的图像读入 BufferedImage 的最快方法是什么 在 Java Grails 中将 BufferedImage 中的图像写入文件的最快方法是什么 我的变体 阅读 byte imageByteAr
  • 如何用Java读取TIFF文件?

    假设我有一个非常大的 TIFF 图像作为输入 由于我必须遵守内存规范 我无法完全加载此图像 所以以下不是一个选择 BufferedImage data ImageIO read image 是否有任何 Java 库允许读取图像的特定部分而不
  • 从 java InputStream 打开图像文件

    我正在尝试使用运行程序的计算机的默认图像查看器打开打包在 jar 文件中的图像文件 我找到了许多关于如何使用 InputStream 访问打包在 jar 中的文件的答案 但是如何使用该 InputStream 打开这些文件 InputStr
  • “必须安装JRE 1.3或更高版本!” /“必须安装JDK 1.3或更高版本!”在 Windows 7 (x64) 上安装 JAI 1.1.3 时出错

    我收到这些错误 严重 必须安装JRE 1 3或更高版本 严重 必须安装JDK 1 3或更高版本 在 Windows 7 x64 上安装 JAI Java Advanced Imaging 1 1 3 时 JRE 7 1 7 安装在 C Pr
  • 如何调整目录中的图像大小?

    此代码尝试调整名为 imgs 的目录中的图像大小 不幸的是 由于某种原因 当我取消注释 listFiles 循环时ImageIO read sourceImageFile 将返回 null 然而在循环之外直接处理相同的文件 res imgs
  • 在 iOS 上缩小图像最节省内存的方法是什么?

    在后台线程中 我的应用程序需要从磁盘读取图像 将其缩小到屏幕大小 1024x768 或 2048x1536 并将其保存回磁盘 原始图像大部分来自相机胶卷 但其中一些可能具有更大的尺寸 例如 3000x3000 随后 在不同的线程中 这些图像
  • ImageIO 无法写入 JPEG 文件

    我有一个 BufferedImage 我试图写入 jpeg 文件 但我的 Java 程序抛出异常 我能够成功地将相同的缓冲区保存为 gif 和 png 我尝试在 Google 上寻找解决方案 但没有成功 Code File outputfi
  • RawImageInputStream 的 JAI ImageIO NoClassDefFoundError

    我对这个问题很困惑 我在 jai imageio core 上使用 1 3 0 版本 请检查下面的依赖项 我完全无法从 jar 中弄清楚如何在 JVM 中加载一个类文件 RawImageReaderSpi 但未加载 RawImageInpu
  • ImageIO 对原始图像的支持 (jrawio)

    我一直在寻找原始图像支持 并找到了这个库 jrawio 1 6 1 它扩展了 imageio 以添加原始支持 它似乎有效 但速度非常慢 我见过跑得更快的蜗牛 我的代码在几秒钟内处理 Jpeg 而处理一个不太大的 cr2 文件或 nef 则需
  • 禁用 Java ImageIO 色度子采样

    我正在尝试使用 ImageIO 将 BufferedImage 保存为 JPEG 但即使使用 100 质量进行保存 我也会因色度子采样而遭受质量损失 我通过恢复到旧的 JAI 库并明确将水平和垂直子采样设置为 1 成功解决了这个问题 然而
  • 由于连接超时,无法通过 ImageIO.read(url) 获取图像

    下面的代码似乎总是失败 URL url new URL http userserve ak last fm serve 126 8636005 jpg Image img ImageIO read url System out printl
  • 对 BufferedImage 执行 setRGB 会将像素更改为黑色而不是颜色

    重要更新 见下文 我正在创建一个程序 当 BufferedImage 的像素满足 Java 中的一组条件时 该程序会将该像素更改为某种颜色 但是 当我将图像写入磁盘时 应该着色的像素变成了黑色 首先 我使用 RGB 代码定义颜色 Color

随机推荐

  • 限制对 Application Load Balancer 的访问的最佳方法是什么?

    理想情况下 我想锁定我的 ALB 以便只能通过 API 网关访问它 我研究了是否可以将 API 网关与入站规则关联 但是 我发现 API 网关无法与 IP 地址或安全组关联 我还研究了面向内部的 ALB 但我无法让这些工作 因为 VPC 链
  • HBase 扫描时出现 java.lang.NoClassDefFoundError

    我正在尝试运行 MapReduce 作业来扫描 HBase 表 目前我使用的是Cloudera 4 4附带的HBase 0 94 6版本 在我的程序中的某个时刻 我使用 Scan 并使用以下命令正确导入它 import org apache
  • EHCache如何实现其事务?

    这个问题可能听起来很模糊 但我试图理解 EHCache 事务能力的一般概念 假设我将 EHCache 配置为内存缓存 并且还将其配置为缓存MyObject EHCache是 否克隆实例MyObject我正在检索这是否是作为交易的一部分完成的
  • “飞行模式”打开时SIM状态的值是多少

    我想知道返回的SIM状态值是多少TelephonyManager getSimState http developer android com reference android telephony TelephonyManager htm
  • Jersey/JAXB:对 HTTP POST 和 GET 使用相同的 POJO,但在 JSON 响应中仅返回 GET 属性的子集。

    这似乎是另一件相当简单的事情 但我再次为如何做到这一点而苦苦挣扎 我有一个带有 Jersey JAXB 注释的 POJO 该注释具有与其关联的 HTTP POST 和 GET 方法 在 POJO 上执行 POST 时 请求正文以 JSON
  • 如何使用 NetBeans GUI Builder 包含自定义面板?

    我编写了一个扩展 JPanel 的类 是否可以在 NetBeans GUI Builder 中使用它并让它在所有自动代码生成过程中幸存下来 我已经使用 GUI 构建器中的自定义代码选项将对象实例化为新类 但似乎无法从 JPanel 更改声明
  • 单击按钮时 UITextField 不会结束编辑(委托 textFieldDidEndEditing )

    我有两个textFields在屏幕上和一个Submit button 用户在第一个文本字段中输入详细信息 然后在第二个文本字段中输入详细信息 我的要求是结束编辑Submit button单击并打印这些中的用户输入textFields 我在打
  • OkHttp3 返回超时异常

    我使用 okhttp3 作为网络库 使用 Node mongo 作为后端服务 有时 当我的应用程序启动时 它会显示超时异常 当我关闭应用程序并再次启动它时 它会从服务器获取数据 没有错误应用程序 但我想知道为什么显示超时异常 下面是我在列表
  • ggplot2 中的旋转和间距轴标签

    我有一个图 其中 x 轴是一个标签很长的因子 虽然可能不是理想的可视化 但现在我想简单地将这些标签旋转为垂直 我已经用下面的代码解决了这部分问题 但正如您所看到的 标签并不完全可见 data diamonds diamonds cut lt
  • 如何从控制台访问 Ember 数据存储?

    在 Ember 2 中 有谁知道如何获取对 Ember Store 的引用 以便对 javascript 控制台中的模型映射进行故障排除 本来可以通过App container lookup在 Ember 1 中 但这已经不存在了 而且很难
  • PhantomJS 和 iFrame

    我正在使用 phantomjs 1 5 和casperjs http casperjs org 用于我的功能测试 casper require casper create loadImages false casper start http
  • 在 Objective-C 中定义协议类别?

    在 Objective C 中 我可以使用类别向现有类添加方法 例如 interface NSString MyCategory BOOL startsWith NSString prefix end 是否也可以使用协议来做到这一点 即如果
  • ctorParameters.map 不是 angular2-mdl 中的函数

    我正在尝试将 Angular2 mdl 与 Angular CLI 一起使用 我导入了MdlModule在 app module ts 中 当我尝试使用时
  • 在 Go (Golang) 中枚举注册表值

    我正在尝试使用 Go 枚举 Windows 注册表中的值列表 但遇到了一些麻烦 我尝试了两种方法 使用 Go 提供的syscall要调用的库RegEnumValue 也使用 lxn 的 Windows API 包装器 https githu
  • NSDateFormatter 谜题!这是新的山狮虫吗?

    我相信我可能发现了一个错误NSDateFormatter 我不确定这是否本地化为在系统偏好设置中指定了巴西时区 完整的项目在这里 http www idanfe com dl nsDateFormatterPuzzle zip http w
  • 文本描边(-webkit-text-lines)css问题

    我正在使用 NextJs 和 TailwindCSS 开发一个个人项目 完成项目后 我使用私人导航器来查看进度 但似乎笔画没有按应有的方式工作 我在除 Chrome 之外的所有浏览器中都遇到了这种情况 这是我得到的 这是所需的行为 Code
  • ASP.NET 开发服务器未更新对标记/代码的更改

    我最近一直在开发 ASP NET 开发服务器 在一个 MVC 项目中 我发现它在如何服务于我对代码所做的更改方面不一致 例如 我对 C 在开发环境中运行 HTML CSS JS 并运行页面 更改会出现在屏幕上 但是如果我再次编辑 HTML
  • 何时使用 C++11 互斥锁、锁、unique_lock、shared_lock 等

    有什么区别shared lock and shared mutex lock shared 除此之外的析构函数shared lock解锁关联的互斥体 Is a shared mutex我可以使用的唯一互斥类shared lock 为什么有人
  • xcode4模板格式问题

    xcode4 使用新的项目模板格式 xctemplate 使用现有模板 我可以获得所需的一切 除了将文件添加到项目中而不复制它 我需要从我的模板创建的所有项目都使用共享资源 这样我就可以一次更新所有项目 只更新一个文件 谢谢 您是否尝试从模
  • RawImageInputStream 的 JAI ImageIO NoClassDefFoundError

    我对这个问题很困惑 我在 jai imageio core 上使用 1 3 0 版本 请检查下面的依赖项 我完全无法从 jar 中弄清楚如何在 JVM 中加载一个类文件 RawImageReaderSpi 但未加载 RawImageInpu