亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號