Как я могу получить больше сообщений об ошибках из Solrj SolrException - PullRequest
0 голосов
/ 13 июля 2011

Когда я отправляю запросы в Solr, используя solrj, я иногда получаю исключение SolrException. Когда я перебираю исключение, он просто говорит «Неверный запрос» и дает код возврата HTTP (который равен 400).

Когда я взял URL-адрес запроса и поместил его в браузер, я смог увидеть более подробное сообщение об ошибке. В браузере отображается сообщение об ошибке, в котором говорится, что одно из имен полей недопустимо.

Я хотел бы иметь возможность захватить это внутри моего файла журнала. Я смог перехватить это, скопировав все параметры в запрос POST HTTP-клиента Apache (я использую POST, а не GET, потому что GET сделал URL-адрес слишком длинным) и повторно выполняя запрос, но это неэффективно. Есть ли способ получить сообщение об ошибке из SolrException напрямую?

Вот что я делаю:

catch (SolrServerException e) {
            if(e.getRootCause() instanceof SolrException) {
                SolrException ee = (SolrException) e.getRootCause();
                HttpClient client = new HttpClient();
                PostMethod method = new PostMethod(SOLR_URL);

                // copy params over
                Iterator<String> iter = request.getParams().getParameterNamesIterator();
                while(iter.hasNext()) {
                    String p = iter.next();
                    method.setParameter(p, request.getParams().get(p));
                }
                int statusCode;
                try {
                    // re execute and display the error message
                    statusCode = client.executeMethod(method);
                    logger.error(method.getResponseBodyAsString());
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                }
            }

1 Ответ

1 голос
/ 26 сентября 2011

Эти сообщения недоступны через SolrJ. Вы можете увидеть их в лог-файле solr, но у вас нет возможности перехватить их в вашем клиенте, поскольку solr возвращает состояние ошибки 400 только с общим сообщением клиенту: (*

...