jai-imageio / jai-imageio-core

JAI ImageIO Core (without javax.media.jai dependencies)
Other
234 stars 87 forks source link

JAI ImageIO NoClassDefFoundError for RawImageInputStream #47

Closed akstatic closed 6 years ago

akstatic commented 6 years ago

I am very confused with this issue. I am using 1.3.0 version on jai-imageio-core please check the dependecy below and I am at complete loss to figure out from the jar how can one class file (RawImageReaderSpi) is loaded in JVM but RawImageInputStream is not loaded.

I have deployed my spring boot web service in tomcat 7 container.

This issue pops up randomly and I have noticed that when I have restarted the TC container and deployed new version of my service, this issue shows up intermittently.

Any lead is highly appreciated.

com.github.jai-imageio jai-imageio-core 1.3.0 com.github.jai-imageio jai-imageio-jpeg2000 1.3.0

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]

CedricDaniels commented 6 years ago

got the very same problem!

java.lang.NoClassDefFoundError: com/github/jaiimageio/stream/RawImageInputStream
  com.github.jaiimageio.impl.plugins.raw.RawImageReaderSpi.canDecodeInput(RawImageReaderSpi.java:98)
  javax.imageio.ImageIO$CanDecodeInputFilter.filter(ImageIO.java:567)
  javax.imageio.spi.FilterIterator.advance(ServiceRegistry.java:834)
  javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:852)
  javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:528)
  javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
  javax.imageio.ImageIO.read(ImageIO.java:1443)
  javax.imageio.ImageIO.read(ImageIO.java:1400)
  xxx.yyy.mosaicPictureWidthAndHeight(OssClientUtil.java:66)
  xxx.yyy.uploadImage4Url(OssClientUtil.java:43)
  xxx.product.controller.ProductInfoController.uploadImage(ProductInfoController.java:189)
  xxx.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$6e5bc0a.invoke(<generated>)
  org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
  org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)
  xxx.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$7e10dab7.uploadImage(<generated>)
  xxx.product.controller.ProductInfoController$$FastClassBySpringCGLIB$$6e5bc0a.invoke(<generated>)
  org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
  org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:651)
  xxx.product.controller.ProductInfoController$$EnhancerBySpringCGLIB$$8eea33f1.uploadImage(<generated>)
  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  java.lang.reflect.Method.invoke(Method.java:498)
  org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
  org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
  org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)
  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)
  org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
  org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
  org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
  org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
  org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
  org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:237)
  net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:209)
  org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
  org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
  org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
  org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
  org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
  org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
  org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
  org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)

I am using com.github.jai-imageio:jai-imageio-core:1.3.1. I deployed my application in tomcat8, it works fine after every deployment, but after a period of time, the exception shows up. after restart tomcat server, it looks fine again.

akstatic commented 6 years ago

Hi mate,

Try this link https://github.com/haraldk/TwelveMonkeys#deploying-the-plugins-in-a-web-app. This has solve my problem in my production environment. You may also want to read some more details on SO thread https://stackoverflow.com/questions/48295907/jai-imageio-noclassdeffounderror-for-rawimageinputstream/48321572?noredirect=1#comment83812830_48321572

stain commented 1 year ago

It sounds like a classloader issue, check the full JAR list (in a WAR this should be easy) e.g. with jar t to see you don't have any duplicate definitions of com.github.jaiimageio classes.

If you are using Spring classloaders it may prevent you from accessing impl packages.