org.apache.solr.client.solrj.beans.BindingException: исключение при задании значения - PullRequest
0 голосов
/ 23 ноября 2018

Я получаю вышеуказанную ошибку, когда пытаюсь получить результаты в списке типов DTO от Solr.

У меня есть класс бина ниже

@Field("email_address")
private String email_address;

@Field("bean_module")
private String bean_module;

@Field("previous_status")
private List<String> previous_status;

И я пытаюсь получитьРезультаты Solr с использованием приведенного ниже кода:

SolrQuery params = new SolrQuery();
QueryResponse response = SOLRCORE.query(params);
SolrDocumentList productDocumentList = response.getResults();
DocumentObjectBinder binder = new DocumentObjectBinder();
List<LeadDTO>  arrayList = binder.getBeans(LeadDTO.class,productDocumentList);

приведенный выше код вызывает исключение ниже.

org.apache.solr.client.solrj.beans.BindingException: Could not instantiate object of class com.kaldin.dto.LeadDTO
    at org.apache.solr.client.solrj.beans.DocumentObjectBinder.getBean(DocumentObjectBinder.java:71)
    at org.apache.solr.client.solrj.beans.DocumentObjectBinder.getBeans(DocumentObjectBinder.java:50)
    at org.apache.solr.client.solrj.response.QueryResponse.getBeans(QueryResponse.java:618)
    at com.kaldin.dao.SolarDao.getSearchResult(SolarDao.java:193)
    at com.kaldin.dao.SolarDao.main(SolarDao.java:452)
Caused by: org.apache.solr.client.solrj.beans.BindingException: Exception while setting value : [pleaseverify@email.com] on private java.lang.String com.kaldin.dto.LeadDTO.email_address
    at org.apache.solr.client.solrj.beans.DocumentObjectBinder$DocField.set(DocumentObjectBinder.java:455)
    at org.apache.solr.client.solrj.beans.DocumentObjectBinder$DocField.inject(DocumentObjectBinder.java:438)
    at org.apache.solr.client.solrj.beans.DocumentObjectBinder.getBean(DocumentObjectBinder.java:67)
    ... 4 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.String field com.kaldin.dto.LeadDTO.email_address to java.util.ArrayList
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
    at java.lang.reflect.Field.set(Field.java:764)
    at org.apache.solr.client.solrj.beans.DocumentObjectBinder$DocField.set(DocumentObjectBinder.java:449)

ниже приведены поля, которые мы добавили в Solr

<field name="email_address" type="text_general" indexed="true" stored="true"/>
<field name="bean_module" type="text_general" indexed="true" stored="true"/>
<field name="previous_status" type="text_general" multiValued="true" indexed="true" stored="true"/>

Я сделал много поисков в Google, а также проверил тот же вопрос в StackOverflow и устал, но я все еще сохраняю ту же проблему

1 Ответ

0 голосов
/ 19 апреля 2019

Я столкнулся с тем же исключением.Я добавил multiValued = "false", и это сработало для меня.Поскольку в журналах указывается, что ArrayList будет назначено String, это невозможно.

Причина: org.apache.solr.client.solrj.beans.BindingException: исключение в то время какзначение настройки: [pleaseverify@email.com] на личном java.lang.String

и email_address у вас DTO это строка

@Field("email_address")
private String email_address;

Я надеюсь, когда вы используете multiValued="false" вот так будет работать.

<field name="email_address" type="text_general" indexed="true" stored="true" multiValued="false"/>
...