conciliator icon indicating copy to clipboard operation
conciliator copied to clipboard

NPE in com.codefork.refine.solr.Solr

Open braiam opened this issue 2 years ago • 2 comments

Trying to reconciliate using Solr as backend leads to a null pointer exception for every query, example:

2022-11-01 11:48:29.865 ERROR 13338 --- [pool-5-thread-3] com.codefork.refine.solr.Solr            : error for query=Monte Cristi

java.lang.NullPointerException: null
	at com.codefork.refine.solr.Solr.createURL(Solr.java:57) ~[classes!/:3.1.0]
	at com.codefork.refine.solr.Solr.search(Solr.java:63) ~[classes!/:3.1.0]
	at com.codefork.refine.datasource.WebServiceDataSource.searchCheckCache(WebServiceDataSource.java:272) ~[classes!/:3.1.0]
	at com.codefork.refine.datasource.WebServiceSearchTask.call(WebServiceSearchTask.java:45) ~[classes!/:3.1.0]
	at com.codefork.refine.datasource.WebServiceSearchTask.call(WebServiceSearchTask.java:15) ~[classes!/:3.1.0]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]

The configuration is simple:

cache.enabled=true
cache.ttl=3600
cache.size=64MB

datasource.solr.name=A Solr Second Level administrative division of Dominican Republic
datasource.solr.nametype.id=/location/location
datasource.solr.nametype.name=Geographic Name
datasource.solr.url.query=http://localhost:8983/solr/iso_adm2_dom/select?wt=xml&df=nombre_provincia&fl=id%20score%20nombre_provincia&q={{QUERY}}&rows={{ROWS}}&sort=score%20desc
datasource.solr.url.document=http://localhost:8983/solr/iso_adm2_dom/get?id={{id}}
datasource.solr.field.id=id
datasource.solr.field.name=nombre_provincia

The solr backend has zero problem responding to the queries:

➜  ~ curl http://localhost:8983/solr/iso_adm2_dom/select\?wt\=xml\&df\=nombre_provincia\&fl\=id%20score%20nombre_provincia\&q\=Monte%20Cristi\&rows=5\&sort=score%20desc
<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">46</int>
  <lst name="params">
    <str name="q">Monte Cristi</str>
    <str name="df">nombre_provincia</str>
    <str name="fl">id score nombre_provincia</str>
    <str name="sort">score desc</str>
    <str name="rows">5</str>
    <str name="wt">xml</str>
  </lst>
</lst>
<result name="response" numFound="2" start="0" maxScore="3.966993" numFoundExact="true">
  <doc>
    <str name="id">15</str>
    <str name="nombre_provincia">Monte Cristi</str>
    <float name="score">3.966993</float></doc>
  <doc>
    <str name="id">29</str>
    <str name="nombre_provincia">Monte Plata</str>
    <float name="score">1.8048377</float></doc>
</result>
</response>

braiam avatar Nov 01 '22 17:11 braiam

Found the problem, I was running java from another directory where conciliator.properties doesn't exist. A hint would be helpful for those cases.

braiam avatar Nov 01 '22 17:11 braiam

That's a good idea--I think I can add some logging to warn when the API route for Solr is used but it's not configured. Keeping this issue open for that. Thank you for reporting this!

codeforkjeff avatar Nov 01 '22 18:11 codeforkjeff