1
我使用最新的Apache POI 3.13-beta1版本。我得到一個錯誤,如:如何使用Apache poi保存word docx文件。更改爲saxon9he而不是saxon9pe
Exception in thread "main" org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : null
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:507)
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1441)
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:202)
Caused by: java.lang.NullPointerException
at com.saxonica.config.Verifier.loadLicense(Verifier.java:141)
at com.saxonica.config.ProfessionalConfiguration.loadLicense(ProfessionalConfiguration.java:391)
at com.saxonica.config.ProfessionalConfiguration.isLicensedFeature(ProfessionalConfiguration.java:367)
at net.sf.saxon.IdentityTransformer.transform(IdentityTransformer.java:36)
at org.apache.poi.openxml4j.opc.StreamHelper.saveXmlInStream(StreamHelper.java:80)
at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshallRelationshipPart(ZipPartMarshaller.java:174)
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:468)
我的代碼是非常簡單的在這裏:
String filePath = "d:\\doc\\file1.docx"
try {
FileInputStream fis = new FileInputStream(filePath);
XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis));
System.out.println("here I can read my file and work on it");
String filePathOut = filePath.replace("file", "file_result");
xdoc.write(new FileOutputStream(new File(filePathOut)));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
我想要做的替代品,救我的文件備份。
編輯1. 它看起來像Apache poi與我們的saxon9pe lib需要許可證。 我可以設置一些東西來避免poi中的這個saxon9pe並使用saxon9he?
謝謝。
的Apache POI應該只使用默認的Java XML解析器。如果您刪除了將默認設置更改爲撒克遜人的定製,會發生什麼情況? – Gagravarr
它在我刪除它或者設置庫許可證時有效。但是這個項目的這部分不能使用saxon9pe。那麼我可以手動將默認的撒克遜分析器9pe更改爲9he變體嗎? – oakslist
Apache POI只是問一個XML解析器的JVM,它並不知道撒克遜的任何信息。你需要閱讀撒克遜的安裝文檔,看看如何告訴它+ JVM使用哪一個 – Gagravarr