I have an issue with the saving of a docx4j document to an OutputStream and I´m not sure how I should debug it.
I'm using 8.3.8 for both docx4j-ImportXHTML and docx4j for java 8.
In general I´m parsing an html document to docx4j and saving it to an OutputStream, i.e.
WordprocessingMLPackage docx = WordprocessingMLPackage.createPackage();
DocumentPart docPart = docx.getMainDocumentPart();
docPart.getContent().addAll(new XHTMLImporterImpl(docx).convert(htmlString, null));
docx.save(myOutputStream);.
Not alwasy, this process crashes while someothers it works fine. So I can't reproduce it always.
I have logged out org.docx4j.openpackaging, since there seems to be the error, but I'm not sure how to fix it. The logs give the following result:
2022-07-25 13:22:45 [http-thread-pool::http-listener-1(2)] | [514b616a-9211-4aae-a60a-affe61ff3d2f SuperUser user ] | DEBUG in org.docx4j.openpackaging.io3.stores.ZipPartStore -> marshalling /word/document.xml
2022-07-25 13:22:45 [http-thread-pool::http-listener-1(2)] | [514b616a-9211-4aae-a60a-affe61ff3d2f SuperUser user ] | DEBUG in org.docx4j.openpackaging.parts.JaxbXmlPart -> marshalling org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart
2022-07-25 13:22:45 [http-thread-pool::http-listener-1(2)] | [514b616a-9211-4aae-a60a-affe61ff3d2f SuperUser user ] | DEBUG in org.docx4j.openpackaging.parts.JaxbXmlPart -> Marshalling to org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream
2022-07-25 13:22:45 [http-thread-pool::http-listener-1(2)] | [514b616a-9211-4aae-a60a-affe61ff3d2f SuperUser user ] | DEBUG in org.docx4j.openpackaging.parts.Part -> package name: null
2022-07-25 13:22:45 [http-thread-pool::http-listener-1(2)] | [514b616a-9211-4aae-a60a-affe61ff3d2f SuperUser user ] | DEBUG in org.docx4j.openpackaging.parts.Part -> package name: null
2022-07-25 13:22:45 [http-thread-pool::http-listener-1(2)] | [514b616a-9211-4aae-a60a-affe61ff3d2f SuperUser user ] | ERROR in org.docx4j.openpackaging.io3.Save -> Error marshalling JaxbXmlPart /word/document.xml
org.docx4j.openpackaging.exceptions.Docx4JException: Error marshalling JaxbXmlPart /word/document.xml
at org.docx4j.openpackaging.io3.stores.ZipPartStore.saveJaxbXmlPart(ZipPartStore.java:394)
at org.docx4j.openpackaging.io3.Save.saveRawXmlPart(Save.java:289)
at org.docx4j.openpackaging.io3.Save.savePart(Save.java:436)
at org.docx4j.openpackaging.io3.Save.addPartsFromRelationships(Save.java:399)
at org.docx4j.openpackaging.io3.Save.save(Save.java:193)
at org.docx4j.openpackaging.packages.OpcPackage.save(OpcPackage.java:799)
at org.docx4j.openpackaging.packages.OpcPackage.save(OpcPackage.java:729)
at org.docx4j.openpackaging.packages.OpcPackage.save(OpcPackage.java:717)
at myClass.save2Docx(MyClass.java:69)
...
Caused by: javax.xml.bind.JAXBException: null
at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:937)
at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:748)
at org.docx4j.openpackaging.io3.stores.ZipPartStore.saveJaxbXmlPart(ZipPartStore.java:337)
... 89 common frames omitted
Caused by: javax.xml.bind.MarshalException: null
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:303)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:226)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:80)
at org.docx4j.openpackaging.parts.JaxbXmlPart.marshal(JaxbXmlPart.java:865)
... 91 common frames omitted
Caused by: java.io.IOException: Connection is closed
at org.glassfish.grizzly.nio.NIOConnection.assertOpen(NIOConnection.java:445)
at org.glassfish.grizzly.http.io.OutputBuffer.write(OutputBuffer.java:677)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:336)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:323)
...
Caused by: java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:51)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
...
While debugging on docx.save(myOutputStream); it shows me an exception:
org.docx4j.openpackaging.exceptions.Docx4JException: Problem saving part /word/document.xml
Failed to add parts from relationships of /
I'm not sure how to approach it in order to solve it.
Thanks in advance
Not sure why it works, but I'm writing in case somebody else has the same issue.
I had the following in my code:
and changed it to:
This code is on top of osgi framework, and for some reason the lambda expression close the connection...not sure why it happens.