util:binary-doc() works as expected, the image is returned properly;image:get-width($someImage) throws: Could not initialize class javax.imageio.ImageIOimport module namespace image = "http://exist-db.org/xquery/image";
let $someImage := util:binary-doc('/db/data/someImage.jpg')
return
image:get-width($someImage)
2018-10-29 09:09:01,326 [qtp666312528-6423] ERROR (XQueryServlet.java [process]:551) - Could not initialize class javax.imageio.ImageIO
java.lang.NoClassDefFoundError: Could not initialize class javax.imageio.ImageIO
at org.exist.xquery.modules.image.GetWidthFunction.eval(GetWidthFunction.java:98) ~[exist-modules.jar:4.2.1]
at org.exist.xquery.BasicFunction.eval(BasicFunction.java:74) ~[exist.jar:4.2.1]
at org.exist.xquery.InternalFunctionCall.eval(InternalFunctionCall.java:41) ~[exist.jar:4.2.1]
at org.exist.xquery.DebuggableExpression.eval(DebuggableExpression.java:58) ~[exist.jar:4.2.1]
at org.exist.xquery.LetExpr.eval(LetExpr.java:111) ~[exist.jar:4.2.1]
at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist.jar:4.2.1]
at org.exist.xquery.PathExpr.eval(PathExpr.java:276) ~[exist.jar:4.2.1]
at org.exist.xquery.AbstractExpression.eval(AbstractExpression.java:71) ~[exist.jar:4.2.1]
at org.exist.xquery.XQuery.execute(XQuery.java:261) ~[exist.jar:4.2.1]
at org.exist.xquery.XQuery.execute(XQuery.java:185) ~[exist.jar:4.2.1]
at org.exist.http.servlets.XQueryServlet.process(XQueryServlet.java:487) [exist-optional.jar:4.2.1]
at org.exist.http.servlets.XQueryServlet.doPost(XQueryServlet.java:192) [exist-optional.jar:4.2.1]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [servlet-api-3.1.jar:3.1.0]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [servlet-api-3.1.jar:3.1.0]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566) [jetty-security-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:163) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:73) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.exist.http.urlrewrite.Forward.doRewrite(Forward.java:51) [exist-optional.jar:4.2.1]
at org.exist.http.urlrewrite.XQueryURLRewrite.doRewrite(XQueryURLRewrite.java:524) [exist-optional.jar:4.2.1]
at org.exist.http.urlrewrite.XQueryURLRewrite.service(XQueryURLRewrite.java:343) [exist-optional.jar:4.2.1]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [servlet-api-3.1.jar:3.1.0]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at de.betterform.agent.web.filter.XFormsFilter.doFilter(XFormsFilter.java:171) [betterform-exist-5.1-SNAPSHOT-20160615.jar:?]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524) [jetty-security-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473) [jetty-servlet-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:674) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.Server.handle(Server.java:531) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260) [jetty-server-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281) [jetty-io-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102) [jetty-io-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118) [jetty-io-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:760) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:678) [jetty-util-9.4.10.v20180503.jar:9.4.10.v20180503]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Is there any specific info in exist.log ?
Thank you, updated!
sorry I was updating the ticket as well :-( your latest addition is gone despite a wanring on screen
I don’t give up!
some probing shows this might be related to #1456. the OP's code works fine with .png but not with .jpg.
we don't seem to have a test for the image module
That’s interesting, another question emerges—which file types does the module support?
@welblaud the problem is that despite the correct mime-type and a file accessible in the DB util:binary-doc-available returns empty for the .jpg file so nothing even arrives at imageIO irrespective of what files types it supports. You could try with .jpeg file ending, to see if that makes a difference.
Suggested XQsuite test for the img module below, first test passes, second fails in line with what the OP is seeing
xquery version "3.1";
(: see below :)
results
<testsuites>
<testsuite package="http://exist-db.org/xquery/test/image" timestamp="2018-10-29T17:40:56.966+01:00" tests="4" failures="0" errors="1" pending="0" time="PT0.037S">
<testcase name="width" class="img:width"/>
<testcase name="width" class="img:width">
<error type="java:org.exist.xquery.XPathException" message="exerr:ERROR The actual return type does not match the sequence type declared in the function's signature: img:width(xs:string*) item(). Expected cardinality: exactly one, got 0. [at line 70, column 24, source: /db/GH/2242/test.xq]
In function:
	img:width(xs:string*) [8:5:/db/GH/2242/test.xq]
	test:apply(function(*), item()*) [505:9:jar:file:/Applications/eXist-db.app/Contents/Resources/eXist-db/exist.jar!/org/exist/xquery/lib/xqsuite/xqsuite.xql]
	test:apply(function(*), element(), item()*) [412:9:jar:file:/Applications/eXist-db.app/Contents/Resources/eXist-db/exist.jar!/org/exist/xquery/lib/xqsuite/xqsuite.xql]
	test:call-test(function(*), element(), element()*) [272:32:jar:file:/Applications/eXist-db.app/Contents/Resources/eXist-db/exist.jar!/org/exist/xquery/lib/xqsuite/xqsuite.xql]. The actual return type does not match the sequence type declared in the function's signature: img:width(xs:string*) item(). Expected cardinality: exactly one, got 0."/>
</testcase>
<testcase name="width" class="img:width"/>
<testcase name="width" class="img:width"/>
</testsuite>
</testsuites>
@welblaud good new and bad news.
The error you are seeing is related to the kind of jpg image that you are trying to read. As i found out from this SO thread.
If you consider this a bug you should discuss this with the authors of the imageIO library. But this behaviour is not on exist. Unless there is a better library for us to use.
modifying my xqsuite test to add both bad and good jpgs everything is in the clear now. So i ll prepare a PR unless anybody has any more comments.
xquery version "3.1";
module namespace img="http://exist-db.org/xquery/test/image";
declare namespace test="http://exist-db.org/xquery/xqsuite";
import module namespace image="http://exist-db.org/xquery/image";
(:~
: testsuite for the image module http://exist-db.org/xquery/image.
:
:
: @see https://github.com/eXist-db/exist/issues/2242
: @see https://github.com/eXist-db/exist/issues/1456
: @author Duncan Paterson
:)
declare variable $img:testCol := xmldb:create-collection("/db", "test_image");
declare variable $img:png := 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png';
declare variable $img:bad-jpg := 'https://commons.wikimedia.org/wiki/File:Felis_silvestris_silvestris.jpg';
declare variable $img:good-jpg := 'https://i.imgur.com/AD5NOgEm.jpg';
declare variable $img:bmp := 'https://www.fileformat.info/format/bmp/sample/3636e6411c7e49a59196e6578876dccc/VENUS.BMP';
declare variable $img:gif := 'http://www.fileformat.info/format/gif/sample/7c2f782d415843e0b4c0980ecac4fa83/WFPC01.GIF';
(:~
: for supported fileytypes in Java8
: @see https://docs.oracle.com/javase/8/docs/api/index.html?javax/imageio/ImageIO.html
: :)
declare
%test:setUp
function img:setup() {
( xmldb:store(
$img:testCol,
'image.png',
hc:send-request(<hc:request href="{$img:png}" method="get"/>)[2],
'image/png'),
xmldb:store(
$img:testCol,
'CMYK.jpg',
hc:send-request(<hc:request href="{$img:bad-jpg}" method="get"/>)[2],
'image/jpeg'),
xmldb:store(
$img:testCol,
'RGB.jpg',
hc:send-request(<hc:request href="{$img:good-jpg}" method="get"/>)[2],
'image/jpeg'),
xmldb:store(
$img:testCol,
'image.bmp',
hc:send-request(<hc:request href="{$img:bmp}" method="get"/>)[2],
'image/bmp'),
xmldb:store(
$img:testCol,
'image.gif',
hc:send-request(<hc:request href="{$img:gif}" method="get"/>)[2],
'image/gif')
)
};
declare
%test:tearDown
function img:teardown () {
xmldb:remove($img:testCol)
};
(:~
: the library can't handle CMYK jpgs
: hence the error, if it could it should be 519 wide
:
: @see https://stackoverflow.com/questions/2408613/unable-to-read-jpeg-image-using-imageio-readfile-file#16149142
:)
declare
%test:arg('file', '/db/test_image/image.png')
%test:assertEquals (272)
%test:arg('file', '/db/test_image/CMYK.jpg')
%test:assertError('exerr:ERROR')
%test:arg('file', '/db/test_image/RGB.jpg')
%test:assertEquals (320)
%test:arg('file', '/db/test_image/image.bmp')
%test:assertEquals (300)
%test:arg('file', '/db/test_image/image.gif')
%test:assertEquals (640)
function img:width ($file as xs:string*) as item() {
let $someIMG := util:binary-doc($file)
return
if (util:binary-doc-available($file))
then (image:get-width($someIMG))
else (error(QName('http://exist-db.org/xquery/test/image', 'missing-binary'), substring-after($file, '.') || ' binary unavailable'))
};
which results in
<testsuites>
<testsuite package="http://exist-db.org/xquery/test/image" timestamp="2018-10-29T18:09:40.073+01:00" tests="5" failures="0" errors="0" pending="0" time="PT0.039S">
<testcase name="width" class="img:width"/>
<testcase name="width" class="img:width"/>
<testcase name="width" class="img:width"/>
<testcase name="width" class="img:width"/>
<testcase name="width" class="img:width"/>
</testsuite>
</testsuites>
@eXist-db/core we could add this extension to exist to handle the OPs use-case more gracefully https://github.com/haraldk/TwelveMonkeys
Thank you for investigating (and for the great example of testing in XQuery [topic not much clearly commented for non-programmers])! I have just tried to test more images. Unfortunately, no matter which color space my images have, it still fails. The ugliest solution for me would be using XProc and solving this via ImageMagick (oh, my).
_I remember the module worked fine in older versions of eXist!_
hmm so there might be another problem. Just to be sure could you try with the $good-jpg from my test https://i.imgur.com/AD5NOgEm.jpg how about the other image formats can you get the width of pngs?
Could you share a stable link to an image that you think should work?
@duncdrum your test on my machine results in:
<testsuites>
<testsuite package="http://exist-db.org/xquery/test/image" timestamp="2018-10-30T09:13:23.428+01:00" failures="1" pending="0" tests="5" time="PT0.017S">
<testcase name="width" class="img:width">
<error type="java:java.lang.NoClassDefFoundError" message="Could not initialize class javax.imageio.ImageIO"/>
</testcase>
<testcase name="width" class="img:width">
<failure message="Expected error exerr:ERROR, got: java:java.lang.NoClassDefFoundError Could not initialize class javax.imageio.ImageIO" type="failure-error-code-1"/>
</testcase>
<testcase name="width" class="img:width">
<error type="java:java.lang.NoClassDefFoundError" message="Could not initialize class javax.imageio.ImageIO"/>
</testcase>
<testcase name="width" class="img:width">
<error type="java:java.lang.NoClassDefFoundError" message="Could not initialize class javax.imageio.ImageIO"/>
</testcase>
<testcase name="width" class="img:width">
<error type="java:java.lang.NoClassDefFoundError" message="Could not initialize class javax.imageio.ImageIO"/>
</testcase>
</testsuite>
</testsuites>
@welblaud Have you tried adding JAI to your system?
If I recall correctly you used to have to download and install JAI seperately from Oracle to get access to more image formats and improved performance - https://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-client-419417.html
I suspect that @duncdrum is on a Mac, which probably has JAI natively.
@adamretter No, I haven’t. On the Oracle page, there are many packages listed. Do you think these could be sufficient?
Java Advanced Imaging API 1.1.2_01
Java Advanced Imaging 1.1.1_01
Java Advanced Imaging Image I/O Tools 1.0_01
Java Advanced Imaging ICC Profiles
I think you likely only need:
@adamretter indeed was running on my laptop, looks like our docker images can't handle jpegs at all.
<testsuites>
<testsuite package="http://exist-db.org/xquery/test/image" timestamp="2018-10-30T09:54:07.054Z" tests="5" failures="0" errors="1" pending="0" time="PT0.078S">
<testcase name="get image width for supported filetypes" class="img:width"/>
<testcase name="get image width for supported filetypes" class="img:width"/>
<testcase name="get image width for supported filetypes" class="img:width">
<error type="java:java.lang.NoClassDefFoundError" message="Could not initialize class com.sun.imageio.plugins.jpeg.JPEGImageReader"/>
</testcase>
<testcase name="get image width for supported filetypes" class="img:width"/>
<testcase name="get image width for supported filetypes" class="img:width"/>
</testsuite>
</testsuites>
Some docs relevant to installing JAI: https://github.com/eXist-db/exist/blob/develop/extensions/images/README.
@adamretter Unfortunately, it seems those packages are too old, aren’t they (2004)? Additionally, aren’t they for 32-bit only? Simply said, my admin refused to install them because of this. That’s bad.
@joewiz Thank you, maybe I could do that according to the docs!
@welblaud you could try with this library instead of JAI https://github.com/haraldk/TwelveMonkeys
@welblaud Hmm you might be right about the 32bit thing.
I have just tried to use another configuration:
This code works perfectly:
import module namespace image = "http://exist-db.org/xquery/image";
let $img := util:binary-doc('/db/data/somePic.jpg')
let $img-width := image:get-width($img)
let $img-height := image:get-height($img)
let $img-data := image:get-metadata(util:binary-doc('/db/data/somePic.jpg'), true())
return
($img-width, $img-height, $img-data)
Result:
100
98
<javax_imageio_jpeg_image_1.0>
<JPEGvariety>
<app0JFIF majorVersion="1" minorVersion="1" resUnits="1" Xdensity="72" Ydensity="72" thumbWidth="0" thumbHeight="0"/>
</JPEGvariety>
<markerSequence>
<dqt>
<dqtable elementPrecision="0" qtableId="0"/>
</dqt>
<dqt>
<dqtable elementPrecision="0" qtableId="1"/>
</dqt>
<sof process="0" samplePrecision="8" numLines="98" samplesPerLine="100" numFrameComponents="3">
<componentSpec componentId="1" HsamplingFactor="2" VsamplingFactor="2" QtableSelector="0"/>
<componentSpec componentId="2" HsamplingFactor="1" VsamplingFactor="1" QtableSelector="1"/>
<componentSpec componentId="3" HsamplingFactor="1" VsamplingFactor="1" QtableSelector="1"/>
</sof>
<dht>
<dhtable class="0" htableId="0"/>
</dht>
<dht>
<dhtable class="1" htableId="0"/>
</dht>
<dht>
<dhtable class="0" htableId="1"/>
</dht>
<dht>
<dhtable class="1" htableId="1"/>
</dht>
<sos numScanComponents="3" startSpectralSelection="0" endSpectralSelection="63" approxHigh="0" approxLow="0">
<scanComponentSpec componentSelector="1" dcHuffTable="0" acHuffTable="0"/>
<scanComponentSpec componentSelector="2" dcHuffTable="1" acHuffTable="1"/>
<scanComponentSpec componentSelector="3" dcHuffTable="1" acHuffTable="1"/>
</sos>
</markerSequence>
</javax_imageio_jpeg_image_1.0>
As for the test:suite, it somehow does not work there don’t know why):
<testsuites>
<testsuite package="http://exist-db.org/xquery/test/image" timestamp="2018-10-31T09:15:50.376+01:00" errors="3"/>
</testsuites>
Does that mean the Java version could be the problem? 181 vs 191…
or different linux kernel/libc or... it can be anything. linux is not linux :-(
under the hood, in Java8u191 there has been a libpng update ( releasenotes ) but nothing is mentioned on jpeg. you could try to install Java8u192 ....
For the JAI download location see #2250
@welblaud i can't imagine anything that would allow you to run your query but not the tests. If there are errors these should be in the logs, maybe that can give you a hint.
Ok i spend some more time digging into this and some related problems of the image module.
@welblaud there are numerous open issues with openJDK and imageIO, especially with JPEG I d recommend using oracleJDK on ubuntu instead of the default openJDK.
@duncdrum do you have any links to documentation ?
@duncdrum @welblaud was the resolution to this to use OracleJDK?
@adamretter its complicated, oracle has the best chance of working but more work is required on the module see #2261
Most helpful comment
I don’t give up!