Spring boot jndi type mismatch exception

Viewed 376

While retrieving jndi for mongo template I am getting ClassCastException.

I have following context tag in my server.xml.

<Context
    path="/JavaFormBuilderMongoDB-1.0"
    docBase="D:/apache-tomcat-8.5.15/webapps/JavaFormBuilderMongoDB-1.0.war"
    reloadable="false"
    override="true"
    allowLinking="true">
   <Resource name="jdbc/testMongodbDS" auth="Container" global="jdbc/testMongodbDS"
        type="org.springframework.data.mongodb.core.MongoTemplate"
        factory="com.dt.formbuilder.CustomMongoJNDIFactory"
        host="localhost" port="27017" db="testmongo" username="" password=""/>
</Context>

In the above resource I have used my custom factory to retrieve Mongo Template.In code I a trying to retrieve using jndi. The code snippet to retrieve mongo template is

public @Bean MongoTemplate mongoTemplate() throws Exception {
         Context initCtx = new InitialContext();
         Context envCtx = (Context) initCtx.lookup("java:comp/env");
         Object object =envCtx.lookup("jdbc/testMongodbDS");
         return (MongoTemplate) object;
}//mongoTemplate()

But while casting object to Mongo Template I am getting following exception.

org.springframework.jndi.TypeMismatchNamingException: Object of type [class org.springframework.data.mongodb.core.MongoTemplate] available at JNDI location [java:/comp/env/jdbc/testMongodbDS] is not assignable to [org.springframework.data.mongodb.core.MongoTemplate]
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:182) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:106) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
0 Answers
Related