Чтение текста из файла Docx с использованием Docx4j - PullRequest
0 голосов
/ 24 августа 2018

Привет. Я пытаюсь прочитать данные из одного файла Docx, используя Docx4j, поэтому я могу вставить их в другой файл. Мой код выглядит следующим образом:

public void getTextFromOtherFile() throws Docx4JException, JAXBException {
    File doc = new File("D:\\helloWorld.docx");
    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc);
    MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
    System.out.println(mainDocumentPart.getXML());
}

Код работает нормально. Но как только я вставляю следующую строку в конец вышеуказанного метода, метод начал генерировать исключение:

List<Object> jAXBNodesViaXPath = mainDocumentPart.getJAXBNodesViaXPath("//w:t", true);

Исключение, с которым я сталкиваюсь, следующее:

SEVERE: Servlet.service() for servlet [jsp] in context with path [/osses] threw exception [javax.servlet.ServletException: java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.<init>(Z)V] with root cause

java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler. (Z) V в org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl. (TransformerIdentityImpl.java:1459) в org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl. (TransformerIdentityImpl.java:96) в org.docx4j.utils.XmlSerializerUtil.serialize (XmlSerializerUtil.java:18) в org.docx4j.XmlUtils.w3CDomNodeToString (XmlUtils.java:833) в org.docx4j.XmlUtils.xpath (XmlUtils.java:1206) в org.docx4j.XmlUtils.xpath (XmlUtils.java:1200) в org.docx4j.XmlUtils.getJAXBAssociationsForXPath (XmlUtils.java:1191) в org.docx4j.XmlUtils.getJAXBNodesViaXPath (XmlUtils.java:1133) в org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.getJAXBNodesViaXPath (JaxbXmlPartXPathAware.java:190) в Business.SelectionBean.getTextFromOtherFile (SelectionBean.java:1087) на org.apache.jsp.test_jsp._jspService (test_jsp.java:95) в org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70) на javax.servlet.http.HttpServlet.service (HttpServlet.java:731) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:439) в org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:395) в org.apache.jasper.servlet.JspServlet.service (JspServlet.java:339) на javax.servlet.http.HttpServlet.service (HttpServlet.java:731) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:303) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) в org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на Business.NoCacheFilter.doFilter (NoCacheFilter.java:36) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:219) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:110) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:506) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:169) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:103) в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:962) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:445) в org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1115) в org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:637) в org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:318) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) at java.lang.Thread.run (Thread.java:745)

Файл моего слова содержит две строки: Здравствуйте, меня зовут abcd. Я люблю свою работу.Я застрял на этом этапе в предыдущие 7 дней, но не смог решить эту проблему. Я также включил различные jar-файлы (Xalan, xml-apis-1.3.04, serializer-2.7.2), но не повезло. Я использую docx4j-6.0.1.jar для своей работы. Может кто-нибудь, пожалуйста, направьте меня к этой проблеме. Заранее спасибо.

1 Ответ

0 голосов
/ 27 августа 2018

У меня работает (docx4j 6.0.1, Xalan 2.7.2, сериализатор 2.7.2)

Я полагаю, ваш путь к классам не содержит банок, которые, как вы думаете, есть.

org.apache.xml.utils.DefaultErrorHandler находится в Xalan 2.7.2.

Кроме того, номера строк в трассировке стека:

    java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.(Z)V 
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:1459) 
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:96)

не соответствуют исходному коду docx4j, поэтомуэто странно.

...