IBatis项目中com.ibatis.common.xml.NodeletException的解决方案

一 现象:

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

com.ibatis.common.xml.NodeletException

java.util.NoSuchElementException

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
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:89)
    at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
    at org.lyk.main.Hello.main(Hello.java:25)
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
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86)
    ... 2 more
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
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
    ... 3 more
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath ‘/sqlMap/insert‘.  Cause: java.util.NoSuchElementException
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser.parse(SqlMapParser.java:51)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$11.process(SqlMapConfigParser.java:410)
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
    ... 7 more
Caused by: java.lang.RuntimeException: Error parsing XPath ‘/sqlMap/insert‘.  Cause: java.util.NoSuchElementException
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
    at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
    at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
    ... 10 more
Caused by: java.util.NoSuchElementException
    at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
    at com.ibatis.sqlmap.engine.mapping.parameter.InlineParameterMapParser.parseInlineParameterMap(InlineParameterMapParser.java:55)
    at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.parseDynamicTags(SqlStatementParser.java:240)
    at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.processSqlStatement(SqlStatementParser.java:204)
    at com.ibatis.sqlmap.engine.builder.xml.SqlStatementParser.parseGeneralStatement(SqlStatementParser.java:120)
    at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser$19.process(SqlMapParser.java:563)
    at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
    ... 14 more

二 原因

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

<?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="NewsNS">
    <typeAlias alias="News" type="org.lyk.vo.News" />
    <insert id="doCreate" parameterClass="News">
        INSERT INTO news(title,pub_date,content) VALUES
        (#title,#pubdate,#content)
        <selectKey resultClass="Integer" keyProperty="nid">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
</sqlMap>

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

<?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="NewsNS">
    <typeAlias alias="News" type="org.lyk.vo.News" />
    <insert id="doCreate" parameterClass="News">
        INSERT INTO news(title,pub_date,content) VALUES
        (#title#,#pubdate#,#content#)
        <selectKey resultClass="Integer" keyProperty="nid">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
</sqlMap>

三 解决方案

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

时间: 2024-12-22 23:45:46

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

项目中get/post请求中文乱码的解决方案

一.解决get请求中文乱码的方案: 方案(推荐)1: 一般情况下tomcat(8之前)服务器的编码默认是ISO8859-1,所以要对get请求提交的参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8"); 方案(不推荐)2: 既然知道了tomcat服务器的编码默认是ISO8859-1,那么可以修改to

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

大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来.. -(void)startTime{ __block int timeout= 59; //倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE

关于springboot项目中往本地仓库打包错误的解决方案

需要在有main类所在pom.xml 中添加如下配置即可: 原文地址:https://blog.51cto.com/751756016/2391709

SpringMVC将一个项目集成在另一个项目中

将KissfloveUtil项目集成在自己项目中.在pom.xml中加入以下配置: <dependencies> <dependency> <groupId>com.kissflove</groupId> <artifactId>kissfloveUtil</artifactId> <version>0.0.1</version> </dependency> </dependencies>

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

Maven项目中,在pom.xml的</project>标签之前加入一下标签,指定使用阿里云仓库下载jar包. <!-- 使用aliyun maven --> <repositories> <repository> <id>aliyun</id> <name>aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public&

ibatis 开发中的经验 (三)ibatis与spring2集成配置

ibatis项目中用到了一些基本配置,需要和spring集成,看了看这些配置大部分同hibernate中是一样的,也比较好理解,只是需要他们的配置中每个类的含义,还有其中的一些细节还是需要我们了解的,知识不在多,而在不断吸收和重复,在使用和练习中加深对各种问题的理解. 读取属性文件配置 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceho

ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解

这个项目的底层是用ibatis框架完毕,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后基本的配置都已经配置好了,比方一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉ibatis xml文件都提供的一些标签,这些标签大部分是用来处理推断.逻辑,使得sql能够动态组装变的更灵活. 在写代码的工作量上ibatis要比hibernate高一些,在你写了服务层后还须要些dao层,dao层实现,然后这些在hibernate中不须要自己写,仅仅写到服务层就能够调用hiber

javaWeb项目中web.xml的xsd( XML Schemas Definition)文件

<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://java.sun.com/xml/ns/javaee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xml

Android项目中的config.xml文件 “config.xml”

Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encoding="utf-8"?> <!-- /* ** Copyright 2009, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "Lice