I try to use docx4j 3.3.6 with Java 1.8 in my application which runs on apache karaf. Currently, i when i try to load a document:
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File("C:\\some_document.docx"));
I get the following exceptions:
javax.xml.bind.PropertyException: property "com.sun.xml.bind.namespacePrefixMapper" must be an instance of type com.sun.xml.bind.marshaller.NamespacePrefixMapper, not org.docx4j.jaxb.NamespacePrefixMapper at com.sun.xml.bind.v2.runtime.MarshallerImpl.setProperty(MarshallerImpl.java:511) at org.docx4j.jaxb.NamespacePrefixMapperUtils.tryUsingRI(NamespacePrefixMapperUtils.java:105) at org.docx4j.jaxb.NamespacePrefixMapperUtils.getPrefixMapper(NamespacePrefixMapperUtils.java:84) at org.docx4j.jaxb.Context.(Context.java:117) at org.docx4j.openpackaging.contenttype.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:733) at org.docx4j.openpackaging.io3.Load3.get(Load3.java:134) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:462) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:379) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:270) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:250) at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:168)
And then the exception below follows:
javax.xml.bind.JAXBException: JAXB: neither Reference Implementation nor Java 6 implementation present? at org.docx4j.jaxb.NamespacePrefixMapperUtils.tryUsingRI(NamespacePrefixMapperUtils.java:117) at org.docx4j.jaxb.NamespacePrefixMapperUtils.getPrefixMapper(NamespacePrefixMapperUtils.java:84) at org.docx4j.jaxb.Context.(Context.java:117) at org.docx4j.openpackaging.contenttype.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:733) at org.docx4j.openpackaging.io3.Load3.get(Load3.java:134) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:462) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:379) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:270) at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:250) at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:168)
Bellow is a copy of the bundles i use in the feature i install on my karaf.
<feature name="docx4j" version="1.0">
<bundle>wrap:mvn:org.docx4j/docx4j/3.3.4</bundle>
<bundle>wrap:mvn:commons-io/commons-io/2.4</bundle>
<bundle>wrap:mvn:org.apache.xmlgraphics/xmlgraphics-commons/2.1</bundle>
<bundle>wrap:mvn:com.googlecode.jaxb-namespaceprefixmapper-interfaces/JAXBNamespacePrefixMapper/2.2.4</bundle>
<bundle>wrap:mvn:org.plutext/jaxb-svg11/1.0.2</bundle>
<bundle>wrap:mvn:com.sun.xml.bind/jaxb-impl/2.2.4-1</bundle>
<bundle>wrap:mvn:org.docx4j/docx4j-MOXy-JAXBContext/3.3.6</bundle>
<bundle>wrap:mvn:xalan/xalan/2.7.2</bundle>
<bundle>wrap:mvn:xalan/serializer/2.7.2</bundle>
<bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-core/2.7.3</bundle>
<bundle>wrap:mvn:com.fasterxml.jackson.core/jackson-databind/2.7.3</bundle>
<bundle>wrap:mvn:org.apache.xmlgraphics/xmlgraphics-commons/2.1</bundle>
<bundle>wrap:mvn:com.thedeanda/lorem/2.0</bundle>
<bundle>wrap:mvn:com.google.guava/guava/19.0</bundle>
<bundle>wrap:mvn:commons-codec/commons-codec/1.10</bundle>
<bundle>wrap:mvn:net.arnx/wmf2svg/0.9.8</bundle>
<bundle>wrap:mvn:net.engio/mbassador/1.2.4.2</bundle>
<bundle>wrap:mvn:org.antlr/antlr-runtime/3.5.2</bundle>
<bundle>wrap:mvn:org.antlr/stringtemplate/3.2.1</bundle>
<bundle>wrap:mvn:org.apache.avalon.framework/avalon-framework-api/4.3.1</bundle>
<bundle>wrap:mvn:org.apache.avalon.framework/avalon-framework-impl/4.3.1</bundle>
<bundle>wrap:mvn:org.apache.commons/commons-lang3/3.4</bundle>
<bundle>wrap:mvn:org.apache.httpcomponents/httpclient/4.5.2</bundle>
<bundle>wrap:mvn:xerces/xercesImpl/2.11.0</bundle>
<bundle>wrap:mvn:org.apache.httpcomponents/httpcore/4.4.8</bundle>
<bundle>wrap:mvn:org.codehaus.mojo/jaxb2-maven-plugin/2.2</bundle>
<bundle>wrap:mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant-1.7.0/1.0-m2</bundle>
</feature>
Could there be some kind of conflict with JAXB ? I tried to to use the same dependencies in my feature that docx4j 3.3.6 requires but this does not seem to do the trick. Any suggestions?
UPDATE
I have changed my features xml by removing several dependencies
<feature name="docx4j" version="1.0">
<bundle>wrap:mvn:org.docx4j/docx4j/3.3.4</bundle>
<bundle>wrap:mvn:commons-io/commons-io/2.4</bundle>
<bundle>wrap:mvn:org.apache.xmlgraphics/xmlgraphics-commons/2.1</bundle>
<bundle>wrap:mvn:org.plutext/jaxb-svg11/1.0.2</bundle>
<bundle>wrap:mvn:xalan/xalan/2.7.2</bundle>
<bundle>wrap:mvn:xalan/serializer/2.7.2</bundle>
<bundle>mvn:com.fasterxml.jackson.core/jackson-core/2.7.3</bundle>
<bundle>mvn:com.fasterxml.jackson.core/jackson-databind/2.7.3</bundle>
<bundle>wrap:mvn:com.thedeanda/lorem/2.0</bundle>
<bundle>mvn:com.google.guava/guava/19.0</bundle>
<bundle>wrap:mvn:commons-codec/commons-codec/1.10</bundle>
<bundle>wrap:mvn:net.arnx/wmf2svg/0.9.8</bundle>
<bundle>mvn:net.engio/mbassador/1.2.4.2</bundle>
<bundle>wrap:mvn:org.antlr/antlr-runtime/3.5.2</bundle>
<bundle>wrap:mvn:org.antlr/stringtemplate/3.2.1</bundle>
<bundle>wrap:mvn:org.apache.avalon.framework/avalon-framework-api/4.3.1</bundle>
<bundle>wrap:mvn:org.apache.avalon.framework/avalon-framework-impl/4.3.1</bundle>
<bundle>wrap:mvn:org.apache.commons/commons-lang3/3.4</bundle>
<bundle>wrap:mvn:org.apache.httpcomponents/httpclient/4.5.2</bundle>
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.ant-1.7.0/1.0-m2</bundle>
</feature>
Now i am getting a new exception
java.lang.NoClassDefFoundError: org/apache/xml/serializer/SerializerTrace at java.lang.ClassLoader.defineClass1(Native Method)[:1.8.0_91] at java.lang.ClassLoader.defineClass(ClassLoader.java:763)[:1.8.0_91] at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2310) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2094) at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1518) at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:79) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1958) at java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_91] at org.apache.xalan.processor.ProcessorStylesheetElement.getStylesheetRoot(ProcessorStylesheetElement.java:123)
Again i find this exception weird since i have included the serializer in my dependencies.