java.lang.IllegalStateException: Failed to introspect Class
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.
Related videos on Youtube
vidy
I am Software Developer..I like to learn new technologies..
Updated on February 25, 2022Comments
-
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 over 5 yearsCould you include the stacktrace that you got along with the error message ?
-
vidy over 5 yearsI added full error message.
-
-
vidy over 5 yearsI added spring-data-elasticsearch jar file to class path Failed to introspect Class error is gone but new error is showing
-
vidy over 5 yearsNone 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 over 5 yearsIs it correct path? @Value("${elasticsearch.home:/home/vidyesh/.m2/repository/org/elasticsearch/client/transport/6.3.2}")
-
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 about 2 yearsjust a small note, please remove the versions from your dependencies, if they are spring-* for sure, and let the parent handle them
-
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.