DocX in POI 5.2.3

Chrisi0123

Mitglied
Ich habe versucht in POI ein DOCX Dokumen zu erstellen.

Hier ist das Beispiel !

Dabei hatte ich folgende Meldung:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream
at testdoc.WordDoc.main(WordDoc.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more

Was ist das Problem ?
 

KonradN

Super-Moderator
Mitarbeiter
Du hast die Klasse UnsynchronizedByteArrayOutputStream nicht Classpath, d.h. es fehlt schlicht eine Abhängigkeit.

Sieht nach Apache Commons aus.
 

Chrisi0123

Mitglied
Neben Commons brauche ich noch log4j und slf4j .

Ich bekomme noch folgende Fehlermeldung:
ERROR StatusLogger Unable to create class org.apache.logging.log4j.tojul.JULLoggerContextFactory specified in provider URL null
java.lang.IllegalStateException: log4j-jul JAR is mutually exclusive with the log4j-to-jul JAR(the first routes calls from Log4j to JUL, the second from Log4j to JUL)
at org.apache.logging.log4j.tojul.JULLoggerContextFactory.<init>(JULLoggerContextFactory.java:46)
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.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:166)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:404)
at java.base/java.lang.Class.newInstance(Class.java:591)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:95)
at org.apache.poi.ooxml.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
at testdoc.WordDoc.main(WordDoc.java:11)
SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.base/sun.security.provider.X509Factory.commitEvent(X509Factory.java:773)
at java.base/sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:108)
at java.base/java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:355)
at java.base/sun.security.pkcs.PKCS7.parseSignedData(PKCS7.java:328)
at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:186)
at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:154)
at java.base/sun.security.pkcs.PKCS7.<init>(PKCS7.java:136)
at java.base/sun.security.util.SignatureFileVerifier.<init>(SignatureFileVerifier.java:126)
at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:297)
at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:230)
at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:758)
at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1035)
at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:873)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:807)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:36)
at org.apache.logging.log4j.spi.LoggerContext.getLogger(LoggerContext.java:46)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
at org.apache.poi.ooxml.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
at testdoc.WordDoc.main(WordDoc.java:11)
Caused by: java.lang.SecurityException: class "org.slf4j.spi.LoggingEventBuilder"'s signer information does not match signer information of other classes in the same package
at java.base/java.lang.ClassLoader.checkCerts(ClassLoader.java:1150)
at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:905)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1014)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:50)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:33)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:209)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:36)
at org.apache.logging.log4j.jpl.Log4jSystemLoggerAdapter.newLogger(Log4jSystemLoggerAdapter.java:37)
at org.apache.logging.log4j.jpl.Log4jSystemLoggerAdapter.newLogger(Log4jSystemLoggerAdapter.java:33)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.log4j.jpl.Log4jSystemLoggerFinder.getLogger(Log4jSystemLoggerFinder.java:31)
at java.base/jdk.internal.logger.LazyLoggers.getLoggerFromFinder(LazyLoggers.java:389)
at java.base/jdk.internal.logger.LazyLoggers$1.apply(LazyLoggers.java:353)
at java.base/jdk.internal.logger.LazyLoggers$1.apply(LazyLoggers.java:350)
at java.base/jdk.internal.logger.LazyLoggers$LazyLoggerAccessor.createLogger(LazyLoggers.java:278)
at java.base/jdk.internal.logger.BootstrapLogger.getLogger(BootstrapLogger.java:956)
at java.base/jdk.internal.logger.LazyLoggers$LazyLoggerAccessor.wrapped(LazyLoggers.java:165)
at java.base/jdk.internal.logger.LazyLoggers$LazyLoggerWrapper.wrapped(LazyLoggers.java:318)
at java.base/jdk.internal.logger.AbstractLoggerWrapper.isLoggable(AbstractLoggerWrapper.java:68)
at java.base/jdk.internal.event.EventHelper.<clinit>(EventHelper.java:47)
... 25 more

Braucht man da noch eine POM ? Vielleicht gibt es noch Verweise für weiterführende Informationen.
 

KonradN

Super-Moderator
Mitarbeiter
Jetzt hast Du zu viel drin. Die Beschreibiung sagt es ja schon:
log4j-jul JAR is mutually exclusive with the log4j-to-jul JAR(the first routes calls from Log4j to JUL, the second from Log4j to JUL)

Du hast also sowohl log4-jul als auch log4j-to-jul bei Dir im Classpath. Das erste sagt: log4j soll alle Meldungen an jul geben und das zweite eben in die andere Richtung. Du musst Dich auf eins festlegen.
 

Chrisi0123

Mitglied
Habe jetzt die nächste Meldung:

SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.base/sun.security.provider.X509Factory.commitEvent(X509Factory.java:773)
at java.base/sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:108)
at java.base/java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:355)
at java.base/sun.security.pkcs.PKCS7.parseSignedData(PKCS7.java:328)
at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:186)
at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:154)
at java.base/sun.security.pkcs.PKCS7.<init>(PKCS7.java:136)
at java.base/sun.security.util.SignatureFileVerifier.<init>(SignatureFileVerifier.java:126)
at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:297)
at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:230)
at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:758)
at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1035)
at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:873)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:807)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:36)
at org.apache.logging.log4j.spi.LoggerContext.getLogger(LoggerContext.java:46)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:599)
at org.apache.poi.ooxml.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
at testdoc.WordDoc.main(WordDoc.java:11)
Caused by: java.lang.SecurityException: class "org.slf4j.spi.LoggingEventBuilder"'s signer information does not match signer information of other classes in the same package
at java.base/java.lang.ClassLoader.checkCerts(ClassLoader.java:1150)
at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:905)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1014)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:50)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:33)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:209)
at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:36)
at org.apache.logging.log4j.jpl.Log4jSystemLoggerAdapter.newLogger(Log4jSystemLoggerAdapter.java:37)
at org.apache.logging.log4j.jpl.Log4jSystemLoggerAdapter.newLogger(Log4jSystemLoggerAdapter.java:33)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.log4j.jpl.Log4jSystemLoggerFinder.getLogger(Log4jSystemLoggerFinder.java:31)
at java.base/jdk.internal.logger.LazyLoggers.getLoggerFromFinder(LazyLoggers.java:389)
at java.base/jdk.internal.logger.LazyLoggers$1.apply(LazyLoggers.java:353)
at java.base/jdk.internal.logger.LazyLoggers$1.apply(LazyLoggers.java:350)
at java.base/jdk.internal.logger.LazyLoggers$LazyLoggerAccessor.createLogger(LazyLoggers.java:278)
at java.base/jdk.internal.logger.BootstrapLogger.getLogger(BootstrapLogger.java:956)
at java.base/jdk.internal.logger.LazyLoggers$LazyLoggerAccessor.wrapped(LazyLoggers.java:165)
at java.base/jdk.internal.logger.LazyLoggers$LazyLoggerWrapper.wrapped(LazyLoggers.java:318)
at java.base/jdk.internal.logger.AbstractLoggerWrapper.isLoggable(AbstractLoggerWrapper.java:68)
at java.base/jdk.internal.event.EventHelper.<clinit>(EventHelper.java:47)
... 25 more

Für mich liest sich das ehr so als bräuchte ich ein POM-Konfiguration. Gibt es dazuweitere Informationen ?

 

KonradN

Super-Moderator
Mitarbeiter
Es dreht sich alles um die Abhängigkeiten. Diese musst Du sauber definieren. Dabei ist es egal, was Du zur Verwaltung Deines Projektes verwendest.

Wenn es ein Maven Projekt sein sollte, dann ja, dann musst Du die POM anpassen. Wenn es aber kein Maven Projekt ist, dann hast Du keine POM und dann musst Du da auch schlicht nichts machen.

Unter dem Strich ist es egal, was Du nutzt. Du musst halt nur dafür sorgen, dass Du im Classpath alle benötigten Abhängigkeiten hast und dass diese zueinander passen.
 

inflamer

Bekanntes Mitglied
Habe gerade zufällig etwas intensiver mit POI zu tun, und zwar auch mit der v5.2.3.

Hier mal die Abhängigkeiten, inklusive der POI-JARs selbst. Das ist das absolute "Minimal-Set":

Clipboard01.png

Funktioniert soweit einwandfrei beim Einlesen von XLS und XLSX-Dateien, auch von Passwort geschützten (kein Bouncy Castle nötig)...

Zum Schluss musste ich dann nur noch die nervige ERROR-Meldung von log4j deaktivieren, dazu gibt Apache selbst den Tipp:

If your main aim is just to get rid of the scary logging log message from Log4J that says 'ERROR StatusLogger Log4j2 could not find a logging implementation.', then one option is to enable the SimpleLogger using a system property.
-Dlog4j2.loggerContextFactory=org.apache.logging.log4j.simple.SimpleLoggerContextFactory

 
Zuletzt bearbeitet:

LimDul

Top Contributor
Ansonsten das Beispiel mal genau befolgen, was im ersten Post verlinkt ist. Da steht exakt, welche Abhängigkeiten in welcher Version man braucht. Man muss dann auch exakt diese Versionen nehmen.
 

Chrisi0123

Mitglied
Wie macht man das ? Da steht nur ein Listening über eine POM . Ich habe aber mit der POM keine Erfahrung. Wie richtet man die ein ?

Ich habe hier eine paat Links :

Link 1

Link 2

Link 3

Reicht es wenn man die Datei pom.xml einrichtet oder muss man dazu noch mehr für das Maven-Projekt einstellen ?
 

Ähnliche Java Themen

Neue Themen


Oben