0

I've got the problem with core creation with Solr 6.3.0 I've got class extending lucene's TokenFilterFactory

public class CustomTokenFactory extends TokenFilterFactory 

In solr core solrconfig.xml

<lib dir="${solr.install.dir:../../../..}/target/" regex="myjar-1.0.0.jar" />

When I'm trying to start solr - the ClassCastException occurs

Caused by: org.apache.solr.common.SolrException: Plugin init failure for [schema.xml] fieldType "MyAnalyser": Plugin init failure for [schema.xml] analyzer/tokenizer: class com.myjar.CustomTokenFactory 
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:182)
    at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:491)
    ... 14 more
Caused by: org.apache.solr.common.SolrException: Plugin init failure for [schema.xml] analyzer/tokenizer: class com.myjar.CustomTokenFactory 
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:182)
    at org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:361)
    at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:104)
    at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:53)
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:152)
    ... 15 more
Caused by: java.lang.ClassCastException: class com.myjar.CustomTokenFactory 
    at java.lang.Class.asSubclass(Class.java:3404)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:540)
    at org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:625)
    at org.apache.solr.schema.FieldTypePluginLoader$2.create(FieldTypePluginLoader.java:341)
    at org.apache.solr.schema.FieldTypePluginLoader$2.create(FieldTypePluginLoader.java:334)
    at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:152)
    ... 19 more

My pom contains following solr\lucene libs

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/net.sf.jwordnet/jwnl -->
    <dependency>
        <groupId>net.sf.jwordnet</groupId>
        <artifactId>jwnl</artifactId>
        <version>1.4_rc3</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.opennlp/opennlp-tools -->
    <dependency>
        <groupId>org.apache.opennlp</groupId>
        <artifactId>opennlp-tools</artifactId>
        <version>1.5.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>
    <!-- for wikipedia cleanup -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.opennlp/opennlp-maxent -->
    <dependency>
        <groupId>org.apache.opennlp</groupId>
        <artifactId>opennlp-maxent</artifactId>
        <version>3.0.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.opennlp/opennlp-uima -->
    <dependency>
        <groupId>org.apache.opennlp</groupId>
        <artifactId>opennlp-uima</artifactId>
        <version>1.6.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-analysis-extras -->
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-analysis-extras</artifactId>
        <version>6.3.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>6.3.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.1</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-benchmark -->
    <!--  for indexing wikipedia -->
    <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-benchmark -->
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-benchmark</artifactId>
        <version>6.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-core</artifactId>
        <version>6.3.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>edu.stanford.nlp</groupId>
        <artifactId>stanford-corenlp</artifactId>
        <version>3.9.2</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.lucene</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

</dependencies>

What can be cause of such error in solr? My first idea was lib versions mismatch - but everywhere is *-6.3.0.jar

Dependency tree is like this:

 +- junit:junit:jar:3.8.1:test
[INFO] +- net.sf.jwordnet:jwnl:jar:1.4_rc3:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.21:compile
[INFO] +- org.apache.opennlp:opennlp-tools:jar:1.5.3:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.7.21:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.5:compile
[INFO] +- org.apache.opennlp:opennlp-maxent:jar:3.0.3:compile
[INFO] +- org.apache.opennlp:opennlp-uima:jar:1.6.0:compile
[INFO] +- org.apache.solr:solr-analysis-extras:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-analyzers-common:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-analyzers-icu:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-analyzers-kuromoji:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-analyzers-morfologik:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-analyzers-phonetic:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-analyzers-smartcn:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-analyzers-stempel:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-backward-codecs:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-classification:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-codecs:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-core:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-expressions:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-grouping:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-highlighter:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-join:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-memory:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-misc:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-queries:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-queryparser:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-sandbox:jar:6.3.0:provided
[INFO] |  +- org.apache.lucene:lucene-spatial-extras:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-suggest:jar:6.3.0:provided
[INFO] |  +- com.carrotsearch:hppc:jar:0.7.1:provided
[INFO] |  +- com.facebook.presto:presto-parser:jar:0.122:provided
[INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.5.4:provided
[INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.5.4:provided
[INFO] |  +- com.github.ben-manes.caffeine:caffeine:jar:1.0.1:provided
[INFO] |  +- com.google.guava:guava:jar:14.0.1:compile
[INFO] |  +- com.google.protobuf:protobuf-java:jar:2.5.0:compile
[INFO] |  +- com.ibm.icu:icu4j:jar:56.1:compile
[INFO] |  +- com.tdunning:t-digest:jar:3.1:provided
[INFO] |  +- commons-cli:commons-cli:jar:1.2:compile
[INFO] |  +- commons-codec:commons-codec:jar:1.10:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.2.2:provided
[INFO] |  +- commons-configuration:commons-configuration:jar:1.6:provided
[INFO] |  +- commons-fileupload:commons-fileupload:jar:1.3.1:provided
[INFO] |  +- commons-io:commons-io:jar:2.5:compile
[INFO] |  +- commons-lang:commons-lang:jar:2.6:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:provided
[INFO] |  +- io.airlift:slice:jar:0.10:provided
[INFO] |  +- javax.servlet:javax.servlet-api:jar:3.1.0:compile
[INFO] |  +- joda-time:joda-time:jar:2.2:compile
[INFO] |  +- log4j:log4j:jar:1.2.17:compile
[INFO] |  +- org.antlr:antlr4-runtime:jar:4.5.1-1:provided
[INFO] |  +- org.apache.commons:commons-exec:jar:1.3:provided
[INFO] |  +- org.apache.curator:curator-client:jar:2.8.0:provided
[INFO] |  +- org.apache.curator:curator-framework:jar:2.8.0:provided
[INFO] |  +- org.apache.curator:curator-recipes:jar:2.8.0:provided
[INFO] |  +- org.apache.hadoop:hadoop-annotations:jar:2.7.2:provided
[INFO] |  |  \- jdk.tools:jdk.tools:jar:1.8:system
[INFO] |  +- org.apache.hadoop:hadoop-auth:jar:2.7.2:provided
[INFO] |  +- org.apache.hadoop:hadoop-common:jar:2.7.2:provided
[INFO] |  +- org.apache.htrace:htrace-core:jar:3.2.0-incubating:compile
[INFO] |  +- org.apache.httpcomponents:httpclient:jar:4.4.1:compile
[INFO] |  +- org.apache.httpcomponents:httpcore:jar:4.4.1:compile
[INFO] |  +- org.apache.httpcomponents:httpmime:jar:4.4.1:compile
[INFO] |  +- org.apache.zookeeper:zookeeper:jar:3.4.6:compile
[INFO] |  +- org.carrot2:morfologik-fsa:jar:2.1.1:provided
[INFO] |  +- org.carrot2:morfologik-polish:jar:2.1.1:provided
[INFO] |  +- org.carrot2:morfologik-stemming:jar:2.1.1:provided
[INFO] |  +- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
[INFO] |  +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] |  +- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile
[INFO] |  +- org.codehaus.woodstox:woodstox-core-asl:jar:4.4.1:compile
[INFO] |  +- org.eclipse.jetty:jetty-continuation:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-deploy:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-http:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-io:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-jmx:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-rewrite:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-security:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-server:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-servlet:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-servlets:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-util:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-webapp:jar:9.3.8.v20160314:provided
[INFO] |  +- org.eclipse.jetty:jetty-xml:jar:9.3.8.v20160314:provided
[INFO] |  +- org.locationtech.spatial4j:spatial4j:jar:0.6:compile
[INFO] |  +- org.noggit:noggit:jar:0.6:compile
[INFO] |  +- org.ow2.asm:asm:jar:5.1:provided
[INFO] |  +- org.ow2.asm:asm-commons:jar:5.1:provided
[INFO] |  +- org.restlet.jee:org.restlet:jar:2.3.0:provided
[INFO] |  +- org.restlet.jee:org.restlet.ext.servlet:jar:2.3.0:provided
[INFO] |  \- org.slf4j:jcl-over-slf4j:jar:1.7.7:compile
[INFO] +- org.apache.solr:solr-solrj:jar:6.3.0:compile
[INFO] +- org.apache.hadoop:hadoop-hdfs:jar:2.7.1:compile
[INFO] |  +- org.mortbay.jetty:jetty:jar:6.1.26:compile
[INFO] |  +- org.mortbay.jetty:jetty-util:jar:6.1.26:compile
[INFO] |  +- com.sun.jersey:jersey-core:jar:1.9:compile
[INFO] |  +- com.sun.jersey:jersey-server:jar:1.9:compile
[INFO] |  |  \- asm:asm:jar:3.1:compile
[INFO] |  +- commons-daemon:commons-daemon:jar:1.0.13:compile
[INFO] |  +- javax.servlet:servlet-api:jar:2.5:compile
[INFO] |  +- xmlenc:xmlenc:jar:0.52:compile
[INFO] |  +- io.netty:netty-all:jar:4.0.23.Final:compile
[INFO] |  +- xerces:xercesImpl:jar:2.9.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.3.04:compile
[INFO] |  \- org.fusesource.leveldbjni:leveldbjni-all:jar:1.8:compile
[INFO] +- org.apache.lucene:lucene-benchmark:jar:6.3.0:compile
[INFO] |  +- org.apache.lucene:lucene-facet:jar:6.3.0:compile
[INFO] |  +- net.sourceforge.nekohtml:nekohtml:jar:1.9.17:compile
[INFO] |  \- org.apache.commons:commons-compress:jar:1.11:compile
[INFO] +- org.apache.solr:solr-core:jar:6.3.0:provided
[INFO] \- edu.stanford.nlp:stanford-corenlp:jar:3.9.2:compile
[INFO]    +- com.apple:AppleJavaExtensions:jar:1.4:compile
[INFO]    +- de.jollyday:jollyday:jar:0.4.9:compile
[INFO]    +- com.io7m.xom:xom:jar:1.2.10:compile
[INFO]    |  \- xalan:xalan:jar:2.7.0:compile
[INFO]    +- com.googlecode.efficient-java-matrix-library:ejml:jar:0.23:compile
[INFO]    +- org.glassfish:javax.json:jar:1.0.4:compile
[INFO]    +- javax.activation:javax.activation-api:jar:1.2.0:compile
[INFO]    +- javax.xml.bind:jaxb-api:jar:2.4.0-b180830.0359:compile
[INFO]    +- com.sun.xml.bind:jaxb-core:jar:2.3.0.1:compile
[INFO]    \- com.sun.xml.bind:jaxb-impl:jar:2.4.0-b180830.0438:compile

Any suggestions? Thanks!

Danila Zharenkov
  • 1,720
  • 1
  • 15
  • 27
  • What is the import path for `TokenFilterFactory` in your code example? Another option is that you've ended up [bundling a version of the TokenFilterFactory class](https://stackoverflow.com/questions/38044932/classcastexception-thrown-when-calling-assubclass-from-separate-jar) yourself and have conflicting class names (i.e. they're referencing different classes). – MatsLindh May 16 '19 at 10:36
  • The import is `import org.apache.lucene.analysis.util.TokenFilterFactory;`; IDEA shows that this class is in `lucene-analyzers-common:6.3.0`. I tried to build mvn dependency tree to find any lib conflicts, but there is no other libs containing such class – Danila Zharenkov May 16 '19 at 11:13
  • You should post your entire Pom.xml file. On the other hand try investigating in the other dependencies. In my experience such errors can happen when you have multiple dependencies of the same library. – freedev May 16 '19 at 18:21
  • @freedev I agree with you, that it is dependencies problem, but I can't find where the conflict occurs. Added to question full dependencies list and maven dependency tree – Danila Zharenkov May 17 '19 at 07:20
  • I tried to exclude `lucene-analyzers-common` from all dependencies and add it explicitly - same result – Danila Zharenkov May 17 '19 at 07:36

1 Answers1

1

I found the problem. It's not related to class loading, but to schema.xml. I defined my CustomTokenFactory in <tokenizer> tag instead of <filter> tag. And solr was trying to do asSubclass to TokenizerFactory. The remote debugging helps a lot in this case.

Danila Zharenkov
  • 1,720
  • 1
  • 15
  • 27