ibatis+spring+struts2整合的问题.求助

bue21 2011-07-02 11:57:32
小弟最近刚刚玩上了ibatis框架,
想做个ssi框架出来,但是在配置spring的时候发现报错了.
我找了很久也找不出是什么原因,所以想在这里请教一下各位老师们.

//启动报错
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'SqlMapClient' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The content of element type "sqlMapConfig" is incomplete, it must match "(properties?,settings?,resultObjectFactory?,typeAlias*,typeHandler*,transactionManager?,sqlMap+)+".
Caused by: java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The content of element type "sqlMapConfig" is incomplete, it must match "(properties?,settings?,resultObjectFactory?,typeAlias*,typeHandler*,transactionManager?,sqlMap+)+".
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:65)
at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:90)
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:326)
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSet(SqlMapClientFactoryBean.java:280)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1202)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:428)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:284)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:516)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The content of element type "sqlMapConfig" is incomplete, it must match "(properties?,settings?,resultObjectFactory?,typeAlias*,typeHandler*,transactionManager?,sqlMap+)+".
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:62)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:62)
... 39 more
Caused by: org.xml.sax.SAXParseException: The content of element type "sqlMapConfig" is incomplete, it must match "(properties?,settings?,resultObjectFactory?,typeAlias*,typeHandler*,transactionManager?,sqlMap+)+".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at com.ibatis.common.xml.NodeletParser.createDocument(NodeletParser.java:189)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:59)
... 40 more







///以下是spring的代码


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${uri}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>



<bean id="SqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>
classpath:SqlMapConfig.xml
</value>
</property>
<property name="dataSource" ref="dataSource"></property>
</bean>





//以下是sqlmapconfig.xml文件的内容


<sqlMapConfig>

<properties resource="SqlMap.properties"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${uri}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="{password}"/>

</dataSource>
</transactionManager>
<sqlMap resource="StudentSqlMap.xml"/>
</sqlMapConfig>






小弟就想知道, 这个错是出在哪了, 为什么会出现这个错误.是什么导致的.
如果各位大哥们 有了解的.请指教一下. 谢谢大家.
...全文
224 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bue21 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yexiongmybh 的回复:]
还有啊,你有一个datasource已经交给spring管理了,干嘛还要自己在Ibatis里面再给他一个数据库链接呢,一个就足够了啊。
[/Quote]


是的是的. 你说对了, 谢谢.. 非常感谢.
DavidChou 2011-07-04
  • 打赏
  • 举报
回复
xml文件里面节点错误,说的很清楚了,注意找到方法,跟是否初学无关,方法问题!
yy1230789 2011-07-04
  • 打赏
  • 举报
回复
ibatis学习ing
bue21 2011-07-04
  • 打赏
  • 举报
回复
还是感觉找不出错误.
<sqlMapConfig>
<settings
enhancementEnabled="true"
useStatementNamespaces="true"
/>
<properties resource="SqlMap.properties"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${uri}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="{password}"/>

</dataSource>
</transactionManager>

<sqlMap resource="StudentSqlMap.xml"/>
</sqlMapConfig>


SqlMapConfig 这样的配置对了吗.? 还是spring中出了错呢.?
请大哥们帮忙看看. 感激不尽
scundy 2011-07-04
  • 打赏
  • 举报
回复
4.配置web.xml文件
<!-- begin Spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 配置struts2相关信息 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

scundy 2011-07-04
  • 打赏
  • 举报
回复
3.将ibatis整合到spring中(applicationContext.xml)
<!-- 引入参数配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass">
<value>${jdbc.driverClass}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="initialPoolSize">
<value>${jdbc.initialPoolSize}</value>
</property>
<property name="minPoolSize">
<value>${jdbc.minPoolSize}</value>
</property>
<property name="maxPoolSize">
<value>${jdbc.maxPoolSize}</value>
</property>
</bean>

<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:sql-map-config.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

<bean id="dao" class="dao.ibatis.impl.DaoImpl">
<property name="sqlMapClient">
<bean class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:sql-map-config.xml</value>
</property>
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
</property>
</bean>

<!-- userdao配置 -->
<bean id="userDao" class="dao.ibatis.impl.UserDAO">
<property name="sqlMapClient">
<ref bean="sqlMapClient" />
</property>
<property name="roleDao">
<ref local="roleDao"/>
</property>
</bean>
上面配置数据库连接可以在spring中配置也可以在ibatis的配置文件中配置。
scundy 2011-07-04
  • 打赏
  • 举报
回复
把我所写的相关代码贴出来,希望对你有所帮助。
1.sqlMapConfig文件配置:
<settings useStatementNamespaces="false" enhancementEnabled="true" cacheModelsEnabled="true" lazyLoadingEnabled="true" />

<!-- sqlserver -->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="JDBC.ConnectionURL" value="jdbc:sqlserver://10.10.15.7:1433;databaseName=LS_FMCG_DEMO_02" />
<property name="JDBC.Username" value="fmcgdemo2_user" />
<property name="JDBC.Password" value="fmcgdemo2_user" />
</dataSource>
</transactionManager>

<!-- mysql -->
<!--
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="com.mysql.jdbc.Driver" name="JDBC.Driver"/>
<property value="jdbc:mysql://localhost:3306/LS_FMCG_DEMO_02?SelectMode=cursor&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=gbk" name="JDBC.ConnectionURL"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="root"/>
</dataSource>
</transactionManager>
-->

<!-- 引用实际的SQL操作文件 -->
<sqlMap resource="vo/users.xml"/>

2.SQL操作文件
<sqlMap namespace ="Users">
<insert id="insertUser" parameterClass="users">
insert into sys_user(userID,userAccount,userName,userPassword,companyAccount,userDesc,userType,isDisable,isActive,isSYS)values(#userID#,#userAccount#,#userName#,#userPassword#,#companyAccount#,#userDesc#,#userType#,#isDisable#,#isActive#,#isSYS#)
</insert>

<delete id="deleteUser" parameterClass="users">
update sys_user set isDisable=#isDisable#,isActive=#isActive# where userID=#userID#
</delete>

<update id="updateUser" parameterClass="users">
update sys_user set userAccount=#userAccount#,userName=#userName#,userPassword=#userPassword#,companyAccount=#companyAccount#,userDesc=#userDesc#,userType=#userType#,isDisable=#isDisable#,isActive=#isActive#,isSYS=#isSYS# where userID=#userID#
</update>
</sqlMap>
yexiongMYBH 2011-07-04
  • 打赏
  • 举报
回复
还有啊,你有一个datasource已经交给spring管理了,干嘛还要自己在Ibatis里面再给他一个数据库链接呢,一个就足够了啊。
wmzcs 2011-07-04
  • 打赏
  • 举报
回复
我发现
<sqlMapConfig>
<properties resource="SqlMap.properties"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${uri}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="{password}"/>

</dataSource>
</transactionManager>
<sqlMap resource="StudentSqlMap.xml"/>
</sqlMapConfig>
里的这个
<property name="JDBC.Password" value="{password}"/>
少了一个$


蒙奇D路飞 2011-07-04
  • 打赏
  • 举报
回复
节点错误撒
xz5211314_0 2011-07-04
  • 打赏
  • 举报
回复
ibatis代替hibernate
Ade子夜 2011-07-04
  • 打赏
  • 举报
回复
ibatis 学习一下 还没有用过呢
老松鼠 2011-07-03
  • 打赏
  • 举报
回复
ibatis 学习一下 还没看过呢
yingzhuo2011 2011-07-03
  • 打赏
  • 举报
回复
sqlMapConfig 文件写错了阿。 好好检查以下。 是不是有丢了什么闭 </...> 标签之类的错误了。
romanitc 2011-07-02
  • 打赏
  • 举报
回复
小弟也没玩过ibatis,友情帮顶!增加人气!
swoky 2011-07-02
  • 打赏
  • 举报
回复
com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The content of element type "sqlMapConfig" is incomplete, it must match "(properties?,settings?,resultObjectFactory?,typeAlias*,typeHandler*,transactionManager?,sqlMap+)+".

这个己经说得够清楚了,是否跟初学ibatis无关

大意上说你的sqlmapconfig.xml有问题
必须符合如下规则:
BTW,如果不知道什么叫正则的话,最好去了解下,看看?*+都表示什么
跟着?的结点为:有一个或者没有
* 表示:零个或者多个
+ 一个或者多个
(
properties?,
settings?,
resultObjectFactory?,
typeAlias*,
typeHandler*,
transactionManager?,
sqlMap+
)+

自己对照着找一下,看看你的配置是否符合规则


bue21 2011-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 romantic_pk 的回复:]
小弟也没玩过ibatis,友情帮顶!增加人气!
[/Quote]

呵呵,我们共同学习,共同进步吧.

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧