0

I´m working on a big application and we use Mavem bundle plug in in our proxy to make it small! I´m having problems importing some needed library for handling some kind of images (jpeg2000 and jbig2) needed by PDFbox.

Here is my pom (part of it)

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

  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>xxxx</groupId>
    <artifactId>xxx</artifactId>
    <version>2.0.7</version>
</parent>

<artifactId>proxy-bundle</artifactId>
<name>Front-End Proxy Bundle</name>
<version>${proxy.version}</version>
<packaging>bundle</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<profiles>
    <profile>
        <id>compile-entity-schemas</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <version>0.8.3</version>
                    <executions>
                        <execution>
                            <id>entity-schemas</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                            <configuration>
                                <extension>true</extension>
                                <schemaDirectory>src/main/resources/schema</schemaDirectory>
                                <schemaIncludes>
                                    <schemaInclude>text-form-configuration.xsd</schemaInclude>
                                </schemaIncludes>
                                <generateDirectory>src/main/java</generateDirectory>
                                <generatePackage>xxx</generatePackage>
                                <args>
                                    <arg>-no-header</arg>
                                    <arg>-extension</arg>
                                </args>
                                <plugins>
                                    <plugin>
                                        <groupId>org.jvnet.jaxb2_commons</groupId>
                                        <artifactId>jaxb2-basics</artifactId>
                                        <version>0.6.4</version>
                                    </plugin>
                                </plugins>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

<build>
    <finalName>proxy-bundle</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>invalid_image.png</exclude>
                <exclude>bfa_logo.png</exclude>
                <exclude>footer_image.png</exclude>
                <exclude>check-front-image-template.jpg</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>invalid_image.png</include>
                <include>bfa_logo.png</include>
                <include>footer_image.png</include>
                <include>check-front-image-template.jpg</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.7</version>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <goals>
                        <goal>install</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <instructions>
                    <Import-Package>
                        org.apache.pdfbox;version="[0.0,3)",
                        org.apache.pdfbox.cos.*;version="[0.0,3)",
                        com.levigo.jbig2.*;version="[0.0,3)",
                        com.github.jaiimageio.jpeg2000.*;version="[0.0,3)",
                        com.github.jaiimageio.*;version="[0.0,3)",
                        org.apache.commons.configuration;version="[0.0,2)",
                        org.apache.commons.logging;version="[0.0,2)",
                        org.apache.commons.io.*;version="[0.0,3)",
                        org.slf4j;version="[0.0,2)",
                        org.apache.commons.jcs.*;version="[0.0,3)",
                        eu.bitwalker.useragentutils.*;version="[0.0,3)",
                        *
                    </Import-Package>
                    <Bundle-Activator>com.criticalsoftware.frontend.proxy.main.ProxyBundleActivator</Bundle-Activator>
                    <Bundle-ClassPath>.,{maven-dependencies}</Bundle-ClassPath>
                </instructions>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.zeroturnaround</groupId>
            <artifactId>jrebel-maven-plugin</artifactId>
             <version>${jrebel-maven-plugin.version}</version>
            <executions>
                <execution>
                    <id>generate-rebel-xml</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>xxx</groupId>
            <artifactId>jrebel-remote-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <id>generate-rebel-remote-xml</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>remote-generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.zeroturnaround
                                    </groupId>
                                    <artifactId>jrebel-maven-plugin</artifactId>
                                    <versionRange>
                                        [1.1.0,)
                                    </versionRange>
                                    <goals>
                                        <goal>generate</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<dependencies>
    <!-- Dev Model -->
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>jcc-core-common</artifactId>
    </dependency>

    <dependency>
        <groupId>xxx</groupId>
        <artifactId>jcu-core-utils-common</artifactId>
    </dependency>

    <!-- Web Server -->
    <dependency>
        <groupId>org.simpleframework</groupId>
        <artifactId>simple</artifactId>
    </dependency>

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>javase</artifactId>
    </dependency>

    <!-- Logging -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>

    <!-- Apache Commons -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
    </dependency>

    <!-- Serialization -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-runtime</artifactId>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>

    <!-- Image Editing -->
    <dependency>
        <groupId>com.jhlabs</groupId>
        <artifactId>filters</artifactId>
    </dependency>
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>image-detector-api</artifactId>
    </dependency>

    <!-- PDF -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox-tools</artifactId>
    </dependency>
    <dependency>
        <groupId>com.levigo.jbig2</groupId>
        <artifactId>levigo-jbig2-imageio</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-jpeg2000</artifactId>
    </dependency>

    <!-- OSGi -->
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.osgi.core</artifactId>
    </dependency>

    <!-- Others -->
    <dependency>
        <groupId>com.sun.jna</groupId>
        <artifactId>jna</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jcs-core</artifactId>
    </dependency>
    <!-- Necessary to fix parallel build when the maven repository is empty -->
    <dependency>
        <groupId>xxxs</groupId>
        <artifactId>xxx</artifactId>
        <version>${project.version}</version>
        <scope>compile</scope>
        <type>pom</type>
    </dependency>

    <!-- UA Utils -->
    <dependency>
        <groupId>eu.bitwalker</groupId>
        <artifactId>UserAgentUtils</artifactId>
    </dependency>

    <!-- test -->
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

I fixed the Import Package and i dont have The warnings anymore!

> [INFO] --- maven-bundle-plugin:2.3.7:bundle (default-bundle) @ proxy-bundle >!--- [WARNING] Bundle com.criticalsoftware.frontend:proxy-bundle:bundle:2.0.7 : Did >!not find matching referal for com.github.jai-imageio.* [WARNING] Bundle com.criticalsoftware.frontend:proxy-bundle:bundle:2.0.7 : Did >!not find matching referal for com.levigo.jbig2.* [WARNING] Bundle com.criticalsoftware.frontend:proxy-bundle:bundle:2.0.7 : Did >!not find matching referal for org.apache.pdfbox.cos.*

Here is my nethod where pdfBox uses those libraries and i get an exception inthe try/catch block!

private static boolean checkPDFImagesSize(PDDocument document) {
PDPageTree list = document.getPages();
PDXObject o;
for (PDPage page : list) {
    PDResources pdResources = page.getResources();
    for (COSName cosName : pdResources.getXObjectNames()) {
        try {
            o = pdResources.getXObject(cosName);
        } catch (IOException e) {
            throw ProxyRuntimeException.of(ExceptionCodes.ERROR_GENERATING_PDF_IMAGES);
        }
        if (o instanceof org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) {
            if (((PDImageXObject) o).getHeight() * ((PDImageXObject) o).getWidth() * ((PDImageXObject) o)
                    .getBitsPerComponent() * 3.0 > ALERT_IMAGE_SIZE_INSIDE_PDF) {
                return false;
            }
        }
    }
}
return true;

}

When debuging in IntelliJ i got this!

org.apache.pdfbox.filter.MissingImageReaderException: Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed

12
  • Do you get any import errors in Apache Felix Console (/system/console/bundles)? Are the imports you defined in the manifest satisfied? Commented Apr 21, 2017 at 15:45
  • Where can i check that!? But i don´t get any errors on compile, but in runtime, i get that exception! :( Commented Apr 21, 2017 at 17:11
  • You can check that in the Apache Felix Console that you find at http://<domain>:<port>/system/console/bundles. There you can click on the bundle to see if all required classes could be imported. If not it will be shown to you. Look at the image in this question. It should look a lot like this: stackoverflow.com/q/43242977/190823 You probably have a very similar issue. Commented Apr 21, 2017 at 17:16
  • I cant access the console! Is there another way? :( Commented Apr 21, 2017 at 17:47
  • What is the error you get? Why can't you access the console? Commented Apr 21, 2017 at 17:48

1 Answer 1

1

I was looking at the wrong issue! The problem was not in the JPEG2000/JBIG2 dependencies but in the javax.imageio.spi.ServiceRegistry which has a none issue with ServiceLoder in OSGi and is called from PDFBox. As here is described: OSGi java.Util.ServiceLoader

So i had to implement this solution. OSGi Aries spi-fly

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.