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 的相关文章

  • ImageIO: JPEG 损坏的 JPEG 数据:数据段过早结束 iphone - 如何捕获此问题?

    我通过 HTTP 下载图像时收到此错误 我看过在这里回答但即使有效的图像也不会返回YES从函数 还有其他想法吗 获取图像的代码很简单 这发生在后台线程中 NSData data NSData dataWithContentsOfURL NS
  • javax.imageio.ImageIO 是否损坏?它导入一些旋转的图像

    下面你会看到一张漂亮的糕点的图片 名为 simit 来自土耳其 它取自 iPad 2 因此它是具有尺寸的 JPEG720 960 问题是 当我使用javax imageio ImageIO read方法 它奇怪地导入的图像是Buffered
  • 使用Java读取图像文件的有效方法

    我在用javax imageio ImageIO read 读取位于 Windows 临时位置的大小为 5 mb 的图像几乎需要 9 秒 PFB 是 Jprofiler 的屏幕截图 我想要一种更有效的方法 可以将时间减少到至少 2 3 秒
  • 尝试保存图像时出现异常

    启动 Java 应用程序时 我在尝试保存图像时遇到异常 然而 在 Eclipse 中 一切都工作正常 该应用程序是使用 fatjar 构建的 并且还选择了导出所需的库 jar imageio jar 和 ij jar 我尝试使用 Image
  • Java-从图像中获取像素数组

    我正在寻找获取像素数据的最快方法 形式为int 从一个BufferedImage 我的目标是能够解决像素问题 x y 从图像中使用int x y 我发现的所有方法都不会执行此操作 大多数方法都会返回int s 我只是在研究同一主题 这是访问
  • 绘制图像的某些部分偏离角点?

    我正在使用某种精灵表来加载宇宙飞船 Graphics drawImage 的文档指出参数是 boolean Graphics drawImage Image img int dstx1 int dsty1 int dstx2 int dst
  • 我能知道 BufferedImage 最初的文件类型是什么吗?

    在我的代码中 我有一个缓冲图像 http docs oracle com javase 7 docs api java awt image BufferedImage html那是装载有ImageIO http docs oracle co
  • 如何用Java读取TIFF文件?

    假设我有一个非常大的 TIFF 图像作为输入 由于我必须遵守内存规范 我无法完全加载此图像 所以以下不是一个选择 BufferedImage data ImageIO read image 是否有任何 Java 库允许读取图像的特定部分而不
  • 将映像包含在可执行 jar 中

    我一整天都在浏览 Stackoverflow 寻找如何做到这一点 但还没有成功 我正在将我制作的快速游戏打包成可执行 jar 但我没有正确引用图像 我只是引用了文件 background ImageIO read new File wood
  • 如何将 16 位灰度图像写入 jpeg?

    我有每像素 16 位灰度BufferedImage由一系列短裤创建 private BufferedImage get16bitImage short pixels ColorModel colorModel new ComponentCo
  • 从 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
  • Java中有没有办法在不传输或下载的情况下获取图像的宽度和高度?

    为了获得图像的高度 我们可以使用ImageIO read new URL getHeight https docs oracle com javase 8 docs api java awt image BufferedImage html
  • 使用 JLabels 更新图像的正确方法

    我正在创建一个 GUI 并且对 swing 和 awt 相当陌生 我正在尝试创建一个 gui 在启动时将背景设置为图像 然后使用一种方法来创建某种幻灯片 我已经尝试过 并且我不执着于代码 因此我能够接受修订和 或全新概念 编辑 9 15 1
  • ImageIO脏内存不会被iOS自动清除

    我正在创建一个应用程序 它是一种画廊 它作为全屏查看器显示不同的媒体内容 分配工具显示 使用应用程序时 Live Bytes 参数不会增长到高于 40 Mb 同时 在我滑动页面 20 30 次后 该应用程序 100 被杀死 我检查了 Dir
  • 在 iOS 上缩小图像最节省内存的方法是什么?

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

    我一直在寻找原始图像支持 并找到了这个库 jrawio 1 6 1 它扩展了 imageio 以添加原始支持 它似乎有效 但速度非常慢 我见过跑得更快的蜗牛 我的代码在几秒钟内处理 Jpeg 而处理一个不太大的 cr2 文件或 nef 则需
  • 将 RGB PNG 转换为 CMYK JPEG(使用 ICC 颜色配置文件)

    我需要将 PNG 文件转换为 CMYK JPEG 在我的研究过程中 我发现了多篇关于 SO 的文章描述了这个问题 我已经复制了这个答案 https stackoverflow com questions 380678 how to set
  • 如何用Java读取PGM图像?

    我觉得我在这里错过了一些简单的东西 像往常一样 我正在尝试使用 Java 读取 PGM 图像 Matlab 做得很好 在 Matlab 中输出图像像素 例如 一个小的 32x32 图像 给我这样的结果 1 0 11 49 94 118 11
  • 如何用Java创建图像

    比如说在我的程序中 我有这个paint 方法 我的愿望是创建所绘制的矩形的图像 使用 for 循环 我尝试了下面的方法 它确实给了我那些矩形 蓝色 但背景是全黑的 当我运行程序而不创建图像 仅在 JFrame 上绘制矩形时 背景为白色 我怎

随机推荐

  • 限制对 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