Exception in thread “main” java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET

妖精的绣舞 提交于 2020-01-03 10:06:29

问题


Hello I try to index a row in my database in solr from my java application. I have added the necessary jars, but I keep on getting this error. My solr schema is right and I make request just add new row to my database and I want it also to be indexed

Here is the error

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
    at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175)
    at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158)
    at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448)
    at org.apache.solr.client.solrj.impl.HttpClientUtil.setFollowRedirects(HttpClientUtil.java:223)
    at org.apache.solr.client.solrj.impl.HttpClientConfigurer.configure(HttpClientConfigurer.java:58)
    at org.apache.solr.client.solrj.impl.HttpClientUtil.configureClient(HttpClientUtil.java:115)
    at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:105)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.<init>(HttpSolrServer.java:155)
    at org.apache.solr.client.solrj.impl.HttpSolrServer.<init>(HttpSolrServer.java:128)
    at tan.indexSolr.<init>(indexSolr.java:195)
    at tan.indexSolr.main(indexSolr.java:51)

Here is my code

    public class indexSolr {
    private  Connection conn = null;
    private static HttpSolrServer  server;
      private Collection docs = new ArrayList();
      private int _totalSql = 0;
      private long _start = System.currentTimeMillis();


    public static void main(String[] args) throws SolrServerException, IOException, SQLException
    { String url = "http://localhost:8983/solr/db";



  indexSolr idxer = new indexSolr(url);

  idxer.doSqlDocuments();

  idxer.endIndexing();




    }

    private void doSqlDocuments() throws SQLException {

        try {
            Class.forName("org.postgresql.Driver");

            conn = DriverManager.getConnection(
                    "jdbc:postgresql://localhost:5432/biz_cat",
                    "postgres", "pos");
            java.sql.Statement st = null;
           st = conn.createStatement();
           ResultSet rs =   st.executeQuery("select * from pl_biz order by id DESC LIMIT 1");

          while (rs.next()) {

            SolrInputDocument doc = new SolrInputDocument();

            Integer  id = rs.getInt("id");
            String name = rs.getString("name");
            String midname = rs.getString("midname");
            String lastname = rs.getString("lastname");
            String frlsname = rs.getString("frlsname");
            String biz_subject = rs.getString("biz_subject");
            String company_type = rs.getString("company_type");
            String obshtina = rs.getString("obshtina");
            String main_office_town = rs.getString("main_office_town");
            String address = rs.getString("address");
            String role = rs.getString("role");
            String country = rs.getString("country");
            String nace_code = rs.getString("nace_code");
            String nace_text = rs.getString("nace_text");
            String zip_code = rs.getString("zip_code");
            String phone = rs.getString("phone");
            String fax = rs.getString("fax");
            String email = rs.getString("email");
            String web = rs.getString("web");
            String location = rs.getString("location");
            String geohash = rs.getString("geohash");
            Integer popularity = rs.getInt("popularity");

            doc.addField("id", id);
            doc.addField("name", name);
            doc.addField("midname", midname);
            doc.addField("lastname", lastname);
            doc.addField("frlsname", frlsname);
            doc.addField("biz_subject", biz_subject);
            doc.addField("company_type", company_type);
            doc.addField("obshtina", obshtina);
            doc.addField("main_office_town", main_office_town);
            doc.addField("address", address);
            doc.addField("role", role);
            doc.addField("country", country);
            doc.addField("nace_code", nace_code);
            doc.addField("nace_text", nace_text);
            doc.addField("zip_code", zip_code);
            doc.addField("phone", phone);
            doc.addField("fax", fax);
            doc.addField("email", email);
            doc.addField("web", web);
            doc.addField("location", location);
            doc.addField("geohash", geohash);
            doc.addField("popularity", popularity);


            docs.add(doc);
             ++_totalSql;


            if (docs.size() > 1) {
                 // Commit within 5 minutes.
                UpdateResponse resp = server.add(docs);
                System.out.println (resp);
              if (resp.getStatus() != 0) {
                log("Some horrible error has occurred, status is: " +
                      resp.getStatus());
              }
              docs.clear();
            }
          }
        }
        catch (Exception ex)
        {
          ex.printStackTrace();
        }
        finally {
          if (conn != null) {
            conn.close();
          }
        }


    }

     private void endIndexing() throws IOException, SolrServerException {
            if (docs.size() > 0) { // Are there any documents left over?
              server.add(docs, 300000); // Commit within 5 minutes
            }
            try 
            {
            server.commit(); 

            }
            catch (Exception ex)
            {

                ex.printStackTrace();
            }


            long endTime = System.currentTimeMillis();
            log("Total Time Taken: " + (endTime - _start) +
                 " milliseconds to index " + _totalSql +
                " SQL rows" );
          }


          private static void log(String msg) {
            System.out.println(msg);
          }


          private indexSolr(String url) throws IOException, SolrServerException {
              // Create a multi-threaded communications channel to the Solr server.
          try {    
            server = new HttpSolrServer(url);

            server.setSoTimeout(1000);  // socket read timeout
            server.setConnectionTimeout(1000);
            server.setMaxRetries(1); 


          }
               catch (Exception ex)
               {

                   ex.printStackTrace();

               }
          }

}

回答1:


This answer has been taken from the comment, by @Pace on the 20th of April 2013

I've marked it as a community wiki post, as advised by Question with no answers, but issue solved in the comments.


NoSuchFieldError is almost always caused by incompatible versions.

What version of HttpClient do you have? Are you using Maven? Is it possible you have multiple versions of HttpClient?
Check these things and you should find your answer.



来源:https://stackoverflow.com/questions/16120471/exception-in-thread-main-java-lang-nosuchfielderror-def-content-charset

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!