Java Apache tika,正在MailContextHandler中读取已解析的正文

Java Apache tika,正在MailContextHandler中读取已解析的正文,java,apache-tika,Java,Apache Tika,MailContentHandler的源代码包含以下内容: try { BodyContentHandler bch = new BodyContentHandler(handler); parser.parse(is, new EmbeddedContentHandler(bch), submd, context); 此时,我想将正文内容作为字符串读取,并根据需要在if found/matched/generated中添加一些元数据。。。我似乎

MailContentHandler的源代码包含以下内容:

try {
            BodyContentHandler bch = new BodyContentHandler(handler);
            parser.parse(is, new EmbeddedContentHandler(bch), submd, context);
此时,我想将正文内容作为字符串读取,并根据需要在if found/matched/generated中添加一些元数据。。。我似乎无法在BodyContentHandler对象上调用toString

如果有人熟悉tika,并创建或更改现有解析,请为我指出正确的方向。

是一个装饰性内容处理程序,如中所述。它所做的只是过滤掉SAX事件,以便下游处理程序只获取主体内容。但是,如果您创建它,它将在内部为您创建一个具有100k限制的
WriteOutContentHandler

要获取正文本身,您需要询问传递给
BodyContentHandler
的任何处理程序来获取它。如果您只需要纯文本,并且不会达到默认字符限制,请选择以下选项:

BodyContentHandler bch = new BodyContentHandler();
parser.parse(is, bch, metadata, new ParseContext());
String plainText = bch.toString();
如果您想获得主体的XHTML,您将需要类似以下内容:

StringWriter sw = new StringWriter();
SAXTransformerFactory factory = (SAXTransformerFactory)
             SAXTransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "xml");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "no");
handler.setResult(new StreamResult(sw));

BodyContentHandler bch = new BodyContentHandler(handler);

parser.parse(is, bch, metadata, new ParseContext());

String xhtml = sw.toString();

您要传递的
处理程序
对象是什么?难道你不能从中得到body吗?这是我一直在修改的源代码:我已经建立了它,它与bodyContentHandler接受处理程序构造函数有关。我只是不知道如何获取正文,我需要它来回答您的问题处理程序对象是XHTMLContentHandlerSo,我不想更改现有的MailContentHandler功能,我只想在body回调期间查看内容,并在必要时向元数据对象添加额外数据。为什么不传入您自己的解析器类,并在那里用元数据包装真正的解析器和monkey?您能给我指出您建议的任何示例吗,我不确定如何做到这一点,或者,如何获得XHTMLContentHandlerParser包装的主体/内容将是一个新问题,因为使用内容处理程序是完全不同的事情