0

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.

Stephan
  • 696
  • 15
  • 37
  • Perhaps see see https://github.com/uncleit/docx4j-osgi/blob/master/pom.xml or https://github.com/kimios/kimios/blob/65c1ccb00ab69831a2ede1784b7729ffc9bf84fe/kimios-osgi-packages/kimios-docx4j-osgi/pom.xml#L481 for some inspiration – JasonPlutext Mar 27 '18 at 00:00
  • I am able to run my code on a standalone maven test project but not as a bundle on karaf. I checked the links you suggested but i don't see what i am missing. I have the xalan/serializer/2.7.2 as suggested on other posts i found on the web, but this does not seem to solve the issue with the NoClassDefFoundError SerializerTrace – Stephan Jun 22 '18 at 13:24
  • https://github.com/plutext/docx4j/tree/VERSION_6_1_0_OSGi is an example working in karaf – JasonPlutext Mar 25 '19 at 00:09

0 Answers0