ibatis sqlmap文件中文注释注意事项

ibatis SQLMap 注释问题
本文介绍了一个在ibatis SQLMap配置文件中使用中文注释导致的应用启动失败问题。在JDK 6环境下,由于注释格式不当,引发了解析错误。文章强调了正确的注释格式,并给出了具体的示例。

ibatis sqlmap文件中文注释注意事项

今天,在jdk6下,启动以前发布在tomcat6下的一个应用,居然报错,错误信息如下所示。大概意思就是sqlmap配置文件,注释格式不对。但是这个应用在jdk1.5tomcat6下是在正常运行的,所以非常困惑。

严重: 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 [conf/data-source.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 string "--" is not permitted within comments.

Caused by: java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: The string "--" is not permitted within comments.

at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:89)

at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)

at org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSet(SqlMapClientFactoryBean.java:255)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1057)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1024)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:421)

at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:140)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:270)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:346)

at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156)

at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)

at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)

at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)

...

java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

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 string "--" is not permitted within comments.

at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)

at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86)

... 39 more

Caused by: org.xml.sax.SAXParseException: The string "--" is not permitted within comments.

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)

at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)

at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanComment(XMLScanner.java:774)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanComment(XMLDocumentFragmentScannerImpl.java:1034)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2938)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)

at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)

at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)

at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)

at com.ibatis.common.xml.NodeletParser.createDocument(NodeletParser.java:157)

at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:50)

google了下,发现层碰到此类的问题的网友还不在少数,网上比较一致的说法是因为sqlmap文件中有中文注释导致。例如,我们在sqlmap文件中,每新增一个selectupdate等节点时要求至少写两个注释:

1) 该节点是何时被修改的,被谁修改等信息;

2) 该节点的用途描述;

为此看来在sqlmap文件中写中文注释是在所难免的,这里要提醒大家的是在sqlmap文件中写中文注释时切记按如下格式下:

<!-- 此处添加该节点是何时被修改的,被谁修改信息 -->

请注意两侧红色区域与中间蓝色内容间的空格,注释标记<!-- -->与注释内容间必须留有空格,如下表所示,至于在jdk6下,为什么一定要如此,因为没看ibatis解析xml文件的代码,还说不上来。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >

<sqlMap namespace="application">

<!-- 此处添加该节点是何时被修改的,被谁修改信息 -->

<!-- 此处添加该节点功能描述(如:获取应用程序列表信息) -->

<select id="getApplications" parameterClass="Map"

resultClass="HashMap">

select * from applicationinfo where module = #module#

<isNotEmpty prepend="and" property="application">

application = #application#

</isNotEmpty>

<isNotEmpty prepend="and" property="isvalid">

isvalid = #isvalid#

</isNotEmpty>

</select>

<sqlMap/>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值