spring jdbc suddenly throws class not found error on SingleColumnRowMapper - spring

I have been developing a Spring project about 6 months. This project is built with maven and spring. Suddenly today i discovered that jdbc sections of the code throwing the error below. I made some changes to my web services in the project lately but I did not change any maven configurations or spring configurations since the last time the application worked stable. Where should I start to look for the error?
Any comment is appreciated.
Caused by: java.lang.NoClassDefFoundError: org/springframework/jdbc/core/SingleColumnRowMapper
at org.springframework.jdbc.core.JdbcTemplate.getSingleColumnRowMapper(JdbcTemplate.java:1184)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:744)
at com.pozitron.bkmtransfer.core.dao.AcsKeyAliasDaoImpl.findRsaPubKeyByBankId(AcsKeyAliasDaoImpl.java:43)
at com.pozitron.bkmtransfer.services.core.CipherActionImpl.verify(CipherActionImpl.java:97)
at com.pozitron.bkmtransfer.services.TransferActionImpl.transferMoney(TransferActionImpl.java:67)
at com.pozitron.bkmtransfer.ws.endpoints.TransferEndPoint.transferMoney(TransferEndPoint.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

At first make sure that you have this class (jar) on your classpath. If you do then make sure that you have only one version of this class in your classpath. It might be that new jar was included if you changed/added some dependencies.
Also, if you're starting your app from the eclipse then the only thing you might be needing is to do project->clean
P.S. Are you getting this error at compile time or runtime?

Related

Spring Boot w/o starter-parent pom not loading jdbc driver

I have my Spring-Boot server working well using the 'starter-parent' pom. The problem is that I'd rather not use the spring pom as the parent if at all possible. When I just include the spring-boot-dependencies pom though (as described here), I end up with the driver not being loaded:
18:14:26.127 [localhost-startStop-1] WARN o.a.t.jdbc.pool.PooledConnection - Not loading a JDBC driver as driverClassName property is null.
18:14:26.147 [localhost-startStop-1] ERROR o.a.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool.
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/mydb
at java.sql.DriverManager.getConnection(DriverManager.java:689) ~[na:1.8.0_45]
at java.sql.DriverManager.getConnection(DriverManager.java:208) ~[na:1.8.0_45]
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:305) ~[tomcat-jdbc-8.0.23.jar:na]
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200) ~[tomcat-jdbc-8.0.23.jar:na]
...
I'm pretty sure this has to do with the driver not being loaded by the DriverManager & ServiceLoader bits, but I'm not sure how to force that to happen. Any suggestions will be much appreciated.
FWIW: If I try to 'Class.forName()' the MySQL jdbc driver I actually end up with a 'NoClassDefFoundError', which is puzzling because the mysql-connector is definitely in my pom. Multiple class loaders or something?
I believe that my issue is related to how maven is importing vs. inheriting dependencies, those provided by my company's parent pom and those coming with spring-boot. I can't really explain it, but if I comment out the dependency management section of our parent pom everything seems to work correctly. This is definitely some kind of mystical maven behavior, but for now I'm working on separating the dependency management and plugin configuration aspects of our parent pom. That way I can inherit the plugin config, and not the dependency management.
Thanks for your help :)

Spring Boot v1.2 AbstractMethodError due to RepositoryInformation

Im building an application based on Spring Boot v1.2. While my application boots successfully and executes well (so far.. ), I'm unable to test using the spring boot framework because of an AbstractMethodError.
The last few lines of the trace are as below
Caused by: java.lang.AbstractMethodError: org.springframework.data.jpa.repository.support.LockModeRepositoryPostProcessor.postProcess(Lorg/springframework/aop/framework/ProxyFactory;Lorg/springframework/data/repository/core/RepositoryInformation;)V
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:185)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:84)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
... 55 more
To analyze the above error, I checked the jar files from classpath involving the above classes. So the info is available as below
jar:file:/C:/rearch/intellij-workspace/springbootproj/lib/spring-aop-4.1.2.RELEASE.jar!/org/springframework/aop/framework/ProxyFactory.class
jar:file:/C:/rearch/mavenrepo/org/springframework/data/spring-data-commons/1.9.1.RELEASE/spring-data-commons-1.9.1.RELEASE.jar!/org/springframework/data/repository/core/RepositoryInformation.class
jar:file:/C:/rearch/intellij-workspace/springbootproj/lib/spring-data-jpa-1.3.3.jar!/org/springframework/data/jpa/repository/support/LockModeRepositoryPostProcessor.class
jar:file:/C:/rearch/intellij-workspace/springbootproj/lib/spring-test-4.1.2.RELEASE.jar!/org/springframework/test/context/support/DependencyInjectionTestExecutionListener.class
I'm not exactly sure on why spring-data-commons is coming up from maven repostory folder, while the others are being served from the project library.
While I debug that, I meanwhile need your help in figuring out the version compatibility between the above libraries.
I wasnt able to exactly pin point on what exactly is causing the error. Please help!
Thanks
The issue was with the intellij configuration of libraries which conflicts with Spring boot application. I manually replaced the required libraries from Maven repository and that worked out for me.
Per request from Elron..
Open the project folder in explorer and verify if the third party library versions in your project matches the ones you actually expect it to be. If something doesnt match, just replace the file with the one you expect it to be. In my case, since I use Maven, I didnt see a need for explicitly saving those libraries in a new lib folder under the project. So, I just deleted all of the files inside the lib folder and things started working again.
For fix this error, change the spring-data-jpa version to 1.5.0.RELEASE
I have faced this issue .
Get rid of spring-data-commons and change spring-data-jpa version to 1.9.0.RELEASE.
For more details , please follow this link :-
Spring Data Rest PagingAndSortingRepository AbstractMethodError (RepositoryFactorySupport)

Web services deployment in IBM Web sphere

Good Morning all,
I have problem while deploying my web app in IBM WAS.
I have spring ws and during the deployment, I get the below error,
Caused by: javax.xml.soap.SOAPException: Unable to create message factory for SOAP: Unable to create SAAJ meta-factorycom.ibm.ws.webservices.engine.soap.SAAJMetaFactoryImpl incompatible with javax.xml.soap.SAAJMetaFactory
at javax.xml.soap.MessageFactory.newInstance(Unknown Source)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.afterPropertiesSet(SaajSoapMessageFactory.java:145)
I have packaged the saaj-api 1.3 and saaj impl 1.3 jars in my application and i can see them in the lib folder.
I have set the class loading properties in the WAS to parent last.
Any clue or Where am I going wrong?
I'm using WAS version 7.0.0.11
I added this entry to the MANIFEST file to solve this issue,
DisableIBMJAXWSEngine: true
Hope this helps some one.

Trying to get a Camel sample using CXF working on WebSphere Application Server

I am trying to get an apache camel app using CXF working on WebSphere.
Noticed a number of errors
Caused by: java.lang.IncompatibleClassChangeError: org.apache.neethi.AssertionBuilderFactory
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:262)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69)
This occurs because the org.apache.neethi classes are loaded from the WAS run-time instead of the neeti3.0.2.jar from WEB-INF/lib
here is the info from class loader:
class load: org.apache.neethi.builders.AssertionBuilder from: file:/D:/Tools/WebSphere/AppServer/plugins/org.apache.axis2.jar
The Web Application config has been changed to use the class loader policy. It is set to Parent Last. Yet this class seems to be using the Parent First Policy.
Is there anything in the CXF package that over-rides this policy?
I noticed that using Axis2 and WAS
http://axis.apache.org/axis2/java/core/docs/app_server.html
Avoiding conflicts with WebSphere's JAX-WS runtime has some additional steps mentioned for Axis2. Is there something similar that is required to get this to work?
Thanks
Manglu
Not specific to Camel, but we are dealing with a similar issue.
1) You can use an isolated shared library if you want. This seems to fix the classloader from pulling in these other libraries via OSGi. This solution isn't for everyone.
2) When setting an app that PARENT_LAST, make sure you're doing it in the correct place. If you have jars inside your wars, then you'll have to set PARENT_LAST on the WAR modules, not the application. In the WAS console> Applications > Application Type > websphere enterprise applications> MyEAR > manage Modules > MyWar > Change the "Class loader order" and make it "parent last"
3) After you make your changes, you can export the ear file. In the ear, there is a file META-INF/ibmconfig/cells/defaultCell/applications/defaultApp/deployments/defaultApp/deployment.xml that has this config. For maven ear's, you can put this into src/main/application for it to be packaged up with the ear.
Hope that this helps. Good luck.
We are discussing a similar topic at the Camel mailing lists. I suggest to take a look there: http://camel.465427.n5.nabble.com/camel-cxf-in-WebSphere-without-geronimo-jetty-depdendencies-possible-tp5726490.html

smartgwt + gwt-rpc or REST + spring

Hi
I am currently working on a project and basing my design proposal on a SOA architecture and am including GWT components for UI . I am new to GWT and after reading through a week of posts of GWT and SmartGWT and trying out samples i would like to introduce SmartGWT into my organization w/o the server-side integration. That is because we already have spring services and would like them to remain re-usable through the organization. So my main interest is in the ui components of Smart GWT and in some fashion (either gwt-rpc or REST ) connect to the backend exposed services.
I am developing on SmartGWT 2.4 and gwt2.2+ . I have gone through the posts on GWT-rpc and tried using the sample api presented. However i ran into a couple issues .
Running the ListGridSample 'as is' i get the following ERROR although the application runs.
Am using the sample from here
23:31:37.101 [ERROR] [listgridtest] 23:31:37.088:RDQ5:WARN:ResultSet:isc_ResultSet_0 (created by: isc_OID_1):get: invalid index -1
com.smartgwt.client.core.JsObject$SGWT_WARN: 23:31:37.088:RDQ5:WARN:ResultSet:isc_ResultSet_0 (created by: isc_OID_1):get: invalid index -1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
at java.lang.Thread.run(Thread.java:619)
I next wanted to remove all the redundant jars present in the example project and update the smartgwt jars and gwt-servlet jar to see if it is still compatible. I received this
23:37:06.584 [ERROR] [listgridtest] Unable to load module entry point class mytest.client.YourEntryPoint (see associated exception for details)
com.google.gwt.core.client.JavaScriptException: (TypeError): Object [object Object] has no method 'getNextGlobalIDForClass'
stack: TypeError: Object [object Object] has no method 'getNextGlobalIDForClass'
at unknown source
at __gwt_jsInvoke (ttp://127.0.0.1:8888/listgridtest/hosted.html?listgridtest:76:35)
at ttp://127.0.0.1:8888/listgridtest/hosted.html?listgridtest:280:16
at z (ttp://127.0.0.1:8888/listgridtest/listgridtest.nocache.js:2:144)
at ttp://127.0.0.1:8888/listgridtest/listgridtest.nocache.js:8:589
arguments: getNextGlobalIDForClass,[object Object]
type: undefined_method
__gwt_ObjectId: 2
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:237)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:129)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.smartgwt.client.util.SC.generateID(SC.java)
at com.smartgwt.client.widgets.BaseWidget.<init>(BaseWidget.java:102)
at com.smartgwt.client.widgets.Canvas.<init>(Canvas.java:75)
at mytest.client.YourEntryPoint.onModuleLoad(YourEntryPoint.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396)
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:183)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:510)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352)
at java.lang.Thread.run(Thread.java:619)
I read somewhere on the smartclient forums not to mix the smartgwtee and smartgwt jars so i double checked (because i was evaluating the ee edition b4this but that required a learning in the datasource concept ). So i am using gwt2.2+ and smart-gwt2.4.
I have read through the quick start pdf (quickly) and decided that although the server side integration may have benefits for a quick introduction within my organization it would not work.
So from an system standpoint if i understand correctly you could define your datasource for your partricular widgets and then use the GenericGwtService to pass on to your business services before or after you send back the DSresponse.
Can you kindly point me to a quick sample which actually does this in the latest version or a document which specifies exactly how to do it ? or an api or a forum post which addresses this for the latest versions.
Hopefully that would help me springify the sample miniapp.. which would help me POC.
Any input appreciated.
Thanks,
Answered something similar here - Smartgwt DataSource with gwt requestfactory etc
You can also look at JSON datasources
http://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/data/XJSONDataSource.html

Resources