У меня есть веб-приложение Spring Boot / Maven / Java 8 / Tomcat 8.5, которое работает с файлами docx. На Mac это работает нормально, но на Windows я получаю странные исключения. Я пробовал в обеих средах с одинаковыми входными данными и получил разные результаты. На Mac я получил то, что ожидал, на вдов я получил только исключения.
java.lang.ExceptionInInitializerError: null
at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:392) ~[poi-ooxml-4.0.0.jar:4.0.0]
[...]
Caused by: java.lang.IllegalArgumentException: No attributes are implemented
at org.apache.crimson.jaxp.DocumentBuilderFactoryImpl.setAttribute(DocumentBuilderFactoryImpl.java:93) ~[crimson-1.1.3.jar:na]
at org.apache.poi.ooxml.util.DocumentHelper.trySetXercesSecurityManager(DocumentHelper.java:143) ~[poi-ooxml-4.0.0.jar:4.0.0]
at org.apache.poi.ooxml.util.DocumentHelper.<clinit>(DocumentHelper.java:108) ~[poi-ooxml-4.0.0.jar:4.0.0]
... 30 common frames omitted
Итак, после некоторого поиска я добавил некоторые значения в мои catalina.properties. Здесь уже прочитаны темы:
javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
и теперь приложения, кажется, работают с некоторыми входами, в то время как я все еще получаю NullPointers с другими. Кроме того, в обоих случаях запрашивается новый журнал (включена отладка java).
JAXP: find factoryId =javax.xml.stream.XMLInputFactory
JAXP: loaded from fallback value: com.sun.xml.internal.stream.XMLInputFactoryImpl
JAXP: created new instance of class com.sun.xml.internal.stream.XMLInputFactoryImpl using ClassLoader: null
JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: found system property, value=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
JAXP: created new instance of class com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl using ClassLoader: null
JAXP: find factoryId =javax.xml.parsers.DocumentBuilderFactory
JAXP: found system property, value=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
JAXP: created new instance of class com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl using ClassLoader: null
, что мне не кажется подходящим.
В моем ПОМ я переключился с
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.0</version>
</dependency>
до
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
<exclusions>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
</exclusions>
</dependency>
без изменений.
Что происходит?
Спасибо за вашу помощь.