You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Rushikesh Garadade <ru...@gmail.com> on 2019/06/19 13:32:02 UTC

CloudSolrClient :java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map . Related to "router" : "compositeId"

Hello All,

I am using CloudSolrClient with Spring boot Solr 1.5.18.RELEASE and Solr
Version is Solr 4.10.3.

 new
CloudSolrClient.Builder().withZkHost(zkHosts).withZkChroot(solrProperties.getSolrZookeeperLocation()).build();


When I use Solr which comes wth CDH 5.16.1 default
when I save a document I get follwing error :

org.springframework.data.solr.UncategorizedSolrException:
java.lang.ClassCastException: *java.lang.String cannot be cast to
java.util.Map;* nested exception is
org.apache.solr.client.solrj.SolrServerException:
java.lang.ClassCastException: java.lang.String cannot be cast to
java.util.Map

at
org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:168)

at
org.springframework.data.solr.core.SolrTemplate.saveBeans(SolrTemplate.java:223)

at
com.solix.emailarchiving.email.solr.search.SolrTemplateWrapper.saveBeans(SolrTemplateWrapper.java:33)

at
com.solix.emailarchiving.email.solr.search.EmailSearchRepositoryImpl.saveEmails(EmailSearchRepositoryImpl.java:28)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:338)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)

at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)

at com.sun.proxy.$Proxy153.saveEmails(Unknown Source)

at
com.solix.emailarchiving.email.EmailSolrServiceImpl.saveEmails(EmailSolrServiceImpl.java:24)

at
com.solix.emailarchiving.email.EmailSolrServiceImpl$$FastClassBySpringCGLIB$$40f18538.invoke(<generated>)

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)

at
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)

at
com.solix.emailarchiving.annotation.ServiceTransactionAspect.beforeMethod(ServiceTransactionAspect.java:46)

at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)

at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:643)

at
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:632)

at
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)

at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)

at
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)

at
com.solix.emailarchiving.email.EmailSolrServiceImpl$$EnhancerBySpringCGLIB$$a84565b1.saveEmails(<generated>)

at
com.solix.emailarchiving.hbasetosolrsync.EmailsSync.sendEmailsToSolr(EmailsSync.java:157)

at
com.solix.emailarchiving.hbasetosolrsync.EmailsSync.syncMailsFromHbaseToSolr(EmailsSync.java:83)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:338)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197)

at
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:750)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)

at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)

at
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)

at
com.solix.emailarchiving.hbasetosolrsync.EmailsSync$$EnhancerBySpringCGLIB$$2714482.syncMailsFromHbaseToSolr(<generated>)

at
com.solix.emailarchiving.hbasetosolrsync.HBaseToSolrEmailSyncConsumer.processEmailIdModels(HBaseToSolrEmailSyncConsumer.java:129)

at
com.solix.emailarchiving.hbasetosolrsync.HBaseToSolrEmailSyncConsumer.hbaseToSolrSyncListen(HBaseToSolrEmailSyncConsumer.java:108)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at
org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:181)

at
org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:114)

at
org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:48)

at
org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:248)

at
org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:80)

at
org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:51)

at
org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:1001)

at
org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:981)

at
org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:932)

at
org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:801)

at
org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:689)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.lang.Thread.run(Thread.java:748)

Caused by: org.apache.solr.client.solrj.SolrServerException:
java.lang.ClassCastException: java.lang.String cannot be cast to
java.util.Map

at
org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:1246)

at
org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:1073)

at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:160)

at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:106)

at
org.springframework.data.solr.core.SolrTemplate.lambda$saveBeans$3(SolrTemplate.java:223)

at
org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:164)

... 66 more

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to
java.util.Map

at org.apache.solr.common.cloud.DocRouter.getRouteField(DocRouter.java:53)

at
org.apache.solr.common.cloud.CompositeIdRouter.sliceHash(CompositeIdRouter.java:46)

at
org.apache.solr.common.cloud.HashBasedRouter.getTargetSlice(HashBasedRouter.java:38)

at
org.apache.solr.client.solrj.request.UpdateRequest.getRoutes(UpdateRequest.java:262)

at
org.apache.solr.client.solrj.impl.CloudSolrClient.directUpdate(CloudSolrClient.java:771)

at
org.apache.solr.client.solrj.impl.CloudSolrClient.sendRequest(CloudSolrClient.java:1263)

at
org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:1134)

... 71 more




After dug little deeper and googling I came to know that issue is something
related to router field in zookeepers *clusterstate.json*
Info about my collection in clusterstate.json is

"88_Exchange12_2":{

    "shards":{"shard1":{

        "range":"80000000-7fffffff",

        "state":"active",

        "replicas":{"core_node1":{

            "state":"active",

            "core":"88_Exchange12_2_shard1_replica1",

            "node_name":"SEZ-DESK-047-Linux:8983_solr",

            "base_url":"http://SEZ-DESK-047-Linux:8983/solr",

            "leader":"true"}}}},

    "maxShardsPerNode":"1",

   * "router":"compositeId",*

    "replicationFactor":"1",

    "autoAddReplicas":"false",

    *"routerSpec":{"name":"compositeId"}*},


Value in router field is expected to be like
*"router":{"name":"compositeId"}. * hoewever it is getting stored incorrect
and thus result into above ClassCastException.

However when I use Apache Solr same version 4.10.3, "router" set with
correct value.


  "92_S2R1_35":{

    "replicationFactor":"1",

    "shards":{

      "shard1":{

        "range":"80000000-ffffffff",

        "state":"active",

        "replicas":{"core_node2":{

            "core":"92_S2R1_35_shard1_replica1",

            "base_url":"http://172.52.110.44:8983/solr",

            "node_name":"172.52.110.44:8983_solr",

            "state":"down",

            "leader":"true"}}},

      "shard2":{

        "range":"0-7fffffff",

        "state":"active",

        "replicas":{}}},

 *   "**router":{"name":"compositeId"}**,*

    "maxShardsPerNode":"1",

    "autoAddReplicas":"false",

    "autoCreated":"true"}





Q1. How to solve this. Can we set *router *programatically form java code?
Q2. In CDH's clusterstate.json we can see one more field named *'routerSpec'
*which has correct value, but i think its not getting used. Is there a way
to use this field as router and get the work done?

Re: CloudSolrClient :java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map . Related to "router" : "compositeId"

Posted by Shawn Heisey <ap...@elyograg.org>.
On 6/19/2019 7:44 AM, Shawn Heisey wrote:
> The version of SolrJ that's included in Spring Boot 1.5.8 is 5.5.4 ... 
> CloudSolrClient does not do well when the client version is 
> significantly different than the server version.  Pairing a 5.5.4 client 
> with a 4.10.3 server could be problematic.

Apologies, I made a typo when I searched for info on Spring Boot.  I got 
info for 1.5.8, you're on 1.5.18.

Searching for the correct version, I get 5.5.5 as the SolrJ version. 
Which is substantially identical to 5.5.4.

Thanks,
Shawn

Re: CloudSolrClient :java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map . Related to "router" : "compositeId"

Posted by Shawn Heisey <ap...@elyograg.org>.
On 6/19/2019 7:32 AM, Rushikesh Garadade wrote:
> I am using CloudSolrClient with Spring boot Solr 1.5.18.RELEASE and Solr
> Version is Solr 4.10.3.

When using Spring's packaging of SolrJ, you need to talk to Spring about 
most problems you're having.  They do more than simply include SolrJ and 
make it available, they have their own code running on top of it.

The version of SolrJ that's included in Spring Boot 1.5.8 is 5.5.4 ... 
CloudSolrClient does not do well when the client version is 
significantly different than the server version.  Pairing a 5.5.4 client 
with a 4.10.3 server could be problematic.

Thanks,
Shawn