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

AWT Support is Incomplete in 20.3.beta1 #180

Closed
sherl0cks opened this issue Nov 21, 2020 · 10 comments
Closed

AWT Support is Incomplete in 20.3.beta1 #180

sherl0cks opened this issue Nov 21, 2020 · 10 comments
Assignees
Labels
bug Something isn't working not-Stale

Comments

@sherl0cks
Copy link

Description

The backport of oracle@5d2997a is insufficient to load a buffered image via Apache Imaging or Image IO in a native linux image. I was able to get the native image built, so it does mean that backport does provide some meaningful AWT functionality (see oracle#2842 for context).

How To Reproduce

I don't have a ready reproducer available, but you just need to build a native linux image that uses ImageIO.read or Imaging.getBufferedImage

Configuration:

https://quay.io/repository/quarkus/ubi-quarkus-mandrel:20.3.0.0.Beta1-java11

Expected behavior

Buffered Image is loaded without error.

Actual Behavior

For ImageIO:

Exception in thread "Lambda Thread" java.lang.NoSuchMethodError: java.lang.System.load(Ljava/lang/String;)V
--
at com.oracle.svm.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1094)
at com.oracle.svm.jni.functions.JNIFunctions$Support.getMethodID(JNIFunctions.java:1079)
at com.oracle.svm.jni.functions.JNIFunctions.GetStaticMethodID(JNIFunctions.java:396)
at com.oracle.svm.jni.JNIOnLoadFunctionPointer.invoke(JNILibraryInitializer.java)
at com.oracle.svm.jni.JNILibraryInitializer.callOnLoadFunction(JNILibraryInitializer.java:72)
at com.oracle.svm.jni.JNILibraryInitializer.initialize(JNILibraryInitializer.java:129)
at com.oracle.svm.core.jdk.NativeLibrarySupport.addLibrary(NativeLibrarySupport.java:185)
at com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibrary0(NativeLibrarySupport.java:141)
at com.oracle.svm.core.jdk.NativeLibrarySupport.loadLibrary(NativeLibrarySupport.java:108)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:270)
at java.lang.Runtime.loadLibrary0(Runtime.java:830)
at java.lang.Runtime.loadLibrary(Runtime.java:232)
at java.lang.System.loadLibrary(System.java:351)
at sun.java2d.cmm.lcms.LCMS$1.run(LCMS.java:208)
at java.security.AccessController.doPrivileged(AccessController.java:84)
at sun.java2d.cmm.lcms.LCMS.getModule(LCMS.java:202)
at sun.java2d.cmm.lcms.LcmsServiceProvider.getModule(LcmsServiceProvider.java:34)
at sun.java2d.cmm.CMMServiceProvider.getColorManagementModule(CMMServiceProvider.java:31)
at sun.java2d.cmm.CMSManager.getModule(CMSManager.java:68)
at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:790)
at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:1026)
at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:991)
at java.awt.color.ICC_Profile$2.run(ICC_Profile.java:940)
at java.awt.color.ICC_Profile$2.run(ICC_Profile.java:936)
at java.security.AccessController.doPrivileged(AccessController.java:84)
at java.awt.color.ICC_Profile.getStandardProfile(ICC_Profile.java:935)
at java.awt.color.ICC_Profile.getDeferredInstance(ICC_Profile.java:1067)
at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:854)
at java.awt.color.ColorSpace.getInstance(ColorSpace.java:298)
at com.sun.imageio.plugins.tiff.TIFFDecompressor.getRawImageTypeSpecifier(TIFFDecompressor.java:866)
at com.sun.imageio.plugins.tiff.TIFFImageReader.getImageTypes(TIFFImageReader.java:717)
at com.sun.imageio.plugins.tiff.TIFFImageReader.prepareRead(TIFFImageReader.java:979)
at com.sun.imageio.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1140)
at javax.imageio.ImageIO.read(ImageIO.java:1468)
at javax.imageio.ImageIO.read(ImageIO.java:1363)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:274)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:84)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:59)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:38)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder$1.processRequest(AmazonLambdaRecorder.java:148)
at io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop$1.run(AbstractLambdaPollLoop.java:79)
at java.lang.Thread.run(Thread.java:834)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)

For Apache Imaging:

"exceptionType": "java.lang.UnsupportedOperationException",
        "message": "Not implemented yet for GraalVM native images",
        "frames": [
            {
                "class": "sun.java2d.cmm.lcms.LCMS",
                "method": "initLCMS",
                "line": 48
            },
            {
                "class": "sun.java2d.cmm.lcms.LCMS",
                "method": "getModule",
                "line": 214
            },
            {
                "class": "sun.java2d.cmm.lcms.LcmsServiceProvider",
                "method": "getModule",
                "line": 34
            },
            {
                "class": "sun.java2d.cmm.CMMServiceProvider",
                "method": "getColorManagementModule",
                "line": 31
            },
            {
                "class": "sun.java2d.cmm.CMSManager",
                "method": "getModule",
                "line": 68
            },
            {
                "class": "java.awt.color.ICC_Profile",
                "method": "getInstance",
                "line": 790
            },
            {
                "class": "java.awt.color.ICC_Profile",
                "method": "getInstance",
                "line": 1026
            },
            {
                "class": "java.awt.color.ICC_Profile",
                "method": "getInstance",
                "line": 991
            },
            {
                "class": "java.awt.color.ICC_Profile$2",
                "method": "run",
                "line": 940
            },
            {
                "class": "java.awt.color.ICC_Profile$2",
                "method": "run",
                "line": 936
            },
            {
                "class": "java.security.AccessController",
                "method": "doPrivileged",
                "line": 84
            },
            {
                "class": "java.awt.color.ICC_Profile",
                "method": "getStandardProfile",
                "line": 935
            },
            {
                "class": "java.awt.color.ICC_Profile",
                "method": "getDeferredInstance",
                "line": 1067
            },
            {
                "class": "java.awt.color.ICC_Profile",
                "method": "getInstance",
                "line": 854
            },
            {
                "class": "java.awt.color.ColorSpace",
                "method": "getInstance",
                "line": 298
            },
            {
                "class": "java.awt.image.DirectColorModel",
                "method": "<init>",
                "line": 182
            },
            {
                "class": "java.awt.image.DirectColorModel",
                "method": "<init>",
                "line": 152
            },
            {
                "class": "org.apache.commons.imaging.common.ImageBuilder",
                "method": "makeBufferedImage",
                "line": 201
            },
            {
                "class": "org.apache.commons.imaging.common.ImageBuilder",
                "method": "getBufferedImage",
                "line": 131
            },
            {
                "class": "org.apache.commons.imaging.formats.tiff.TiffImageParser",
                "method": "getBufferedImage",
                "line": 666
            },
            {
                "class": "org.apache.commons.imaging.formats.tiff.TiffDirectory",
                "method": "getTiffImage",
                "line": 254
            },
            {
                "class": "org.apache.commons.imaging.formats.tiff.TiffImageParser",
                "method": "getBufferedImage",
                "line": 469
            },
            {
                "class": "org.apache.commons.imaging.Imaging",
                "method": "getBufferedImage",
                "line": 1442
            },
            {
                "class": "org.apache.commons.imaging.Imaging",
                "method": "getBufferedImage",
                "line": 1355
            },
            {
                "class": "kotlin.coroutines.jvm.internal.BaseContinuationImpl",
                "method": "resumeWith",
                "line": 33
            },
            {
                "class": "kotlinx.coroutines.DispatchedTask",
                "method": "run",
                "line": 56
            },
            {
                "class": "kotlinx.coroutines.EventLoopImplBase",
                "method": "processNextEvent",
                "line": 274
            },
            {
                "class": "kotlinx.coroutines.BlockingCoroutine",
                "method": "joinBlocking",
                "line": 84
            },
            {
                "class": "kotlinx.coroutines.BuildersKt__BuildersKt",
                "method": "runBlocking",
                "line": 59
            },
            {
                "class": "kotlinx.coroutines.BuildersKt",
                "method": "runBlocking",
                "line": 1
            },
            {
                "class": "kotlinx.coroutines.BuildersKt__BuildersKt",
                "method": "runBlocking$default",
                "line": 38
            },
            {
                "class": "kotlinx.coroutines.BuildersKt",
                "method": "runBlocking$default",
                "line": 1
            },
            {
                "class": "io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder$1",
                "method": "processRequest",
                "line": 148
            },
            {
                "class": "io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop$1",
                "method": "run",
                "line": 79
            },
            {
                "class": "java.lang.Thread",
                "method": "run",
                "line": 834
            },
            {
                "class": "com.oracle.svm.core.thread.JavaThreads",
                "method": "threadStartRoutine",
                "line": 519
            },
            {
                "class": "com.oracle.svm.core.posix.thread.PosixJavaThreads",
                "method": "pthreadStartRoutine",
                "line": 192
            }
        ]
@zakkak
Copy link
Collaborator

zakkak commented Nov 24, 2020

Hi @sherl0cks thanks for reporting this issue

I don't have a ready reproducer available, but you just need to build a native linux image that uses ImageIO.read or Imaging.getBufferedImage

I tried both and they both fail on upstream graal master as well, so the issue should be reported and tracked there instead.
Note that Mandrel is a downstream distribution of GraalVM, so issues should be first fixed upstream and then get backported to Mandrel.

I am marking this as pending-upstream and leaving it open.

@zakkak zakkak added the pending upstream Issue or PR pending action on upstream repository (oracle/graal) label Nov 24, 2020
@jerboaa
Copy link
Collaborator

jerboaa commented Nov 26, 2020

This is being tracked upstream as oracle#1163

I've added a comment that the current support is still insufficient for ImageIO:
oracle#1163 (comment)

Let's see if I can come with a patch to address these.

@jerboaa
Copy link
Collaborator

jerboaa commented Nov 27, 2020

So apparently most of the issues go away if you first pre-configure reflection and JNI via the native-image-agent. My testing shows ImageIO read/write working for all OpenJDK supported types except jpeg. I'm running into an issue for jpeg images which I'll look into next. I've used the Beta2 mandrel image (id: 3009043c5777) for this testing as it has the native-image-agent included.

$ cat TestImageIOWrite.java 
import static java.awt.image.BufferedImage.TYPE_BYTE_BINARY;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class TestImageIOWrite {

    static Color[] colors = new Color[] {
            Color.white, Color.red, Color.green,
            Color.blue, Color.black };

    static final int dx = 50;
    static final int h = 100;

    public static void main(String[] args) throws Exception {
        TestImageIOWrite iIo = new TestImageIOWrite();
        iIo.test();
    }

    private void test() throws IOException {
        BufferedImage src = createTestImage();

        String[] fileFormats = new String[] { /*"jpg",*/ "tiff", "bmp", "gif", "png", "wbmp" };
        for (int i = 0; i < fileFormats.length; i++) {
            String fName = "test." + fileFormats[i];
            File f = new File(fName);

            System.out.println("Writing image: " + fName);
            if (!ImageIO.write(src, fileFormats[i].toUpperCase(), f)) {
                throw new RuntimeException("Failed to write test image.");
            }
        }
        System.out.println("Test passed");
    }

    private static BufferedImage createTestImage() {
        BufferedImage img = new BufferedImage(dx * colors.length, h, TYPE_BYTE_BINARY);

        Graphics2D g = img.createGraphics();
        for (int i = 0; i < colors.length; i++) {
            g.setColor(colors[i]);
            g.fillRect(i * dx, 0, dx, h);
        }
        g.dispose();

        return img;
    }

}
$ rm -rf META-INF/native-image/* && podman run --rm --user $(id -u):$(id -u) --userns=keep-id -v $(pwd):/project:z --entrypoint /bin/bash quay.io/quarkus/ubi-quarkus-mandrel:20.3-java11 -c "javac -cp /project -d /project /project/TestImageIOWrite.java && java -agentlib:native-image-agent=config-output-dir=/project/META-INF/native-image TestImageIOWrite" && podman run --rm  --user $(id -u):$(id -u) --userns=keep-id -v $(pwd):/project:z quay.io/quarkus/ubi-quarkus-mandrel:20.3-java11 TestImageIOWrite testimageio-write
Writing image: test.tiff
Writing image: test.bmp
Writing image: test.gif
Writing image: test.png
Writing image: test.wbmp
Test passed
[testimageio-write:57]    classlist:   1,605.32 ms,  0.96 GB
[testimageio-write:57]        (cap):     655.70 ms,  0.96 GB
[testimageio-write:57]        setup:   2,299.70 ms,  0.96 GB
[testimageio-write:57]     (clinit):     415.38 ms,  2.30 GB
[testimageio-write:57]   (typeflow):  10,051.06 ms,  2.30 GB
[testimageio-write:57]    (objects):  11,401.89 ms,  2.30 GB
[testimageio-write:57]   (features):     666.22 ms,  2.30 GB
[testimageio-write:57]     analysis:  23,070.42 ms,  2.30 GB
[testimageio-write:57]     universe:   1,005.11 ms,  2.30 GB
[testimageio-write:57]      (parse):   3,562.94 ms,  2.30 GB
[testimageio-write:57]     (inline):   3,612.54 ms,  3.14 GB
[testimageio-write:57]    (compile):  19,568.23 ms,  3.30 GB
[testimageio-write:57]      compile:  27,954.96 ms,  3.30 GB
[testimageio-write:57]        image:   3,346.07 ms,  3.30 GB
[testimageio-write:57]        write:     465.67 ms,  3.30 GB
[testimageio-write:57]      [total]:  59,983.74 ms,  3.30 GB
$ ./testimageio-write 
Writing image: test.tiff
Writing image: test.bmp
Writing image: test.gif
Writing image: test.png
Writing image: test.wbmp
Test passed

This writes images test.tiff, test.bmp, test.git, test.png and test.wbmp in the current working directory. Those are needed for the ImageIO read test as follows:

$ cat TestImageIORead.java 
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.stream.ImageInputStream;

public class TestImageIORead {

    private void readImage() throws IOException {
        String[] fileFormats = new String[] { /*"jpg",*/ "tiff", "bmp", "gif", "png", "wbmp" };
        for (String ext: fileFormats) {
            String fileName = "test." + ext;
            File file = new File(fileName);
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            ImageReader reader = ImageIO.getImageReaders(iis).next();
            reader.setInput(iis);

            Iterator<ImageTypeSpecifier> type = reader.getImageTypes(0);
            System.out.println("Read file: " + fileName + " of type: " + type);
        }
    }

    public static void main(String[] args) throws Exception {
        TestImageIORead ioRead = new TestImageIORead();
        ioRead.readImage();
        System.out.println("Test passed!");
    }

}
$ rm -rf META-INF/native-image/* && podman run --rm --user $(id -u):$(id -u) --userns=keep-id -v $(pwd):/project:z --entrypoint /bin/bash quay.io/quarkus/ubi-quarkus-mandrel:20.3-java11 -c "javac -cp /project -d /project /project/TestImageIORead.java && java -agentlib:native-image-agent=config-output-dir=/project/META-INF/native-image TestImageIORead" && podman run --rm --user $(id -u):$(id -u) --userns=keep-id -v $(pwd):/project:z quay.io/quarkus/ubi-quarkus-mandrel:20.3-java11 TestImageIORead testimageio-read
Read file: test.tiff of type: java.util.ArrayList$Itr@72b6cbcc
Read file: test.bmp of type: java.util.ArrayList$Itr@7c29daf3
Read file: test.gif of type: java.util.ArrayList$Itr@7d0587f1
Read file: test.png of type: java.util.ArrayList$Itr@1e6d1014
Read file: test.wbmp of type: java.util.ArrayList$Itr@394e1a0f
Test passed!
[testimageio-read:57]    classlist:   1,726.75 ms,  0.96 GB
[testimageio-read:57]        (cap):     734.96 ms,  0.96 GB
[testimageio-read:57]        setup:   2,064.45 ms,  0.96 GB
[testimageio-read:57]     (clinit):     371.86 ms,  3.21 GB
[testimageio-read:57]   (typeflow):  11,949.41 ms,  3.21 GB
[testimageio-read:57]    (objects):  16,919.67 ms,  3.21 GB
[testimageio-read:57]   (features):     798.31 ms,  3.21 GB
[testimageio-read:57]     analysis:  30,662.99 ms,  3.21 GB
[testimageio-read:57]     universe:     874.58 ms,  3.21 GB
[testimageio-read:57]      (parse):   3,862.34 ms,  3.21 GB
[testimageio-read:57]     (inline):   3,776.73 ms,  3.21 GB
[testimageio-read:57]    (compile):  26,618.73 ms,  5.59 GB
[testimageio-read:57]      compile:  35,731.95 ms,  5.59 GB
[testimageio-read:57]        image:   3,690.41 ms,  5.59 GB
[testimageio-read:57]        write:     432.26 ms,  5.59 GB
[testimageio-read:57]      [total]:  75,383.54 ms,  5.59 GB
$ ./testimageio-read 
Read file: test.tiff of type: java.util.ArrayList$Itr@4b91aa0
Read file: test.bmp of type: java.util.ArrayList$Itr@70bde64a
Read file: test.gif of type: java.util.ArrayList$Itr@1a40bf4c
Read file: test.png of type: java.util.ArrayList$Itr@7bc0c973
Read file: test.wbmp of type: java.util.ArrayList$Itr@33588099
Test passed!

@jerboaa
Copy link
Collaborator

jerboaa commented Nov 27, 2020

Adding back in jpg, in TestImageIOWrite.java results in this when running the native image:

$ ./testimageio-write 
Writing image: test.jpg
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(Ljava/lang/Class;Ljava/lang/Class;)V [symbol: Java_com_sun_imageio_plugins_jpeg_JPEGImageWriter_initWriterIDs or Java_com_sun_imageio_plugins_jpeg_JPEGImageWriter_initWriterIDs__Ljava_lang_Class_2Ljava_lang_Class_2]
	at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:153)
	at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
	at com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(JPEGImageWriter.java)
	at com.sun.imageio.plugins.jpeg.JPEGImageWriter.<clinit>(JPEGImageWriter.java:184)
	at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:351)
	at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:271)
	at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:100)
	at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351)
	at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:849)
	at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:833)
	at javax.imageio.ImageIO.getWriter(ImageIO.java:1612)
	at javax.imageio.ImageIO.write(ImageIO.java:1540)
	at TestImageIOWrite.test(TestImageIOWrite.java:34)
	at TestImageIOWrite.main(TestImageIOWrite.java:22)

@jerboaa
Copy link
Collaborator

jerboaa commented Nov 27, 2020

Adding back in jpg, in TestImageIOWrite.java results in this when running the native image:

$ ./testimageio-write 
Writing image: test.jpg
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(Ljava/lang/Class;Ljava/lang/Class;)V [symbol: Java_com_sun_imageio_plugins_jpeg_JPEGImageWriter_initWriterIDs or Java_com_sun_imageio_plugins_jpeg_JPEGImageWriter_initWriterIDs__Ljava_lang_Class_2Ljava_lang_Class_2]
	at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:153)
	at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
	at com.sun.imageio.plugins.jpeg.JPEGImageWriter.initWriterIDs(JPEGImageWriter.java)
	at com.sun.imageio.plugins.jpeg.JPEGImageWriter.<clinit>(JPEGImageWriter.java:184)
	at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:351)
	at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:271)
	at com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi.createWriterInstance(JPEGImageWriterSpi.java:100)
	at javax.imageio.spi.ImageWriterSpi.createWriterInstance(ImageWriterSpi.java:351)
	at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:849)
	at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:833)
	at javax.imageio.ImageIO.getWriter(ImageIO.java:1612)
	at javax.imageio.ImageIO.write(ImageIO.java:1540)
	at TestImageIOWrite.test(TestImageIOWrite.java:34)
	at TestImageIOWrite.main(TestImageIOWrite.java:22)

Tracked upstream with:
oracle#3031

@galderz
Copy link
Collaborator

galderz commented Nov 30, 2020

Created quarkusio/quarkus#13567 to add the necessary configuration to quarkus to enable this use case.

@jerboaa
Copy link
Collaborator

jerboaa commented Mar 25, 2021

This seems to be working fine with the latest mandrel 21.0 image:

$ cat TestImageIOWrite.java 
import static java.awt.image.BufferedImage.TYPE_BYTE_BINARY;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class TestImageIOWrite {

    static Color[] colors = new Color[] {
            Color.white, Color.red, Color.green,
            Color.blue, Color.black };

    static final int dx = 50;
    static final int h = 100;

    public static void main(String[] args) throws Exception {
        TestImageIOWrite iIo = new TestImageIOWrite();
        iIo.test();
    }

    private void test() throws IOException {
        BufferedImage src = createTestImage();

        String[] fileFormats = new String[] { "jpg", "tiff", "bmp", "gif", "png", "wbmp" };
        for (int i = 0; i < fileFormats.length; i++) {
            String fName = "test." + fileFormats[i];
            File f = new File(fName);

            System.out.println("Writing image: " + fName);
            if (!ImageIO.write(src, fileFormats[i].toUpperCase(), f)) {
                throw new RuntimeException("Failed to write test image.");
            }
        }
        System.out.println("Test passed");
    }

    private static BufferedImage createTestImage() {
        BufferedImage img = new BufferedImage(dx * colors.length, h, TYPE_BYTE_BINARY);

        Graphics2D g = img.createGraphics();
        for (int i = 0; i < colors.length; i++) {
            g.setColor(colors[i]);
            g.fillRect(i * dx, 0, dx, h);
        }
        g.dispose();

        return img;
    }

}
$ cat TestImageIORead.java 
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.stream.ImageInputStream;

public class TestImageIORead {

    private void readImage() throws IOException {
        String[] fileFormats = new String[] { "jpg", "tiff", "bmp", "gif", "png", "wbmp" };
        for (String ext: fileFormats) {
            String fileName = "test." + ext;
            File file = new File(fileName);
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            ImageReader reader = ImageIO.getImageReaders(iis).next();
            reader.setInput(iis);

            Iterator<ImageTypeSpecifier> type = reader.getImageTypes(0);
            System.out.println("Read file: " + fileName + " of type: " + type);
        }
    }

    public static void main(String[] args) throws Exception {
        TestImageIORead ioRead = new TestImageIORead();
        ioRead.readImage();
        System.out.println("Test passed!");
    }

}
$ podman run --rm -ti --entrypoint /bin/bash -v $(pwd):/project:z --user $(id -u):$(id -u) --userns=keep-id quay.io/quarkus/ubi-quarkus-mandrel:21.0-java11
bash-4.4$ cat run_imageio_tests.sh 
set -e
export MANDREL_HOME=$JAVA_HOME
$MANDREL_HOME/bin/javac TestImageIOWrite.java && rm -rf META-INF/native-image/* && mkdir -p META-INF/native-image && $MANDREL_HOME/bin/java -agentlib:native-image-agent=config-output-dir=META-INF/native-image TestImageIOWrite && $MANDREL_HOME/bin/native-image -H:+TraceNativeToolUsage TestImageIOWrite imageio-write && ./imageio-write
$MANDREL_HOME/bin/javac TestImageIORead.java && rm -rf META-INF/native-image/* && mkdir -p META-INF/native-image && $MANDREL_HOME/bin/java -agentlib:native-image-agent=config-output-dir=META-INF/native-image TestImageIORead && $MANDREL_HOME/bin/native-image -H:+TraceNativeToolUsage TestImageIORead imageio-read && ./imageio-read
bash-4.4$ bash run_imageio_tests.sh 
Writing image: test.jpg
Writing image: test.tiff
Writing image: test.bmp
Writing image: test.gif
Writing image: test.png
Writing image: test.wbmp
Test passed
[imageio-write:96]    classlist:   1,239.79 ms,  0.96 GB
>> /usr/bin/gcc -v 
># Using built-in specs.
># COLLECT_GCC=/usr/bin/gcc
># COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
># OFFLOAD_TARGET_NAMES=nvptx-none
># OFFLOAD_TARGET_DEFAULT=1
># Target: x86_64-redhat-linux
># Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
># Thread model: posix
># gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) 
>> /usr/bin/gcc -Wall -Werror -I/opt/mandrel/include/linux -o /tmp/SVM-17509314944207887355/JNIHeaderDirectives /tmp/SVM-17509314944207887355/JNIHeaderDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-17509314944207887355/BuiltinDirectives /tmp/SVM-17509314944207887355/BuiltinDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-17509314944207887355/AMD64LibCHelperDirectives /tmp/SVM-17509314944207887355/AMD64LibCHelperDirectives.c 
>> /usr/bin/gcc -Wall -Werror -I/opt/mandrel/include -I/opt/mandrel/include/linux -o /tmp/SVM-17509314944207887355/JNIHeaderDirectives /tmp/SVM-17509314944207887355/JNIHeaderDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-17509314944207887355/PosixDirectives /tmp/SVM-17509314944207887355/PosixDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-17509314944207887355/AArch64LibCHelperDirectives /tmp/SVM-17509314944207887355/AArch64LibCHelperDirectives.c 
[imageio-write:96]        (cap):     727.34 ms,  0.96 GB
[imageio-write:96]        setup:   2,434.54 ms,  0.96 GB
[imageio-write:96]     (clinit):     325.91 ms,  2.31 GB
[imageio-write:96]   (typeflow):  10,249.34 ms,  2.31 GB
[imageio-write:96]    (objects):  12,409.94 ms,  2.31 GB
[imageio-write:96]   (features):     592.04 ms,  2.31 GB
[imageio-write:96]     analysis:  24,029.40 ms,  2.31 GB
[imageio-write:96]     universe:     722.71 ms,  2.31 GB
[imageio-write:96]      (parse):   3,540.99 ms,  2.31 GB
[imageio-write:96]     (inline):   5,891.39 ms,  3.15 GB
[imageio-write:96]    (compile):  19,447.24 ms,  5.10 GB
[imageio-write:96]      compile:  30,112.16 ms,  5.53 GB
[imageio-write:96]        image:   2,660.16 ms,  5.53 GB
>> /usr/bin/gcc -z noexecstack -Wl,--gc-sections -Wl,--dynamic-list -Wl,/tmp/SVM-17509314944207887355/exported_symbols.list -Wl,--exclude-libs,ALL -Wl,-x -o /project/imageio-write imageio-write.o /opt/mandrel/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/mandrel/lib/static/linux-amd64/glibc/liblcms.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt_headless.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt.a /opt/mandrel/lib/static/linux-amd64/glibc/libnet.a /opt/mandrel/lib/static/linux-amd64/glibc/libjavajpeg.a /opt/mandrel/lib/static/linux-amd64/glibc/libnio.a /opt/mandrel/lib/static/linux-amd64/glibc/libjava.a /opt/mandrel/lib/static/linux-amd64/glibc/libfdlibm.a /opt/mandrel/lib/static/linux-amd64/glibc/libzip.a /opt/mandrel/lib/svm/clibraries/linux-amd64/libjvm.a -v -L/tmp/SVM-17509314944207887355 -L/opt/mandrel/lib/static/linux-amd64/glibc -L/opt/mandrel/lib/svm/clibraries/linux-amd64 -lstdc++ -lm -lpthread -ldl -lz -lrt 
># Using built-in specs.
># COLLECT_GCC=/usr/bin/gcc
># COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
># OFFLOAD_TARGET_NAMES=nvptx-none
># OFFLOAD_TARGET_DEFAULT=1
># Target: x86_64-redhat-linux
># Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
># Thread model: posix
># gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) 
># COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/
># LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/
># COLLECT_GCC_OPTIONS='-z' 'noexecstack' '-o' '/project/imageio-write' '-v' '-L/tmp/SVM-17509314944207887355' '-L/opt/mandrel/lib/static/linux-amd64/glibc' '-L/opt/mandrel/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
>#  /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/ccwjkDuK.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o /project/imageio-write -z noexecstack /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/tmp/SVM-17509314944207887355 -L/opt/mandrel/lib/static/linux-amd64/glibc -L/opt/mandrel/lib/svm/clibraries/linux-amd64 -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. --gc-sections --dynamic-list /tmp/SVM-17509314944207887355/exported_symbols.list --exclude-libs ALL -x imageio-write.o /opt/mandrel/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/mandrel/lib/static/linux-amd64/glibc/liblcms.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt_headless.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt.a /opt/mandrel/lib/static/linux-amd64/glibc/libnet.a /opt/mandrel/lib/static/linux-amd64/glibc/libjavajpeg.a /opt/mandrel/lib/static/linux-amd64/glibc/libnio.a /opt/mandrel/lib/static/linux-amd64/glibc/libjava.a /opt/mandrel/lib/static/linux-amd64/glibc/libfdlibm.a /opt/mandrel/lib/static/linux-amd64/glibc/libzip.a /opt/mandrel/lib/svm/clibraries/linux-amd64/libjvm.a -lstdc++ -lm -lpthread -ldl -lz -lrt -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o
># COLLECT_GCC_OPTIONS='-z' 'noexecstack' '-o' '/project/imageio-write' '-v' '-L/tmp/SVM-17509314944207887355' '-L/opt/mandrel/lib/static/linux-amd64/glibc' '-L/opt/mandrel/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
[imageio-write:96]        write:     443.50 ms,  5.53 GB
[imageio-write:96]      [total]:  61,800.64 ms,  5.53 GB
Writing image: test.jpg
Writing image: test.tiff
Writing image: test.bmp
Writing image: test.gif
Writing image: test.png
Writing image: test.wbmp
Test passed
Read file: test.jpg of type: com.sun.imageio.plugins.jpeg.ImageTypeIterator@ae45eb6
Read file: test.tiff of type: java.util.ArrayList$Itr@6c49835d
Read file: test.bmp of type: java.util.ArrayList$Itr@4f063c0a
Read file: test.gif of type: java.util.ArrayList$Itr@1c3a4799
Read file: test.png of type: java.util.ArrayList$Itr@711f39f9
Read file: test.wbmp of type: java.util.ArrayList$Itr@1786dec2
Test passed!
[imageio-read:304]    classlist:   1,714.57 ms,  0.96 GB
>> /usr/bin/gcc -v 
># Using built-in specs.
># COLLECT_GCC=/usr/bin/gcc
># COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
># OFFLOAD_TARGET_NAMES=nvptx-none
># OFFLOAD_TARGET_DEFAULT=1
># Target: x86_64-redhat-linux
># Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
># Thread model: posix
># gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-10313370476022294783/AArch64LibCHelperDirectives /tmp/SVM-10313370476022294783/AArch64LibCHelperDirectives.c 
>> /usr/bin/gcc -Wall -Werror -I/opt/mandrel/include -I/opt/mandrel/include/linux -o /tmp/SVM-10313370476022294783/JNIHeaderDirectives /tmp/SVM-10313370476022294783/JNIHeaderDirectives.c 
>> /usr/bin/gcc -Wall -Werror -I/opt/mandrel/include/linux -o /tmp/SVM-10313370476022294783/JNIHeaderDirectives /tmp/SVM-10313370476022294783/JNIHeaderDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-10313370476022294783/PosixDirectives /tmp/SVM-10313370476022294783/PosixDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-10313370476022294783/BuiltinDirectives /tmp/SVM-10313370476022294783/BuiltinDirectives.c 
>> /usr/bin/gcc -Wall -Werror -o /tmp/SVM-10313370476022294783/AMD64LibCHelperDirectives /tmp/SVM-10313370476022294783/AMD64LibCHelperDirectives.c 
[imageio-read:304]        (cap):     838.49 ms,  0.96 GB
[imageio-read:304]        setup:   3,054.70 ms,  0.96 GB
[imageio-read:304]     (clinit):     431.66 ms,  3.19 GB
[imageio-read:304]   (typeflow):  12,895.41 ms,  3.19 GB
[imageio-read:304]    (objects):  14,795.35 ms,  3.19 GB
[imageio-read:304]   (features):     673.40 ms,  3.19 GB
[imageio-read:304]     analysis:  29,335.94 ms,  3.19 GB
[imageio-read:304]     universe:     785.64 ms,  3.19 GB
[imageio-read:304]      (parse):   3,655.29 ms,  3.19 GB
[imageio-read:304]     (inline):   6,955.71 ms,  3.20 GB
[imageio-read:304]    (compile):  22,631.86 ms,  4.43 GB
[imageio-read:304]      compile:  34,627.27 ms,  4.43 GB
[imageio-read:304]        image:   2,866.62 ms,  4.50 GB
>> /usr/bin/gcc -z noexecstack -Wl,--gc-sections -Wl,--dynamic-list -Wl,/tmp/SVM-10313370476022294783/exported_symbols.list -Wl,--exclude-libs,ALL -Wl,-x -o /project/imageio-read imageio-read.o /opt/mandrel/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/mandrel/lib/static/linux-amd64/glibc/liblcms.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt_headless.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt.a /opt/mandrel/lib/static/linux-amd64/glibc/libnet.a /opt/mandrel/lib/static/linux-amd64/glibc/libjavajpeg.a /opt/mandrel/lib/static/linux-amd64/glibc/libnio.a /opt/mandrel/lib/static/linux-amd64/glibc/libjava.a /opt/mandrel/lib/static/linux-amd64/glibc/libfdlibm.a /opt/mandrel/lib/static/linux-amd64/glibc/libzip.a /opt/mandrel/lib/svm/clibraries/linux-amd64/libjvm.a -v -L/tmp/SVM-10313370476022294783 -L/opt/mandrel/lib/static/linux-amd64/glibc -L/opt/mandrel/lib/svm/clibraries/linux-amd64 -lstdc++ -lm -lpthread -ldl -lz -lrt 
># Using built-in specs.
># COLLECT_GCC=/usr/bin/gcc
># COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
># OFFLOAD_TARGET_NAMES=nvptx-none
># OFFLOAD_TARGET_DEFAULT=1
># Target: x86_64-redhat-linux
># Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --disable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
># Thread model: posix
># gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) 
># COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/8/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/
># LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/8/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/8/../../../:/lib/:/usr/lib/
># COLLECT_GCC_OPTIONS='-z' 'noexecstack' '-o' '/project/imageio-read' '-v' '-L/tmp/SVM-10313370476022294783' '-L/opt/mandrel/lib/static/linux-amd64/glibc' '-L/opt/mandrel/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
>#  /usr/libexec/gcc/x86_64-redhat-linux/8/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/8/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7T5xVC.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o /project/imageio-read -z noexecstack /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o -L/tmp/SVM-10313370476022294783 -L/opt/mandrel/lib/static/linux-amd64/glibc -L/opt/mandrel/lib/svm/clibraries/linux-amd64 -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. --gc-sections --dynamic-list /tmp/SVM-10313370476022294783/exported_symbols.list --exclude-libs ALL -x imageio-read.o /opt/mandrel/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/mandrel/lib/static/linux-amd64/glibc/liblcms.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt_headless.a /opt/mandrel/lib/static/linux-amd64/glibc/libawt.a /opt/mandrel/lib/static/linux-amd64/glibc/libnet.a /opt/mandrel/lib/static/linux-amd64/glibc/libjavajpeg.a /opt/mandrel/lib/static/linux-amd64/glibc/libnio.a /opt/mandrel/lib/static/linux-amd64/glibc/libjava.a /opt/mandrel/lib/static/linux-amd64/glibc/libfdlibm.a /opt/mandrel/lib/static/linux-amd64/glibc/libzip.a /opt/mandrel/lib/svm/clibraries/linux-amd64/libjvm.a -lstdc++ -lm -lpthread -ldl -lz -lrt -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/8/crtend.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o
># COLLECT_GCC_OPTIONS='-z' 'noexecstack' '-o' '/project/imageio-read' '-v' '-L/tmp/SVM-10313370476022294783' '-L/opt/mandrel/lib/static/linux-amd64/glibc' '-L/opt/mandrel/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
[imageio-read:304]        write:     422.36 ms,  4.50 GB
[imageio-read:304]      [total]:  73,031.44 ms,  4.50 GB
Read file: test.jpg of type: com.sun.imageio.plugins.jpeg.ImageTypeIterator@1f4ae18b
Read file: test.tiff of type: java.util.ArrayList$Itr@aed6cdc
Read file: test.bmp of type: java.util.ArrayList$Itr@2ab70030
Read file: test.gif of type: java.util.ArrayList$Itr@551540f1
Read file: test.png of type: java.util.ArrayList$Itr@5bf3d715
Read file: test.wbmp of type: java.util.ArrayList$Itr@5482e868
Test passed!
bash-4.4$

Closing, as it's fixed with quay.io/quarkus/ubi-quarkus-mandrel:21.0-java11

@jerboaa jerboaa closed this as completed Mar 25, 2021
@zakkak zakkak removed the pending upstream Issue or PR pending action on upstream repository (oracle/graal) label Jul 6, 2021
@galderz
Copy link
Collaborator

galderz commented Sep 30, 2021

@sherl0cks I think the java.lang.NoSuchMethodError: java.lang.System.load(Ljava/lang/String;) error you were getting was genuine and it's still present in Mandrel 21.2, see #292 (comment)

@sherl0cks
Copy link
Author

@galderz the saga continues. Thanks for your update.

@galderz
Copy link
Collaborator

galderz commented Oct 1, 2021

@sherl0cks The saga has come to an end, see #292 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working not-Stale
Projects
None yet
Development

No branches or pull requests

4 participants