一 现象:

今天在写IBatis项目是总是提示我有如下异常:

com.ibatis.common.xml.NodeletException

java.util.NoSuchElementException

  1. Exception in thread "main" java.lang.RuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
  2. at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:89)
  3. at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
  4. at org.lyk.main.Hello.main(Hello.java:25)
  5. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
  6. at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
  7. at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86)
  8. ... 2 more
  9. Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
  10. at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
  11. at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
  12. at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
  13. at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
  14. at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
  15. ... 3 more
  16. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
  17. at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
  18. at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser.parse(SqlMapParser.java:51)
  19. at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$11.process(SqlMapConfigParser.java:410)
  20. at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
  21. ... 7 more
  22. Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
  23. at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
  24. at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
  25. at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
  26. at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
  27. at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
  28. ... 10 more
  29. Caused by: java.util.NoSuchElementException
  30. at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
  31. at com.ibatis.sqlmap.engine.mapping.parameter.InlineParameterMapParser.parseInlineParameterMap(InlineParameterMapParser.java:55)
  32. at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.parseDynamicTags(SqlStatementParser.java:240)
  33. at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.processSqlStatement(SqlStatementParser.java:204)
  34. at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.parseGeneralStatement(SqlStatementParser.java:120)
  35. at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser$19.process(SqlMapParser.java:563)
  36. at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
  37. ... 14 more

二 原因

该问题是由于我的mapping文件语法错误导致的:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE sqlMap
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
  4. "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  5. <sqlMap namespace="NewsNS">
  6. <typeAlias alias="News" type="org.lyk.vo.News" />
  7. <insert id="doCreate" parameterClass="News">
  8. INSERT INTO news(title,pub_date,content) VALUES
  9. (#title,#pubdate,#content)
  10. <selectKey resultClass="Integer" keyProperty="nid">
  11. SELECT LAST_INSERT_ID()
  12. </selectKey>
  13. </insert>
  14. </sqlMap>

注意mapping文件的红色部分,语法是错误的,正确的语法是在title、pubdate、content的前面和后面都要用井号包裹:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE sqlMap
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
  4. "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  5. <sqlMap namespace="NewsNS">
  6. <typeAlias alias="News" type="org.lyk.vo.News" />
  7. <insert id="doCreate" parameterClass="News">
  8. INSERT INTO news(title,pub_date,content) VALUES
  9. (#title#,#pubdate#,#content#)
  10. <selectKey resultClass="Integer" keyProperty="nid">
  11. SELECT LAST_INSERT_ID()
  12. </selectKey>
  13. </insert>
  14. </sqlMap>

三 解决方案

修改mapping文件,将变量前面和后面都用井号(#)包围。

IBatis项目中com.ibatis.common.xml.NodeletException的解决方案的更多相关文章

  1. maven项目中如何创建web.xml

    在web工程创建时创建web.xml:用Eclipse新建一个web项目没有自动生成web.xml 在创建maven工程时,大多没有创建web.xml文件,web.xml路径:src/main/web ...

  2. javaweb项目中关于配置文件web.xml的解析

    一..启动tomcat,加载项目中的web.xml文件,创建servercontext上下文对象. 可以通过servercontext对象在应用中获取web.xml文件中的值. web应用加载的顺序与 ...

  3. zookeeper中controller项目中资源配置文件applicationContext.xml配置文件编写

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  4. IDEA创建的Maven项目中 解决编写pom.xml没有提示

    问题如下 没有提示信息 解决方案 把Repositories中的配置更新成本地仓库 问题解决

  5. ssm项目中使用拦截器加上不生效解决方案

    在很多时候,需要拦截器来帮助我们完成一些特定的工作,比如获取请求的参数,本身在request这种获取数据就是一次磁盘的io, 如果在filter中获取了参数,那么在controller中就不能获取相关 ...

  6. IOS APP 国际化 程序内切换语言实现 不重新启动系统(支持项目中stroyboard 、xib 混用。完美解决方案)

    上篇 IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源 介绍了纯代码刷新 实现程序内切换语言. 但效率底下,也存在一些问题.暂放弃. ...

  7. iOS项目中获取验证码倒计时及闪烁问题解决方案

    -(void)startTime{ __block int timeout= 59; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queu ...

  8. 关于maven项目中修改的JS不生效的解决方案

    1. 问题描述 昨天下午博主在开发学习的过程中,碰到一个修改了JS无法生效的问题,折腾我不少的时间,现将百度到的解决方案总结一下,以便下次碰到类似问题能够最快的找到解决方案 2 解决方案 2.1 方案 ...

  9. 在Maven项目中,指定使用阿里云仓库下载jar包

    Maven项目中,在pom.xml的</project>标签之前加入一下标签,指定使用阿里云仓库下载jar包. <!-- 使用aliyun maven --> <repo ...

随机推荐

  1. 一个Form表单多个Submit提交按钮!实现提交不同的参数!

    给 submit 的按钮加onclick 方法来自定义预处理参数,比如<script type="text/javascript">function submitFun ...

  2. EF 多对多循环引用序列化失败 解决办法

    错误:Self referencing loop detected with type 'System.Data.Entity.DynamicProxies.tbldph_901D48A194FB31 ...

  3. 80端口被系统进程PID-4占用解决办法

    今天因为工程需要就把tomcat服务器的端口改成了80了,可是一启动就出现问题了 发现报错信息是端口占用了,于是我马上就在了命令行敲入了netstat -ano查看端口占用情况 终于发现是PID为4的 ...

  4. 编写 ES6 的 7 个实用技巧

    无脑翻译走一波~ Hack #1 - 变量交换 使用数组解构交换变量的值 let a = 'world', b = 'hello' [a, b] = [b, a] console.log(a) // ...

  5. Python小白学习之路(九)—【字符串格式化】【百分号方式】【format方式】

    写在前面: 最近的事情好像有很多.李咏的离去,让我觉得很突然,仿佛印象中就是主持节目的他,看着他和哈文的爱情,很是感动.离去,没有什么抱怨,只是遗憾. 总会感慨,时光的流逝. 好像真的很快,转眼间,我 ...

  6. 初次学习Vue,输出Hello Vue!

    Vue.js作为目前比较流行的js框架,而我却迟迟没有接触,深感不安! 使用vue之前先要下载vue.js文件,然后在html里面导入vue.js文件,下面试着输出"Hello Vue!&q ...

  7. #阿里云#云服务器部署Django(基础篇)

    前言 本人能力有限,本文只是简单介绍基础部署流程,没有过多考虑系统安全等因素,请谅解.初学者参考了解,大神勿喷. 纯测试部署,采用阿里云ECS,系统Ubuntu 16.04 64位,部署采用nginx ...

  8. 添加新内容的四个 jQuery 方法:append,prepend,after,before

    添加新内容的四个 jQuery 方法区别如下: append() - 在被选元素(里面)的结尾插入内容prepend() - 在被选元素(里面)的开头插入内容 //jQuery append() 方法 ...

  9. chrome断点调试&&其他技巧

    chrome断点调试 1. 在编写JavaScript代码时,如果 出现了bug,就要不断的去找错误,如果console控制台中提示还好说,可是没有提示恐怕就要费一番周折了.但是有了chrome这个浏 ...

  10. Django中涉及金融的项目

    在Django中,如果一个项目涉及了金融,他的要求是十分严格的. 所以嘞,这里就有一些坑,很多坑,第一次开发的时候很容易出现一系列的错误 在涉及金融计算的地方,不能使用float类型 什么鬼,但事实就 ...