javawildflynoclassdeffounderrorjavax.imageiojai

Add jai as wildfly module


I have a java bean project, I need to use jai, so I add a maven depedendency

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-core</artifactId>
    <version>1.3.1</version>   
</dependency>

I try to add new module to wildfly 9 like

module.xml

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.3" name="com.github.jaiimageio">
    <resources>
        <resource-root path="jai-imageio-core-1.3.1.jar"/>
    </resources>
</module>

Then I add a jar from mvnrepo And put jar+module.xml in

wildfly-9.0.2.Final\modules\system\layers\base\com\github\jaiimageio\main

Then in my Java project

jboss-deployment-structure.xml

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.jboss.ejb3"/>
            <module name="org.jboss.ws.api"/>
            <module name="org.apache.cxf"/>
            <module name="org.jboss.ws.cxf.jbossws-cxf-server"/>
            <module name="com.github.jaiimageio"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

But when I am trying to call my java bean I've got an exception

Caused by: java.util.NoSuchElementException
    at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:836)
    at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:842)
    at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:827)
    at ru.shop.createFile.CreateFileBean.write_tiff(CreateFileBean.java:541)
    at ru.shop.createFile.CreateFileBean.testAdd(CreateFileBean.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82)
    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93)
    at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:73)
    at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ejb3.component.interceptors.NonPooledEJBComponentInstanceAssociatingInterceptor.processInvocation(NonPooledEJBComponentInstanceAssociatingInterceptor.java:59)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275)
    ... 79 more

My code:

private void write_tiff() throws IOException
    {   
        RenderedImage image=javax.imageio.ImageIO.read(new File("C:\\users\\user\\Desktop\\examples\\srts.jpg"));   
        RenderedImage image1=javax.imageio.ImageIO.read(new File("C:\\users\\user\\Desktop\\examples\\passport.jpg"));

        Iterator<ImageWriter> iterator=ImageIO.getImageWritersByFormatName("TIFF");
        System.out.println(iterator.hasNext());

        ImageWriter writer=iterator.next();
    }

ImageIO.getImageWritersByFormatName("TIFF") returns null.

But if I call this method from java application, not in java bean, everything is ok.

I tried to chande modulename to com.github.jai-imageio , but nothing chandes.

Can anybody help me?


Solution

  • I can solve this problem without adding jars to ext of jvm

    Code:

    ImageIO.scanForPlugins();
    ByteArrayOutputStream output_stream=new ByteArrayOutputStream();            
    try 
    {
        ImageOutputStream output = ImageIO.createImageOutputStream(output_stream);
        ImageWriter writer = new TIFFImageWriterSpi().createWriterInstance();
        writer.setOutput(output);
        writer.prepareWriteSequence(null);
        writeToSequence(new IIOImage(ImageIO.read(new ByteArrayInputStream(bytes)),null,null),null);
        writer.endWriteSequence();
        writer.dispose();           
        output.flush();
        output.close(); 
    

    pom dependency:

    <dependency>
        <groupId>com.sun.media</groupId>
        <artifactId>jai_imageio</artifactId>
        <version>1.2-pre-dr-b04</version>
    </dependency>
    

    module.xml (wildfly\modules\system\layers\base\com\sun\media\imageio\main)

    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.1" name="com.sun.media.imageio">
        <resources>
            <resource-root path="jai_imageio-1.2-pre-dr-b04.jar"/>
            <resource-root path="clibwrapper_jiio-1.2-pre-dr-b04.jar"/>
        </resources>
    
        <dependencies>
            <module name="javax.api"/>
        </dependencies>
    </module>