Page 1 of 1

Exception when converting docx to pdf when using Moxy.

PostPosted: Sat Sep 17, 2016 12:51 pm
by gizwhu
I am currently looking to change to Moxy due to the issue below.
docx-java-f6/how-to-process-docx-to-replace-bold-tags-t2447.html

That issue is resolved but i am now facing difficulties converting the document to pdf. It was previously working when i was using the default reference Jaxb. Any help is appreciated.

Code: Select all
java.lang.RuntimeException: javax.xml.bind.PropertyException: name: com.sun.xml.internal.bind.namespacePrefixMapper value: org.docx4j.jaxb.NamespacePrefixMapperSunInternal@772fc81
   at org.docx4j.XmlUtils.marshaltoW3CDomDocument(XmlUtils.java:743)
   at org.docx4j.convert.out.fo.LayoutMasterSetBuilder.getLayoutMasterSetFragment(LayoutMasterSetBuilder.java:100)
   at org.docx4j.convert.out.fo.XsltFOFunctions.getLayoutMasterSetFragment(XsltFOFunctions.java:81)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:343)
   at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:440)
   at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222)
   at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:475)
   at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208)
   at org.apache.xpath.XPath.execute(XPath.java:337)
   at org.apache.xalan.templates.ElemCopyOf.execute(ElemCopyOf.java:134)
   at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402)
   at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1376)
   at org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:395)
   at org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:178)
   at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402)
   at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2272)
   at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1358)
   at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:711)
   at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1275)
   at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1253)
   at org.docx4j.XmlUtils.transform(XmlUtils.java:1095)
   at org.docx4j.XmlUtils.transform(XmlUtils.java:920)
   at org.docx4j.convert.out.common.AbstractXsltExporterDelegate.process(AbstractXsltExporterDelegate.java:66)
   at org.docx4j.convert.out.common.AbstractWmlExporter.process(AbstractWmlExporter.java:63)
   at org.docx4j.convert.out.common.AbstractWmlExporter.process(AbstractWmlExporter.java:32)
   at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:79)
   at org.docx4j.Docx4J.toFO(Docx4J.java:568)   
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
   at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
   at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at com.sun.proxy.$Proxy417.convertDocxToPdf(Unknown Source)   
   at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
   at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)   
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:606)
   at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:329)
   at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:274)
   at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59)
   at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java:65)
   at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
   at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
   at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
   at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
   at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
   at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
   at javax.faces.component.UICommand.broadcast(UICommand.java:300)
   at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
   at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
   at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
   at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
   at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at com.ncs.iframe4.jsf.filter.FeaturesFilter.doFilter(FeaturesFilter.java:79)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
   at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   at java.lang.Thread.run(Thread.java:745)
Caused by: javax.xml.bind.PropertyException: name: com.sun.xml.internal.bind.namespacePrefixMapper value: org.docx4j.jaxb.NamespacePrefixMapperSunInternal@772fc81
   at javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(AbstractMarshallerImpl.java:358)
   at com.sun.xml.bind.v2.runtime.MarshallerImpl.setProperty(MarshallerImpl.java:542)
   at org.docx4j.jaxb.NamespacePrefixMapperUtils.setProperty(NamespacePrefixMapperUtils.java:176)
   at org.docx4j.XmlUtils.marshaltoW3CDomDocument(XmlUtils.java:736)
   ... 118 more
org.docx4j.openpackaging.exceptions.Docx4JException: Exception writing Document to OutputStream: org.apache.fop.fo.ValidationException: For "fo:root", "fo:layout-master-set" must be declared before "fo:page-sequence"! (See position 1:187)
   at org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:31)
   at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:209)
   at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:159)
   at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168)
   at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47)
   at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:82)
   at org.docx4j.Docx4J.toFO(Docx4J.java:568)
   at sg.gov.customs.c2is.common.util.PDFConverter.convertDocxToPdf(PDFConverter.java:110)   
   at java.lang.Thread.run(Thread.java:745)
Caused by: javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: For "fo:root", "fo:layout-master-set" must be declared before "fo:page-sequence"! (See position 1:187)
   at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:500)
   at org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:28)
   ... 94 more
Caused by: org.apache.fop.fo.ValidationException: For "fo:root", "fo:layout-master-set" must be declared before "fo:page-sequence"! (See position 1:187)
   at org.apache.fop.events.ValidationExceptionFactory.createException(ValidationExceptionFactory.java:38)
   at org.apache.fop.events.EventExceptionManager.throwException(EventExceptionManager.java:58)
   at org.apache.fop.events.DefaultEventBroadcaster$1.invoke(DefaultEventBroadcaster.java:175)
   at com.sun.proxy.$Proxy572.nodeOutOfOrder(Unknown Source)
   at org.apache.fop.fo.FONode.nodesOutOfOrderError(FONode.java:522)
   at org.apache.fop.fo.FONode.nodesOutOfOrderError(FONode.java:508)
   at org.apache.fop.fo.pagination.Root.validateChildNode(Root.java:155)
   at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:276)
   at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:179)
   at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1071)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
   at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
   at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
   at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
   at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:483)
   ... 95 more


My dependencies:
Code: Select all
<dependency>
   <groupId>org.docx4j</groupId>
   <artifactId>docx4j</artifactId>
   <version>3.3.0</version>
</dependency>
<dependency>
   <groupId>org.docx4j</groupId>
   <artifactId>docx4j-ImportXHTML</artifactId>
   <version>3.2.0</version>
</dependency>
<dependency>
   <groupId>org.docx4j</groupId>
   <artifactId>docx4j-export-fo</artifactId>
   <version>3.3.0</version>
</dependency>
<dependency>
   <groupId>org.docx4j</groupId>
   <artifactId>docx4j-MOXy-JAXBContext</artifactId>
   <version>3.3.0</version>
</dependency>
<dependency>
   <groupId>org.eclipse.persistence</groupId>
   <artifactId>org.eclipse.persistence.moxy</artifactId>
   <version>2.6.3</version>
</dependency>
<dependency>
   <groupId>javax.mail</groupId>
   <artifactId>mail</artifactId>
   <version>1.4.7</version>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-validator</artifactId>
   <version>5.2.4.Final</version>
</dependency>
<dependency>
   <groupId>org.plutext</groupId>
   <artifactId>jaxb-xslfo</artifactId>
   <version>1.0.1</version>
</dependency>


Code:
Code: Select all
String regex = null;
PhysicalFonts.setRegex(regex);

WordprocessingMLPackage wordMLPackage;

InputStream is = new ByteArrayInputStream(document);
ByteArrayOutputStream baos = null;
try {
   wordMLPackage = WordprocessingMLPackage.load(is);       
         
   FieldUpdater updater = new FieldUpdater(wordMLPackage);
   updater.update(true);
   
   //Mapper fontMapper = new IdentityPlusMapper();
   //wordMLPackage.setFontMapper(fontMapper);
   
   
   
   FOSettings foSettings = Docx4J.createFOSettings();
   foSettings.setWmlPackage(wordMLPackage);
   
   /*OutputStream os = new java.io.FileOutputStream("C:/test.pdf");
   Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
   os.close();*/
      
   baos = new ByteArrayOutputStream();
   
   Docx4J.toFO(foSettings, baos, Docx4J.FLAG_EXPORT_PREFER_XSL);
   byte[] pdf = baos.toByteArray();
   
   updater = null;
   foSettings = null;
   wordMLPackage = null;
   
   return pdf;
}

Re: Exception when converting docx to pdf when using Moxy.

PostPosted: Sun Sep 18, 2016 2:55 am
by jason
What Java are you using, exactly?

Re: Exception when converting docx to pdf when using Moxy.

PostPosted: Sun Sep 18, 2016 2:44 pm
by gizwhu
Im using Java 1.7

Re: Exception when converting docx to pdf when using Moxy.

PostPosted: Mon Sep 19, 2016 7:36 pm
by jason
javax.xml.bind.PropertyException: name: com.sun.xml.internal.bind.namespacePrefixMapper


is an odd message if you are using Sun/Oracle Java.

Anything noteworthy about your environment?

In any case, tomorrow I will make a nightly release you can try which should fix this.

Re: Exception when converting docx to pdf when using Moxy.

PostPosted: Mon Sep 19, 2016 8:04 pm
by gizwhu
Im not sure... but the following exception might be the cause:

org.docx4j.openpackaging.exceptions.Docx4JException: Exception writing Document to OutputStream: org.apache.fop.fo.ValidationException: For "fo:root", "fo:layout-master-set" must be declared before "fo:page-sequence"! (See position 1:187)

Re: Exception when converting docx to pdf when using Moxy.

PostPosted: Tue Sep 20, 2016 1:57 pm
by jason
Looking at this further, I think your environment is confused as to which JAXB implementation it is using.

I say that because your stacktrace contains com.sun.xml.bind.v2.runtime.MarshallerImpl.setProperty. Looks like the reference implementation is on your classpath?!

If you are using MOXy, then your docx4j logs should say something like:

Code: Select all
DEBUG org.docx4j.utils.ResourceUtils .getResource line 70 - Attempting to load: org/docx4j/wml/jaxb.properties
INFO org.docx4j.jaxb.Context .<clinit> line 107 - MOXy JAXB implementation intended..
INFO org.docx4j.jaxb.Context .<clinit> line 160 - MOXy JAXB implementation is in use!


What do you see?

Please also check that you do not have the JAXBNamespacePrefixMapper jar on your classpath. It should never be there!