do not throw exception if ExtractorFactory is available in classpath, but xbean.jar not

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1158626 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sergey Vladimirov 2011-08-17 11:06:42 +00:00
parent 9882382c80
commit 6f5beef801

View File

@ -48,12 +48,16 @@ import org.apache.poi.hwpf.usermodel.TableRow;
import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.Entry; import org.apache.poi.poifs.filesystem.Entry;
import org.apache.poi.util.Beta; import org.apache.poi.util.Beta;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
@Beta @Beta
public class WordToTextConverter extends AbstractWordConverter public class WordToTextConverter extends AbstractWordConverter
{ {
private static final POILogger logger = POILogFactory
.getLogger( WordToTextConverter.class );
public static String getText( DirectoryNode root ) throws Exception public static String getText( DirectoryNode root ) throws Exception
{ {
@ -325,7 +329,10 @@ public class WordToTextConverter extends AbstractWordConverter
return false; return false;
DirectoryNode directoryNode = (DirectoryNode) entry; DirectoryNode directoryNode = (DirectoryNode) entry;
// even if no ExtractorFactory in classpath /*
* even if there is no ExtractorFactory in classpath, still support
* included Word's objects
*/
if ( directoryNode.hasEntry( "WordDocument" ) ) if ( directoryNode.hasEntry( "WordDocument" ) )
{ {
String text = WordToTextConverter.getText( (DirectoryNode) entry ); String text = WordToTextConverter.getText( (DirectoryNode) entry );
@ -335,14 +342,27 @@ public class WordToTextConverter extends AbstractWordConverter
return true; return true;
} }
Object extractor;
try try
{ {
Class<?> cls = Class Class<?> cls = Class
.forName( "org.apache.poi.extractor.ExtractorFactory" ); .forName( "org.apache.poi.extractor.ExtractorFactory" );
Method createExtractor = cls.getMethod( "createExtractor", Method createExtractor = cls.getMethod( "createExtractor",
DirectoryNode.class ); DirectoryNode.class );
Object extractor = createExtractor.invoke( null, directoryNode ); extractor = createExtractor.invoke( null, directoryNode );
}
catch ( Error exc )
{
// no extractor in classpath
logger.log( POILogger.WARN, "There is an OLE object entry '",
entry.getName(),
"', but there is no text extractor for this object type ",
"or text extractor factory is not available: ", "" + exc );
return false;
}
try
{
Method getText = extractor.getClass().getMethod( "getText" ); Method getText = extractor.getClass().getMethod( "getText" );
String text = (String) getText.invoke( extractor ); String text = (String) getText.invoke( extractor );
@ -351,13 +371,14 @@ public class WordToTextConverter extends AbstractWordConverter
+ UNICODECHAR_ZERO_WIDTH_SPACE ) ); + UNICODECHAR_ZERO_WIDTH_SPACE ) );
return true; return true;
} }
catch ( ClassNotFoundException exc ) catch ( Exception exc )
{ {
// no extractor in classpath logger.log( POILogger.ERROR,
} "Unable to extract text from OLE entry '", entry.getName(),
"': ", exc, exc );
return false; return false;
} }
}
@Override @Override
protected void processPageref( HWPFDocumentCore wordDocument, protected void processPageref( HWPFDocumentCore wordDocument,