[ https://issues.apache.org/jira/browse/LUCENE-1825?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Uwe Schindler reassigned LUCENE-1825: ------------------------------------- Assignee: Uwe Schindler In principle you should always use addAttribute() when consuming a TokenStream, if the attribute is unknown, it will be created empty - no problem. MostLucene-internal code uses it in that way. getAttribute() is currently only used for very special cases (e.g. in tests, to check if an attribute was really added). But there seems to be one relict of getAttribute in the code. To fix this bug, I should replace the getAttribute() call in the indexer by addAttribute(). I will provide a patch for that. If you have an unknown TokenStream instance you will never know, which of the attributes are really used. If you want to optimize this, you could check before, if the attribute is really used and e.g. exclude some code paths with very complicated calculations based on these missing attributes. I will also add an JavaDoc comment for this. The "more helpful" error message is in my opinion not needed, because you cannot find out which of the filter/stream in the chain is missing the attribute, because all in the chain use the same Attribute instances. > AttributeSource.getAttribute() should throw better IllegalArgumentException > --------------------------------------------------------------------------- > > Key: LUCENE-1825 > URL: https://issues.apache.org/jira/browse/LUCENE-1825 > Project: Lucene - Java > Issue Type: Improvement > Components: Analysis > Affects Versions: 2.9 > Reporter: Tim Smith > Assignee: Uwe Schindler > Priority: Minor > Fix For: 2.9 > > > when seting "use only new API" for TokenStream, i received the following > exception: > {code} > [junit] Caused by: java.lang.IllegalArgumentException: This > AttributeSource does not have the attribute 'interface > org.apache.lucene.analysis.tokenattributes.TermAttribute'. > [junit] at > org.apache.lucene.util.AttributeSource.getAttribute(AttributeSource.java:249) > [junit] at > org.apache.lucene.index.TermsHashPerField.start(TermsHashPerField.java:252) > [junit] at > org.apache.lucene.index.DocInverterPerField.processFields(DocInverterPerField.java:145) > [junit] at > org.apache.lucene.index.DocFieldProcessorPerThread.processDocument(DocFieldProcessorPerThread.java:244) > [junit] at > org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:772) > [junit] at > org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:755) > [junit] at > org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:2613) > {code} > However, i can't actually see the culprit that caused this exception > suggest that the IllegalArgumentException include "getClass().getName()" in > order to be able to identify which TokenStream implementation actually caused > this -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org