Caused by: java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477)
报错内容如上: NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
根据搜索得到该错误是由于POI组件XWPF最新版本也只支持3.X版本的POI导致。由于某段时间框架调整升级到了4.X,但未对该代码相关功能进行回归测试,所以出现异常。
参考:https://blog.csdn.net/u011852988/article/details/123789135 内容将处理方式整理如下:
1、下载Central Repository: fr/opensagres/xdocreport/org.apache.poi.xwpf.converter.core/1.0.6源码
2、将报错类源文件复制到工程代码下
3、修改源文件中报错的部分:
3.1 更换导入的POIXMLDocumentPart类为
import org.apache.poi.ooxml.POIXMLDocumentPart;
3.2修改报错方法
private static XWPFSettings getSettings( XWPFDocument document )
{
for ( POIXMLDocumentPart p : document.getRelations() )
{
PackageRelationshipCollection relationships = p.getPackagePart().getPackage().getRelationships();
for (PackageRelationship relationship : relationships) {
String relationshipType = relationship.getRelationshipType();
if ( relationshipType.equals( XWPFRelation.SETTINGS.getRelation() ) )
{
return (XWPFSettings) p;
}
}
}
return null;
}
private static List<ThemeDocument> getThemeDocuments( XWPFDocument document )
{
List<ThemeDocument> themeDocuments = new ArrayList<ThemeDocument>();
for ( POIXMLDocumentPart p : document.getRelations() )
{
PackageRelationshipCollection relationships = p.getPackagePart().getPackage().getRelationships();
for (PackageRelationship relationship : relationships) {
String relationshipType = relationship.getRelationshipType();
if ( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme".equals( relationshipType ) )
{
try
{
InputStream inputStream = p.getPackagePart().getInputStream();
ThemeDocument theme = ThemeDocument.Factory.parse( inputStream );
themeDocuments.add( theme );
}
catch ( Throwable e )
{
e.printStackTrace();
}
}
}
}
return themeDocuments;
}
private static List<FontsDocument> getFontsDocument( XWPFDocument document )
{
List<FontsDocument> fontsDocuments = new ArrayList<FontsDocument>();
for ( POIXMLDocumentPart p : document.getRelations() )
{
PackageRelationshipCollection relationships = p.getPackagePart().getPackage().getRelationships();
for (PackageRelationship relationship : relationships) {
String relationshipType = relationship.getRelationshipType();
// "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"
if ( XWPFRelation.FONT_TABLE.getRelation().equals( relationshipType ) )
{
try
{
InputStream inputStream = p.getPackagePart().getInputStream();
FontsDocument fontsDocument = FontsDocument.Factory.parse( inputStream );
fontsDocuments.add( fontsDocument );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
}
return fontsDocuments;
}
重新部署,可正常运行。