Сообщение об ошибке «ArrayList не может быть приведен к java.lang.String» на конечных точках Solr DIH - PullRequest
0 голосов
/ 18 сентября 2018

Я настраиваю новый сервер Solr, и у меня возникла проблема, с которой я не сталкивался в предыдущих установках Solr.Когда я перехожу на вкладку «Импорт данных» ядра (даже не вызывая запрос на импорт), некоторые из HTTP-запросов, сделанных пользовательским интерфейсом администратора, не выполняются.Проверяя журналы Solr, я вижу следующую трассировку стека:

java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.String
    at org.apache.solr.handler.dataimport.RequestInfo.<init>(RequestInfo.java:52)
    at org.apache.solr.handler.dataimport.DataImportHandler.handleRequestBody(DataImportHandler.java:131)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:195)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:2503)
    at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:711)
    at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:517)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:384)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:330)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1629)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
    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.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:530)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
    at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
    at java.lang.Thread.run(Thread.java:748)

Эта же ошибка возникает, когда я начинаю импорт данных из пользовательского интерфейса администратора или действительно любой HTTP-запрос к конечной точке /solr/<core>/dataimport*.

Я копался в источнике и нашел строку, где это происходит: https://github.com/apache/lucene-solr/blob/1d85cd783863f75cea133fb9c452302214165a4d/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/RequestInfo.java#L52

if (requestParams.containsKey("command")) { 
    command = (String) requestParams.get("command");
}

Я думаю, что параметр command почему-то дважды включается в запрос и проходит через него.как ArrayList вместо String.В моем solrconfig.xml я определяю свой обработчик dataimportfull следующим образом:

<requestHandler name="/dataimportfull" class="solr.DataImportHandler">
    <lst name="defaults">
        <str name="config">./DIHconfig.xml</str>
        <str name="echoParams">explicit</str>
        <str name="wt">json</str>
        <str name="indent">true</str>
        <str name="importType">full</str>
        <str name="command">full-import</str>
        <str name="commit">true</str>
        <str name="clean">true</str>
        <str name="update.chain">add-unknown-fields-to-the-schema</str>
    </lst>
</requestHandler>

Я попытался удалить строку «команда», но ошибка все еще произошла.

Основное различие междуэтот экземпляр Solr и другие серверы Solr, которые я настроил, состоят в том, что этот экземпляр работает внутри контейнера Docker Windows Server 2016 с использованием образа, основанного на openjdk: 8-jdk-windowsservercore-ltsc2016 .Внутри этого контейнера я запускаю Solr 7.3.1.

Есть идеи о том, что может быть причиной этой ошибки?

1 Ответ

0 голосов
/ 18 сентября 2018

Разобрался.Там не было ничего плохого в моей настройке Solr.Вместо этого это была проблема с обратным прокси (IIS), сидящим перед Solr.То, как я передавал трафик в Solr, дублировало все параметры запроса.

Вот вопрос и ответ, который помог мне решить проблему: Модуль перезаписи URL IIS повторяет строку запроса .

...