[ https://issues.apache.org/jira/browse/SOLR-2141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vadim Kirilchuk updated SOLR-2141: ---------------------------------- Attachment: dih-file.xml dih-config.xml Hi, I am facing this error too and it seems that something is broken in 4.x branch. I am attaching two files which can help to reproduce the problem: 1) dih-config.xml contains dih configuration which uses escapeSql function with outer entity parameter 2) dih-file.xml To create outer entity without any db related stuff i need to create it from file. Note: YOU MUST CHANGE ABSOLUTE PATH TO THIS FILE IN dih-config.xml to correct one. -------------------- Ok, i can also shay the light on what happens under the hood: The problem is in instances of VariableResolverImpl which are created every time anyone calls DocBuilder#getVariableResolver(); First, it is called to create function namespaces which are cached in DocBuilder instance. Then it is created when DocBuilder#doFullDump() is called. Then subEntity tries to resolve its 'query' parameter which has escapeSql function, and escapeSql function tries to resolve its param with the first VariableResolver which know nothing about current context and outer entity values. However all fails a little bit later, when EvaluatorBag#evaluate() is called: List l = parseParams(expression, context.getVariableResolver()); if (l.size() != 1) { throw new DataImportHandlerException(SEVERE, "'escapeSql' must have at least one parameter "); } String s = l.get(0).toString(); return s.replaceAll Here parseParams returns list with single VariableWrapper, but wrapper.toString returns null because variable cant be resolved. And finally (ta-dam!) replaceAll method is called on null value. P.s. don`t be confused with FileDataSource for first entity mixed up with Sql query for second entity. Absense of sql datasource has no effect on this bug. Thanks, it would be great if this bug will be fixed ASAP. > NullPointerException when using escapeSql function > -------------------------------------------------- > > Key: SOLR-2141 > URL: https://issues.apache.org/jira/browse/SOLR-2141 > Project: Solr > Issue Type: Bug > Components: contrib - DataImportHandler > Affects Versions: 1.4.1 > Environment: openjdk 1.6.0 b12 > Reporter: Edward Rudd > Assignee: Koji Sekiguchi > Attachments: dih-config.xml, dih-file.xml, SOLR-2141-sample.patch > > > I have two entities defined, nested in each other.. > <entity name="article" query="select category, subcategory from articles"> > <entity name="other" query="select other from othertable where > category='${dataimporter.functions.escapeSql(article.category)}' > AND > subcategory='${dataimporter.functions.escapeSql(article.subcategory)}'"> > </entity> > </entity> > Now, when I run that it bombs on any article where subcategory = '' (it's a > NOT NULL column so empty string is there) If i do where subcategory!='' in > the article query it works fine (aside from not pulling in all of the > articles). > org.apache.solr.handler.dataimport.DataImportHandlerException: > java.lang.NullPointerException > at > org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:424) > at > org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:383) > at > org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:242) > at > org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:180) > at > org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:331) > at > org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:389) > at > org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:370) > Caused by: java.lang.NullPointerException > at > org.apache.solr.handler.dataimport.EvaluatorBag$1.evaluate(EvaluatorBag.java:75) > at > org.apache.solr.handler.dataimport.EvaluatorBag$5.get(EvaluatorBag.java:216) > at > org.apache.solr.handler.dataimport.EvaluatorBag$5.get(EvaluatorBag.java:204) > at > org.apache.solr.handler.dataimport.VariableResolverImpl.resolve(VariableResolverImpl.java:107) > at > org.apache.solr.handler.dataimport.TemplateString.fillTokens(TemplateString.java:81) > at > org.apache.solr.handler.dataimport.TemplateString.replaceTokens(TemplateString.java:75) > at > org.apache.solr.handler.dataimport.VariableResolverImpl.replaceTokens(VariableResolverImpl.java:87) > at > org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:71) > at > org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:237) > at > org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:357) > ... 6 more -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org