Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cantaloupe won't display compressed JP2 images (IA scanned book pages) #39

Closed
ruebot opened this issue Aug 9, 2021 · 3 comments
Closed
Assignees

Comments

@ruebot
Copy link
Member

ruebot commented Aug 9, 2021

java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at edu.illinois.library.cantaloupe.processor.ProcessorFactory.newProcessor(ProcessorFactory.java:104)
	at edu.illinois.library.cantaloupe.resource.iiif.v2.InformationResource.doGET(InformationResource.java:138)
	at edu.illinois.library.cantaloupe.resource.HandlerServlet.handle(HandlerServlet.java:98)
	at edu.illinois.library.cantaloupe.resource.HandlerServlet.doGet(HandlerServlet.java:36)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class edu.illinois.library.cantaloupe.processor.codec.JPEG2000KakaduImageReader
	at edu.illinois.library.cantaloupe.processor.KakaduNativeProcessor.<init>(KakaduNativeProcessor.java:129)
	... 32 more
@ruebot ruebot self-assigned this Aug 9, 2021
ruebot added a commit to yorkulibraries/ansible-role-tomcat8 that referenced this issue Aug 9, 2021
ruebot added a commit to yorkulibraries/ansible-role-tomcat8 that referenced this issue Aug 9, 2021
ruebot added a commit to yorkulibraries/ansible-role-cantaloupe that referenced this issue Aug 9, 2021
@ruebot
Copy link
Member Author

ruebot commented Aug 10, 2021

If we symlink grk_decompress to opj_decompress, Cantaloupe 4.1.7 will check the version on opj_decompress and add a -quiet flag as per cantaloupe-project/cantaloupe#111.

So we need to custom compile a version of Cantaloupe and comment this functionality out (cantaloupe-project/cantaloupe#296 (comment)), add a -quiet flag to Grok (uclouvain/openjpeg#928), or try and upgrade Cantaloupe to 5.0.3 (which doesn't run in Tomcat, and would require a larger look at how we'd deploy it).

@ruebot
Copy link
Member Author

ruebot commented Aug 10, 2021

Here's the new error from the above comment:

2021-08-10 13:59:03,848 DEBUG [http-nio-8080-exec-2] e.i.l.c.r.ImageRepresentation [ImageRepresentation.java:121] write(): Unable to read the image header. (command output: PARSE ERROR: Argument: -quiet
             Couldn't find match for argument

Brief USAGE: 
   /usr/local/bin/opj_decompress  [-v] [-e <unsigned integer>] [-k
                                  <unsigned integer>] [-X] [-G <integer>]
                                  [-z <unsigned integer>] [-L <int>] [-c
                                  <unsigned int>] [-d <string>] [-p
                                  <string>] [-t <unsigned integer>] [-l
                                  <unsigned integer>] [-r <unsigned
                                  integer>] [-o <string>] [-i <string>] [-H
                                  <unsigned integer>] [-g <string>] [-s]
                                  [-u] [-f] [-O <string>] [-a <string>] [-y
                                  <string>] [--] [-version] [-h]

For complete USAGE and HELP type: 
   /usr/local/bin/opj_decompress -help

)
java.io.IOException: Unable to read the image header. (command output: PARSE ERROR: Argument: -quiet
             Couldn't find match for argument

Brief USAGE: 
   /usr/local/bin/opj_decompress  [-v] [-e <unsigned integer>] [-k
                                  <unsigned integer>] [-X] [-G <integer>]
                                  [-z <unsigned integer>] [-L <int>] [-c
                                  <unsigned int>] [-d <string>] [-p
                                  <string>] [-t <unsigned integer>] [-l
                                  <unsigned integer>] [-r <unsigned
                                  integer>] [-o <string>] [-i <string>] [-H
                                  <unsigned integer>] [-g <string>] [-s]
                                  [-u] [-f] [-O <string>] [-a <string>] [-y
                                  <string>] [--] [-version] [-h]

For complete USAGE and HELP type: 
   /usr/local/bin/opj_decompress -help

)
	at edu.illinois.library.cantaloupe.resource.ImageRepresentation.copyOrProcess(ImageRepresentation.java:159)
	at edu.illinois.library.cantaloupe.resource.ImageRepresentation.write(ImageRepresentation.java:119)
	at edu.illinois.library.cantaloupe.resource.iiif.v2.ImageResource.doGET(ImageResource.java:213)
	at edu.illinois.library.cantaloupe.resource.HandlerServlet.handle(HandlerServlet.java:98)
	at edu.illinois.library.cantaloupe.resource.HandlerServlet.doGet(HandlerServlet.java:36)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: edu.illinois.library.cantaloupe.processor.ProcessorException: Unable to read the image header. (command output: PARSE ERROR: Argument: -quiet
             Couldn't find match for argument

Brief USAGE: 
   /usr/local/bin/opj_decompress  [-v] [-e <unsigned integer>] [-k
                                  <unsigned integer>] [-X] [-G <integer>]
                                  [-z <unsigned integer>] [-L <int>] [-c
                                  <unsigned int>] [-d <string>] [-p
                                  <string>] [-t <unsigned integer>] [-l
                                  <unsigned integer>] [-r <unsigned
                                  integer>] [-o <string>] [-i <string>] [-H
                                  <unsigned integer>] [-g <string>] [-s]
                                  [-u] [-f] [-O <string>] [-a <string>] [-y
                                  <string>] [--] [-version] [-h]

For complete USAGE and HELP type: 
   /usr/local/bin/opj_decompress -help

)
	at edu.illinois.library.cantaloupe.processor.OpenJpegProcessor.process(OpenJpegProcessor.java:487)
	at edu.illinois.library.cantaloupe.resource.ImageRepresentation.process(ImageRepresentation.java:190)
	at edu.illinois.library.cantaloupe.resource.ImageRepresentation.copyOrProcess(ImageRepresentation.java:157)
	... 28 common frames omitted
Caused by: javax.imageio.IIOException: Unable to read the image header.
	at java.desktop/com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:832)
	at java.desktop/javax.imageio.ImageReader.read(ImageReader.java:938)
	at edu.illinois.library.cantaloupe.processor.codec.AbstractIIOImageReader.read(AbstractIIOImageReader.java:340)
	at edu.illinois.library.cantaloupe.processor.OpenJpegProcessor.processInUnix(OpenJpegProcessor.java:570)
	at edu.illinois.library.cantaloupe.processor.OpenJpegProcessor.process(OpenJpegProcessor.java:471)
	... 30 common frames omitted
Caused by: java.lang.IllegalArgumentException: Invalid magic value for BMP file.
	at java.desktop/com.sun.imageio.plugins.bmp.BMPImageReader.readHeader(BMPImageReader.java:256)
	at java.desktop/com.sun.imageio.plugins.bmp.BMPImageReader.read(BMPImageReader.java:830)
	... 34 common frames omitted

@ruebot
Copy link
Member Author

ruebot commented Aug 10, 2021

...or we can just use Kakadu from our old Djatoka setup 🤷‍♂️

ruebot added a commit to yorkulibraries/ansible-role-tomcat8 that referenced this issue Aug 10, 2021
ruebot added a commit to yorkulibraries/ansible-role-cantaloupe that referenced this issue Aug 10, 2021
ruebot added a commit to yorkulibraries/ansible-role-cantaloupe that referenced this issue Aug 10, 2021
@ruebot ruebot closed this as completed in ef3ed44 Aug 10, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant