IKVM C# Tika 实现 - NoClassDefFoundError - sun.java2d.Disposer
IKVM C# Tika Implementation - NoClassDefFoundError - sun.java2d.Disposer
我有一个小型库,它利用 IKVM 运行 Tika (1.2) 来提取文本和元数据以便在 Lucene 中使用。我从我们正在使用的 CMS 中获取文档和图像路径,并将它们传递到这里:
public TextExtractionResult Extract(string filePath)
{
var parser = new AutoDetectParser();
var metadata = new Metadata();
var parseContext = new ParseContext();
Class parserClass = parser.GetType();
parseContext.set(parserClass, parser);
try
{
// Attempt to fix ImageParser "NoClassDefFoundError"
java.lang.System.setProperty("java.awt.headless", "true");
var file = new File(filePath);
var url = file.toURI().toURL();
using (InputStream inputStream = TikaInputStream.get(url, metadata))
{
parser.parse(inputStream, getTransformerHandler(), metadata, parseContext);
inputStream.close();
}
return AssembleExtractionResult(_outputWriter.toString(), metadata);
}
catch (Exception ex)
{
throw new ApplicationException("Extraction of text from the file '{0}' failed.".ToFormat(filePath), ex);
}
}
仅当文件为 .png
时,它会出现此错误:
它似乎很可能来自 Tika 的 ImageParser
。
对于那些感兴趣的人 - 您可以在此处查看 getTransformerHandler()
:
private TransformerHandler getTransformerHandler()
{
var factory = TransformerFactory.newInstance() as SAXTransformerFactory;
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "text");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "UTF-8");
_outputWriter = new StringWriter();
handler.setResult(new StreamResult(_outputWriter));
return handler;
}
我环顾四周,并一直指向 运行ning 无头的方向,所以我已经尝试过了,但没有成功。因为这是 IKVM 中的 C# 实现,是否缺少某些内容?据我所知,它适用于所有其他文档(.jpeg
、.docx
、.pdf
等)。
感谢那些比我更了解 Tika + IKVM 实现的人。
Apache Tika 1.2 于 2012 年 7 月 17 日发布,there have been a lot of fixes and improvements 从那时起
您应该升级到最 recent version of Apache Tika(撰写本文时为 1.12),这应该可以解决您的问题
我有一个小型库,它利用 IKVM 运行 Tika (1.2) 来提取文本和元数据以便在 Lucene 中使用。我从我们正在使用的 CMS 中获取文档和图像路径,并将它们传递到这里:
public TextExtractionResult Extract(string filePath)
{
var parser = new AutoDetectParser();
var metadata = new Metadata();
var parseContext = new ParseContext();
Class parserClass = parser.GetType();
parseContext.set(parserClass, parser);
try
{
// Attempt to fix ImageParser "NoClassDefFoundError"
java.lang.System.setProperty("java.awt.headless", "true");
var file = new File(filePath);
var url = file.toURI().toURL();
using (InputStream inputStream = TikaInputStream.get(url, metadata))
{
parser.parse(inputStream, getTransformerHandler(), metadata, parseContext);
inputStream.close();
}
return AssembleExtractionResult(_outputWriter.toString(), metadata);
}
catch (Exception ex)
{
throw new ApplicationException("Extraction of text from the file '{0}' failed.".ToFormat(filePath), ex);
}
}
仅当文件为 .png
时,它会出现此错误:
它似乎很可能来自 Tika 的 ImageParser
。
对于那些感兴趣的人 - 您可以在此处查看 getTransformerHandler()
:
private TransformerHandler getTransformerHandler()
{
var factory = TransformerFactory.newInstance() as SAXTransformerFactory;
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "text");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "UTF-8");
_outputWriter = new StringWriter();
handler.setResult(new StreamResult(_outputWriter));
return handler;
}
我环顾四周,并一直指向 运行ning 无头的方向,所以我已经尝试过了,但没有成功。因为这是 IKVM 中的 C# 实现,是否缺少某些内容?据我所知,它适用于所有其他文档(.jpeg
、.docx
、.pdf
等)。
感谢那些比我更了解 Tika + IKVM 实现的人。
Apache Tika 1.2 于 2012 年 7 月 17 日发布,there have been a lot of fixes and improvements 从那时起
您应该升级到最 recent version of Apache Tika(撰写本文时为 1.12),这应该可以解决您的问题