docx4j versus OpenXML4J

Differences:

1. Scope - our project is focused on WordprocessingML documents, and doesn't attempt to encompass SpreadsheetML, PowerpointML etc. You could in principle open those sorts of documents with org.docx4j.openpackaging, but that's not our focus.

2. WordML content model - we're using JAXB to unmarshall/marshall the WordML. Currently we have strongly typed content models for the main document part (word/document.xml), the styles part (word/styles.xml), and the numbering definitions part.

3. Convenience methods - to get the MainDocument part, the Styles part etc.

4. Conformance requirements - OpenXML4J specifically enforces Open Packaging Convention conformance requirements.

5. Physical format agnostic - OpenXML4J, like Microsoft's System.IO.Packaging, instantiate a package as a ZipPackage?. This means you have to jump through hoops if you want to load or save unzipped to say, JCR (Java Content Repository). So we keep Zip out of the inheritance hierarchy, and treat it (along with JCR unzipped) as one of the physical formats the Package can be loaded from or saved to. Our Package doesn't contain load or save methods; these are in openpackaging.io instead.

6. Load/Save mechanism - our approach is to walk the tree of relationship parts

7. Content type manager - our content type manager maps the Package and its constituent Parts to appropriate Java objects. See ExtensionMechanism for more details.