Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从solrj SolrException中获取更多错误消息_Solr_Solrj - Fatal编程技术网

如何从solrj SolrException中获取更多错误消息

如何从solrj SolrException中获取更多错误消息,solr,solrj,Solr,Solrj,当我使用solrj向Solr发送查询时,有时会抛出SolrException。当我深入研究异常时,它只会说“坏请求”,并给出HTTP返回码(400) 当我获取请求URL并将其放在浏览器中时,我能够看到更丰富的错误消息。浏览器将显示一条错误消息,指出其中一个字段名称无效 我希望能够在我的日志文件中捕获这一点。我能够通过将所有参数复制到ApacheHTTP客户端POST请求(我使用POST而不是GET,因为GET使URL太长)并重新执行请求来捕获这一点,但这是低效的。有没有办法直接从SolrExce

当我使用solrj向Solr发送查询时,有时会抛出SolrException。当我深入研究异常时,它只会说“坏请求”,并给出HTTP返回码(400)

当我获取请求URL并将其放在浏览器中时,我能够看到更丰富的错误消息。浏览器将显示一条错误消息,指出其中一个字段名称无效

我希望能够在我的日志文件中捕获这一点。我能够通过将所有参数复制到ApacheHTTP客户端POST请求(我使用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
                }
            }
catch(SolrServer异常){
if(例如,getRootCause()instanceof SolrException){
SolrException ee=(SolrException)e.getRootCause();
HttpClient=新的HttpClient();
PostMethod方法=新的PostMethod(SOLR_URL);
//复制参数
迭代器iter=request.getParams().getParameterNamesIterator();
while(iter.hasNext()){
字符串p=iter.next();
setParameter(p,request.getParams().get(p));
}
int状态码;
试一试{
//重新执行并显示错误消息
statusCode=client.executeMethod(方法);
logger.error(方法.getResponseBodyAsString());
}捕获(异常e1){
//TODO自动生成的捕捉块
}
}

这些消息无法通过SolrJ获得。您可以在solr的日志文件中看到它们,但无法在您的客户端中捕获它们,因为solr只向客户端返回400错误状态和一般消息:(

从技术上讲,SolrJ可能还没有实现它,但这是可能的,我已经在SolrNet中捕获了整个错误消息。这可能是javabin编码的一个限制。