Vedanshu
Vedanshu

Reputation: 2296

Solr custom UpdateRequestProcessor failing with "Error Instantiating UpdateRequestProcessorFactory"

I've trying to calculate the length of a field (like title). I'm using Nutch for crawling the webpages. I've created a fieldProcessor.jar file with the following code:

FieldProcessorFactory.java

package ved;

import java.io.IOException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;

public class FieldProcessorFactory extends UpdateRequestProcessorFactory
{
  @Override
  public UpdateRequestProcessor getInstance(SolrQueryRequest req, SolrQueryResponse rsp, UpdateRequestProcessor next)
  {
    return new FieldProcessor(next);
  }
}

FieldProcessor.java

package ved;

import java.io.IOException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;

class FieldProcessor extends UpdateRequestProcessor
{
  public FieldProcessor( UpdateRequestProcessor next) {
    super( next );
  }

  @Override
  public void processAdd(AddUpdateCommand cmd) throws IOException {
      String title = (String) cmd.getSolrInputDocument().get("title").getValue();        
      cmd.getSolrInputDocument().addField("title_length_i", title.split(" ").length);        
      super.processAdd(cmd);
  }
}

I've added the following lines in solrconfig.xml:

  <lib dir="${solr.install.dir:../../../..}/plugins/" regex="fieldProcessor.jar" />

  <updateRequestProcessorChain name="process-articles" lib="custom-libs" version="1">
      <processor class="ved.FieldProcessor"/>
      <processor class="solr.LogUpdateProcessorFactory" />
      <processor class="solr.DistributedUpdateProcessorFactory" />
      <processor class="solr.RunUpdateProcessorFactory" />
  </updateRequestProcessorChain>

  <initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
      <str name="df">text</str>
      <str name="update.chain">process-articles</str>
    </lst>
  </initParams>

After this I'm reindexing using Nutch. But upon reloading the core I'm getting following error:

nutch: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, ved.FieldProcessor failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory

Why am I getting this error ?

EDIT Here is the Solr log:

2020-02-21 14:19:51.172 ERROR (qtp1282788025-21) [   x:nutch] o.a.s.s.HttpSolrCall null:org.apache.solr.common.SolrException: Error handling 'reload' action
    at org.apache.solr.handler.admin.CoreAdminOperation.lambda$static$2(CoreAdminOperation.java:113)
    at org.apache.solr.handler.admin.CoreAdminOperation.execute(CoreAdminOperation.java:384)
    at org.apache.solr.handler.admin.CoreAdminHandler$CallInfo.call(CoreAdminHandler.java:388)
    at org.apache.solr.handler.admin.CoreAdminHandler.handleRequestBody(CoreAdminHandler.java:174)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:173)
    at org.apache.solr.servlet.HttpSolrCall.handleAdmin(HttpSolrCall.java:748)
    at org.apache.solr.servlet.HttpSolrCall.handleAdminRequest(HttpSolrCall.java:729)
    at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:510)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:361)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:305)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1691)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle(Server.java:534)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.solr.common.SolrException: Unable to reload core [nutch]
    at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:1189)
    at org.apache.solr.handler.admin.CoreAdminOperation.lambda$static$2(CoreAdminOperation.java:111)
    ... 36 more
Caused by: org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, ved.FieldProcessor failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:977)
    at org.apache.solr.core.SolrCore.reload(SolrCore.java:640)
    at org.apache.solr.core.CoreContainer.reload(CoreContainer.java:1183)
    ... 37 more
Caused by: org.apache.solr.common.SolrException: Error Instantiating UpdateRequestProcessorFactory, ved.FieldProcessor failed to instantiate org.apache.solr.update.processor.UpdateRequestProcessorFactory
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:774)
    at org.apache.solr.core.SolrCore.createInitInstance(SolrCore.java:809)
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2717)
    at org.apache.solr.update.processor.UpdateRequestProcessorChain.init(UpdateRequestProcessorChain.java:127)
    at org.apache.solr.core.SolrCore.createInitInstance(SolrCore.java:811)
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2698)
    at org.apache.solr.core.SolrCore.initPlugins(SolrCore.java:2692)
    at org.apache.solr.core.SolrCore.loadUpdateProcessorChains(SolrCore.java:1401)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:933)
    ... 39 more
Caused by: java.lang.ClassCastException: class ved.FieldProcessor
    at java.lang.Class.asSubclass(Class.java:3404)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:539)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:486)
    at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:753)
    ... 47 more

2020-02-21 14:19:52.209 INFO  (qtp1282788025-12) [   ] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/cores params={indexInfo=false&wt=json&_=1581436974406} status=0 QTime=0
2020-02-21 14:19:52.227 INFO  (qtp1282788025-15) [   ] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/cores params={wt=json&_=1581436974406} status=0 QTime=2
2020-02-21 14:19:52.256 INFO  (qtp1282788025-16) [   ] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/info/system params={wt=json&_=1581436974407} status=0 QTime=40

Upvotes: 0

Views: 257

Answers (1)

MatsLindh
MatsLindh

Reputation: 52792

The actual error is:

Caused by: java.lang.ClassCastException: class ved.FieldProcessor

This happens when the class you've given in your config isn't of the type expected. Since all the other classes end with Factory, you want to give it the FieldProcessorFactory instead, and not the FieldProcessor directly.

Upvotes: 1

Related Questions