java.lang.IllegalStateException: Failed to introspect Class

134,716

Solution 1

Caused by: java.lang.ClassNotFoundException: org.springframework.data.elasticsearch.core.ElasticsearchOperations

This error message means that the jar containing this class is not on the application classpath.

Add spring-data-elasticsearch jar to it, and your error should be gone.

if you are using maven, add the jar to the classpath this way :

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>3.2.5.RELEASE</version>
</dependency>

The version that you should use depends on the version of elastic search you are connecting to :

+--------------+----------------------------+----------------+-------------+
| Spring Data  | Spring Data Elasticsearch  | Elasticsearch  | Spring Boot |
+--------------+----------------------------+----------------+-------------+
| 2021.1       | 4.3.x                      |         7.15.2 | 2.5.x       |
| 2021.0       | 4.2.x                      |         7.12.0 | 2.5.x       |
| 2020.0.0     | 4.1.x                      |          7.9.3 | 2.3.x       |
| Neumann      | 4.0.x                      |          7.6.2 | 2.3.x       |
| Moore        | 3.2.x                      |          6.8.4 | 2.2.x       |
| Lovelace     | 3.1.x                      |          6.2.2 | 2.1.x       |
| Kay          | 3.0.x                      |          5.5.0 | 2.0.x       |
| Ingalls      | 2.1.x                      |          2.4.0 | 1.5.x       |
+--------------+----------------------------+----------------+-------------+

(source : https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.versions )

Solution 2

You need to add spring-data-elasticsearch.jar file into your class path. The error is showing because of this small mistake.

Share:
134,716

Related videos on Youtube

vidy
Author by

vidy

I am Software Developer..I like to learn new technologies..

Updated on February 25, 2022

Comments

  • vidy
    vidy about 2 years

    I am trying to add Elasticsearch to my project. I have addded the necessary dependencies to my pom.xml file. When I run the server I am getting this error:

    java.lang.IllegalStateException: Failed to introspect Class
    [net.kzn.shoppingbackend.config.HibernateConfig] from ClassLoader
    [ParallelWebappClassLoader
    

    Please help me solve this problem.

    Also I tried to find elasticsearch.yml file in eclipse to configure node but there is no such file. where Can i find elasticsearch.yml file.

    HibernateConfig.java

    package net.kzn.shoppingbackend.config;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Properties;
    
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.elasticsearch.client.Client;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.TransportAddress;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
    import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
    import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
    import org.springframework.orm.hibernate5.HibernateTransactionManager;
    import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @Configuration
    @EnableElasticsearchRepositories(basePackages = "net.kzn.shoppingbackend")
    @ComponentScan(basePackages = { "net.kzn.shoppingbackend" })
    @EnableTransactionManagement
    public class HibernateConfig {
    
        // change the below based on the DBMS you choose
        private final static String DATABASE_URL = "jdbc:h2:tcp://localhost/~/onlineshopping";
        private final static String DATABASE_DRIVER = "org.h2.Driver";
        private final static String DATABASE_DIALECT = "org.hibernate.dialect.H2Dialect";
        private final static String DATABASE_USERNAME = "sa";
        private final static String DATABASE_PASSWORD = "";
    
        @Value("${elasticsearch.home:/home/vidyesh/.m2/repository/org/elasticsearch/client/elasticsearch-rest-client/5.6.8}")
        private String elasticsearchHome;
    
        @Value("${elasticsearch.cluster.name:elasticsearch}")
        private String clusterName;
    
        // database bean will be available
        @Bean("dataSource")
        public DataSource getDataSource() {
            BasicDataSource dataSource = new BasicDataSource();
    
            // providing the database connection information
    
            dataSource.setDriverClassName(DATABASE_DRIVER);
            dataSource.setUrl(DATABASE_URL);
            dataSource.setUsername(DATABASE_USERNAME);
            dataSource.setPassword(DATABASE_PASSWORD);
    
            return dataSource;
        }
    
        // sessionFactory bean will be available
        @Bean
        public SessionFactory getSessionFactory(DataSource dataSource) {
    
            LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource);
    
            builder.addProperties(getHibernateProperties());
            builder.scanPackages("net.kzn.shoppingbackend");
    
            return builder.buildSessionFactory();
        }
    
        // All the hibernate properties will be returned in this method
        private Properties getHibernateProperties() {
    
            Properties properties = new Properties();
    
            properties.put("hibernate.dialect", DATABASE_DIALECT);
            properties.put("hibernate.show_sql", "true");
            properties.put("hibernate.format_sql", "true");
    
            properties.put("hibernate.hbm2ddl.auto", "update");
    
            return properties;
        }
    
        @Bean
        public Client client() {
            TransportClient client = null;
            try {
                final Settings elasticsearchSettings = Settings.builder()
                  .put("client.transport.sniff", true)
                  .put("path.home", elasticsearchHome)
                  .put("cluster.name", clusterName).build();
                client = new PreBuiltTransportClient(elasticsearchSettings); 
                client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            return client;
        }
    
        @Bean
        public ElasticsearchOperations elasticsearchTemplate() {
            return new ElasticsearchTemplate(client());
        }
    
        // transactionManager bean
        @Bean
        public HibernateTransactionManager geTransactionManager(SessionFactory sessionFactory) {
    
            HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);
            return transactionManager;
        }
    
    }
    

    Loaders.java

    package net.kzn.shoppingbackend.load;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.annotation.PostConstruct;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
    import org.springframework.stereotype.Component;
    import org.springframework.transaction.annotation.Transactional;
    
    import net.kzn.shoppingbackend.dto.Product;
    import net.kzn.shoppingbackend.dto.Users;
    import net.kzn.shoppingbackend.repository.UsersRepository;
    
    @Component
    public class Loaders {
    
        @Autowired
        ElasticsearchOperations operations;
    
        @Autowired
        UsersRepository usersRepository;
    
        @PostConstruct
        @Transactional
        public void loadAll(){
    
            operations.putMapping(Product.class);
            System.out.println("Loading Data");
            usersRepository.save(getData());
            System.out.printf("Loading Completed");
    
        }
    
        private List<Users> getData() {
            List<Users> userses = new ArrayList<>();
            userses.add(new Users("Ajay",123L, "Accounting", 12000L));
            userses.add(new Users("Jaga",1234L, "Finance", 22000L));
            userses.add(new Users("Thiru",1235L, "Accounting", 12000L));
            return userses;
        }
    }
    

    This is my pom.xml file

    POM.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>net.kzn</groupId>
    <artifactId>shoppingbackend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <name>shoppingbackend</name>
    <url>http://maven.apache.org</url>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>5.1.1.RELEASE</spring.version>
        <hibernate.version>5.3.6.Final</hibernate.version>
        <jackson.version>2.9.6</jackson.version>
    </properties>
    
    <dependencies>
        <!-- JUNIT version 4.12 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    
        <!-- spring -->
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
    
        <!-- H2 database -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency>
    
        <!-- Hibernate Dependency -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search-elasticsearch</artifactId>
            <version>5.10.4.Final</version>
        </dependency>
    
    
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
    
    
        <!-- database connection pooling -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.4.0</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.6</version>
        </dependency>
    
        <!-- SLF4J logging -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
    
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.25</version>
        </dependency>
    
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
    
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.12.Final</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.3.2</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/transport -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.3.2</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.elasticsearch.plugin/transport-netty4-client -->
        <dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty4-client</artifactId>
            <version>6.3.2</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-elasticsearch -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.0.11.RELEASE</version>
        </dependency>
    
    
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>4.2.2</version>
        </dependency>
    
    
    
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    Error

        ERROR Context
    initialization failed 19:56:48.391" o.s.web.context.ContextLoader java.lang.IllegalStateException:
    Failed to introspect Class[net.kzn.shoppingbackend.config.HibernateConfig]from ClassLoader[ParallelWebappClassLoader
    context:
        onlineshopping
        delegate:false---------->
    Parent Classloader:java.net.URLClassLoader @24d 46 ca6]
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:680)
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:577)
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:562)
    at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:620)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:721)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:662)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:630)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1491)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:507)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:477)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:99)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:691)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:528)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:400)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)
    

    Please tell me what am i doing wrong here? Problem is related to dependancies?

    • Thierry
      Thierry over 5 years
      Could you include the stacktrace that you got along with the error message ?
    • vidy
      vidy over 5 years
      I added full error message.
  • vidy
    vidy over 5 years
    I added spring-data-elasticsearch jar file to class path Failed to introspect Class error is gone but new error is showing
  • vidy
    vidy over 5 years
    None of the configured nodes are available: [{#transport#-1}{IQoE1_yHTfGWK_L2n5EHoQ}{127.0.0.1}{127.0.0.‌​1:9300}] 12:41:34.620" o.s.d.e.r.s.AbstractElasticsearchRepository
  • vidy
    vidy over 5 years
    Is it correct path? @Value("${elasticsearch.home:/home/vidyesh/.m2/repository/or‌​g/elasticsearch/clie‌​nt/transport/6.3.2}"‌​)
  • Thierry
    Thierry over 5 years
    @vidy you're next error message seems to say that elastic search servers you have configured in your application are not there (not started, not at this address, and / or not listening on right port). Please take also a moment to read the stackoverflow faq : to keep the site usable for everybody, comments should be related to the answer / question they are on, and not contains new questions to solve. If you have a new problem, you should raise a new question :)
  • Abdullah Khaled
    Abdullah Khaled about 2 years
    just a small note, please remove the versions from your dependencies, if they are spring-* for sure, and let the parent handle them
  • Thierry
    Thierry about 2 years
    @AbdullahKhaled The compatibility table is useful for those not using spring boot as parent artifact, to know quickly which version to include in their project.