Hi,
I tried to switch my application over to myBatis from iBatis 2.3.4.726
by just changing the maven dependency and I get the exception below
when I run my test suite. I am a newbie to iBatis in general and was
hoping someone could help me out. Am I doing something wrong? What
other information do you need?
Thanks in advance,
Marc
findPersonByLastName(com.constantcontact.persistence.dao.ContactDaoTest)
Time elapsed: 0.546 sec <<< ERROR!
java.lang.NoClassDefFoundError: com/ibatis/common/xml/NodeletException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getDeclaredConstructors(Class.java:1836)
at
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:
228)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:
920)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:
893)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
485)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
456)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:291)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
288)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
190)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:
557)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:
895)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
425)
at
org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:
84)
at
org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:
1)
at
org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:
280)
at
org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:
304)
at
org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:
109)
at
org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:
75)
at
org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:
333)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:
220)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner
$1.runReflectiveCall(SpringJUnit4ClassRunner.java:301)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:
15)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:
303)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:
240)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:
61)
at
org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:
70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:
180)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:
62)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:
140)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:
127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
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
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:
345)
at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:
1009)
Caused by: java.lang.ClassNotFoundException:
com.ibatis.common.xml.NodeletException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 47 more
Here is my sql-map-config:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//
ibatis.apache.org//DTD SQL Map
Config 2.0//EN"
"
http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings enhancementEnabled="true"
maxTransactions="20"
maxRequests="32"
maxSessions="10"
useStatementNamespaces="true" />
<!-- Identify all SQL Map XML files to be loaded by this SQL map.
Relative to classpath -->
<sqlMap resource="sqlmaps/ContactSQL.xml"/>
</sqlMapConfig>
Here is my SQLMAP:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"
http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="com.constantcontact.persistence.model.Contact">
<typeAlias alias="contact"
type="com.constantcontact.persistence.model.Contact"/>
<parameterMap id="addParam" class="contact">
<parameter property="id" jdbcType="int"
javaType="java.lang.Long"/>
<parameter property="firstName" jdbcType="VARCHAR"
javaType="java.lang.String"/>
<parameter property="lastName" jdbcType="VARCHAR"
javaType="java.lang.String"/>
</parameterMap>
<parameterMap id="updateParam" class="contact">
<parameter property="id" jdbcType="INTEGER"
javaType="java.lang.Long"/>
<parameter property="firstName" jdbcType="VARCHAR"
javaType="java.lang.String"/>
<parameter property="lastName" jdbcType="VARCHAR"
javaType="java.lang.String"/>
</parameterMap>
<resultMap id="contactResult" class="contact">
<result property="id" column="contactid"/>
<result property="firstName" column="first_name"/>
<result property="lastName" column="last_name"/>
</resultMap>
<select id="findAll" resultMap="contactResult">
<![CDATA[
select * from contact
]]>
</select>
<select id="retrieve" resultMap="contactResult">
<![CDATA[
select * from contact where contactid = #value#
]]>
</select>
<insert id="create"
parameterClass="com.constantcontact.persistence.model.Contact" >
<selectKey resultClass="java.lang.Long" keyProperty="id">
SELECT nextval('contact_id_seq') AS id
</selectKey>
<![CDATA[
insert into contact (contactid,first_name,last_name)
values (#id#,#firstName#,#lastName# )
]]>
</insert>
<update id="update" parameterMap="updateParam">
<![CDATA[
update contact set first_name = ?, last_name = ? where
contactid = ?
]]>
</update>
<delete id="delete">
<![CDATA[
delete from contact where contactid = #value#
]]>
</delete>
<select id="findByLastName" resultMap="contactResult">
select * from contact where last_name = #value#
</select>
</sqlMap>