Details
-
New Feature
-
Status: Open
-
Major
-
Resolution: Unresolved
-
3.0 Beta 10
-
None
-
None
-
Windows XP, JDK 1.5
Description
I am getting an exception when I try to call SqlSessionFactoryBuilder.build. The exception is:
Exception in thread "main" org.apache.ibatis.exceptions.IbatisException:
-
-
- Error building SqlSession.
- The error may exist in my/test/DbMapper.xml
- The error occurred while processing mapper_resultMap[TestResult]
- Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for my.test.DbMapper.TestResult
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:32)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:23)
at amdocs.pv.configurationtool.client.PvConfigurationPlugin.login(PvConfigurationPlugin.java:376)
at amdocs.pv.configurationtool.client.PvConfigurationPlugin.main(PvConfigurationPlugin.java:353)
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for my.test.DbMapper.TestResult
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:71)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:55)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:29)
... 3 more
Caused by: java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for my.test.DbMapper.TestResult
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:59)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:39)
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.loadXmlResource(MapperAnnotationBuilder.java:71)
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:49)
at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:43)
at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:354)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.bindMapperForNamespace(XMLMapperBuilder.java:234)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:40)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:247)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:69)
... 5 more
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for my.test.DbMapper.TestResult
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:395)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:370)
at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:294)
at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:128)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:148)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:118)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:113)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:55)
... 14 more
-
The configuration files I have are:
config2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.orgg//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="Label" type="java.awt.Label" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@${server}:${port}:${instance}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="my/test/DBMapper.xml"/>
</mappers>
</configuration>
DBMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="my.test.DbMapper">
<resultMap id="TestResult" type="Label">
<result property="text" column="test"/>
</resultMap>
<select id="selectTest" resultMap="TestResult">
select * from test
</select>
</mapper>
I found out that the problem reproduces only when I have the following interface defined:
package my.test;
public interface DbMapper {
public java.awt.Label selectTest();
}
Somehow, it parses the xml again and it gives the exception.