2016-06-28 38 views
0

我不明白爲什麼我在嘗試將HTML轉換爲docx時遇到空指針異常。xHTMLImporter.convert(String,null)空指針異常

我使用docx4j 3.2.1所有的依賴,這是代碼

private void ajoutDescription(String description, int maxWidth) { 
     if (description != null) { 
      if (description.length() > 1) { 
       description = formattageDescription(description, maxWidth); 
       try { 
        xHTMLImporter = new XHTMLImporterImpl(wordMLPackage); 
        wordMLPackage.getMainDocumentPart().getContent().addAll(xHTMLImporter.convert(description, null)); 
       } catch (Docx4JException e) { 
        System.out.println("bug ajout desc"); 
        System.out.println(description); 
        e.printStackTrace(); 
       } 
       catch (NullPointerException e) { 
        System.out.println("bug ajout desc not Docx4j"); 
        System.out.println(description); 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

這是錯誤和xHTMLImporter.convert描述ARG(描述,NULL)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="ISO-8859-1" /> 
    <style type="text/css">p, ul, li, table, tr, td, font{font-family: Arial;font-size:120%}img{max-width:902px; height:auto;}</style> 
</head> 
<body> 
    <p><img id="img1983" src="file:///C:/Users/david.guy/.caliberrm/4FA4F864-5D3E-4A30-A684-163FADFEB4D9.PNG" /></p> 
</body> 
</html> 
java.lang.NullPointerException 
    at org.docx4j.finders.RangeFinder.apply(RangeFinder.java:59) 
    at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:106) 
    at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:109) 
    at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:109) 
    at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:109) 
    at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:109) 
    at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:109) 
    at org.docx4j.TraversalUtil.<init>(TraversalUtil.java:209) 
    at org.docx4j.convert.in.xhtml.BookmarkHelper.initBookmarkIdStart(BookmarkHelper.java:92) 
    at org.docx4j.convert.in.xhtml.BookmarkHelper.getBookmarkId(BookmarkHelper.java:82) 
    at org.docx4j.convert.in.xhtml.BookmarkHelper.anchorToBookmark(BookmarkHelper.java:187) 
    at org.docx4j.convert.in.xhtml.XHTMLImporterImpl.traverse(XHTMLImporterImpl.java:834) 
    at org.docx4j.convert.in.xhtml.XHTMLImporterImpl.traverse(XHTMLImporterImpl.java:1236) 
    at org.docx4j.convert.in.xhtml.XHTMLImporterImpl.traverse(XHTMLImporterImpl.java:1216) 
    at org.docx4j.convert.in.xhtml.XHTMLImporterImpl.traverse(XHTMLImporterImpl.java:1216) 
    at org.docx4j.convert.in.xhtml.XHTMLImporterImpl.traverse(XHTMLImporterImpl.java:796) 
    at org.docx4j.convert.in.xhtml.XHTMLImporterImpl.convert(XHTMLImporterImpl.java:680) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.ajoutDescription(ModuleToDocxSFDGenerator.java:1683) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.ajoutMaquettes(ModuleToDocxSFDGenerator.java:788) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.ecritureCURecursive(ModuleToDocxSFDGenerator.java:434) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.ecritureCURecursive(ModuleToDocxSFDGenerator.java:377) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.ecritureCU(ModuleToDocxSFDGenerator.java:345) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.lancerExportDocx(ModuleToDocxSFDGenerator.java:196) 
    at com.simat.export.docx.ModuleToDocxSFDGenerator.docxParser(ModuleToDocxSFDGenerator.java:176) 
    at com.simat.test.TestSFD.main(TestSFD.java:109) 

我不知道如何解決這個問題。一些圖像不會導致這個錯誤,但我不知道哪些是做的。

+0

通過從img標籤中刪除id屬性進行修復 – David

回答

0
java.lang.NullPointerException 
at org.docx4j.finders.RangeFinder.apply(RangeFinder.java:59) 
at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:106) 
: 
at org.docx4j.finders.RangeFinder.walkJAXBElements(RangeFinder.java:109) 
at org.docx4j.TraversalUtil.<init>(TraversalUtil.java:209) 
at org.docx4j.convert.in.xhtml.BookmarkHelper.initBookmarkIdStart(BookmarkHelper.java:92) 

通過刪除@id,您避免了錯誤,因爲不再調用anchorToBookmark。

此問題看起來像是由您的wordMLPackage的內容觸發的,所以如果它再次發生,請發佈您的docx。

+0

在此情況下,由於運行被中斷,不會生成docx。但是我可以再次生成錯誤並繼續執行此異常,以便應用程序可以完成它的運行並生成docx(如果您有興趣)。 – David