Я использую последнюю версию Apache POI 3.13-beta1. И я получаю сообщение об ошибке, как:Как сохранить файл слова docx с помощью Apache poi. Изменение на 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();
}
Я хочу сделать замену и сохранить свой файл обратно.
EDIT 1. Похоже, Apache poi работает с нашей библиотекой saxon9pe, для которой требуется лицензия. Могу ли я установить что-то, чтобы избежать этого saxon9pe в poi и использовать saxon9he?
Спасибо.
Apache POI должны просто использовать по умолчанию Java XML парсер. Что произойдет, если вы удалите настройки, которые меняют значение по умолчанию для саксона? – Gagravarr
он работает, когда я удалил его, или я установил лицензию на библиотеку. Но эта часть проекта не должна использовать saxon9pe. Итак, могу ли я вручную изменить по умолчанию саксонский синтаксический анализатор 9pe на 9-й вариант? – oakslist
Apache POI просто запрашивает JVM для синтаксического анализа XML, он ничего не знает о саксоне. Вам нужно будет прочитать установочные документы для саксона и посмотреть, как это сказать + JVM, который должен использовать – Gagravarr