为了账号安全,请及时绑定邮箱和手机立即绑定

NamedList<Object> 抛出类转换异常

NamedList<Object> 抛出类转换异常

梵蒂冈之花 2023-07-28 15:39:41
我想形成一个 NamedList 对象,如下所示:response={numFound=57279026,start=0,docs=[SolrDocument{timestamp_update=Thu Jan 01 01:00:00 CET 1970}]}}当我这样做时,当我的代码尝试访问结果时,我会抛出异常:SolrDocumentList results = response.getResults();**java.lang.ClassCastException: org.apache.solr.common.util.SimpleOrderedMap cannot be cast to org.apache.solr.common.SolrDocumentList**我应该如何创建 NamedList,以便它不会引发异常这是我的做法:NamedList<Object> nl = new SimpleOrderedMap<>();private static  Map<String, Object> solrDocumentMap= new HashMap<>();solrDocumentMap.put("timestamp_update", TIMESTAMP_UPDATE);solrDocument= new SolrDocument(solrDocumentMap);solrDocumentList.add(solrDocument);nl.add("numFound", "57279026");nl.add("start", "0"); nl.add("docs", solrDocumentList); NamedList<Object> nl1 = new NamedList<>(Collections.singletonMap("response", nl)); response.setResponse(nl1);这是 QueryResponse 的内置类,它将响应转换为 SolarDocument  public void setResponse(NamedList<Object> res) {        super.setResponse(res);        for(int i = 0; i < res.size(); ++i) {            String n = res.getName(i);            if ("responseHeader".equals(n)) {                this._header = (NamedList)res.getVal(i);            } else if ("response".equals(n)) {                this._results = (SolrDocumentList)res.getVal(i);            } else if ("sort_values".equals(n)) {                this._sortvalues = (NamedList)res.getVal(i);            } else if ("facet_counts".equals(n)) {                this._facetInfo = (NamedList)res.getVal(i);            } else if ("debug".equals(n)) {                this._debugInfo = (NamedList)res.getVal(i);                this.extractDebugInfo(this._debugInfo);            } 
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

终于找到解决办法了,希望对大家有帮助。我从 Solr 获得了 XML 格式的响应,并读取了该文件并使用 XMLResponseParser 对其进行了解析。不知何故,JsonParser 不适用于 Solar,如果您使用 java 反序列化,Solr 中存在一个不兼容的错误。


这也适用于查询响应类的内部类型转换。



protected QueryResponse getResponse(String fileName) throws IOException {


        Path path = Paths.get(resDir + "/" + fileName);

        InputStream body= new FileInputStream(path.toFile());

        NamedList<Object> result= processResponse(body, null);

        QueryResponse response = new QueryResponse();

        response.setResponse(result);

        return response;

    }


    private NamedList<Object> processResponse(InputStream body, Object o) {

        XMLResponseParser parser= new XMLResponseParser();

        NamedList<Object> result= parser.processResponse(body, "UTF-8");

        return result;

    }


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信