Skip to content

Commit 67636c4

Browse files
committed
refs mybatis#721 The error message should include result map ID.
1 parent dfb0307 commit 67636c4

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

src/main/java/org/apache/ibatis/mapping/ResultMap.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ public ResultMap build() {
127127
if (!constructorArgNames.isEmpty()) {
128128
final List<String> actualArgNames = argNamesOfMatchingConstructor(constructorArgNames);
129129
if (actualArgNames == null) {
130-
throw new BuilderException("Failed to find a constructor in '"
130+
throw new BuilderException("Error in result map '" + resultMap.id
131+
+ "'. Failed to find a constructor in '"
131132
+ resultMap.getType().getName() + "' by arg names " + constructorArgNames
132133
+ ". There might be more info in debug log.");
133134
}
@@ -171,7 +172,8 @@ private boolean argTypesMatch(final List<String> constructorArgNames,
171172
Class<?> specifiedType = resultMap.constructorResultMappings.get(i).getJavaType();
172173
if (!actualType.equals(specifiedType)) {
173174
if (log.isDebugEnabled()) {
174-
log.debug("Found a constructor with arg names " + constructorArgNames
175+
log.debug("While building result map '" + resultMap.id
176+
+ "', found a constructor with arg names " + constructorArgNames
175177
+ ", but the type of '" + constructorArgNames.get(i)
176178
+ "' did not match. Specified: [" + specifiedType.getName() + "] Declared: ["
177179
+ actualType.getName() + "]");

src/test/java/org/apache/ibatis/submitted/named_constructor_args/InvalidNamedConstructorArgsTest.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,11 @@ interface NoMatchingConstructorMapper {
7272
@Test
7373
public void noMatchingConstructorArgName() {
7474
ex.expect(BuilderException.class);
75-
ex.expectMessage(startsWith("Failed to find a constructor in "
76-
+ "'org.apache.ibatis.submitted.named_constructor_args.User' by arg names [noSuchConstructorArg]."));
75+
ex.expectMessage(allOf(
76+
containsString(
77+
"'org.apache.ibatis.submitted.named_constructor_args.InvalidNamedConstructorArgsTest$NoMatchingConstructorMapper.select-void'"),
78+
containsString("'org.apache.ibatis.submitted.named_constructor_args.User'"),
79+
containsString("[noSuchConstructorArg]")));
7780

7881
Configuration configuration = sqlSessionFactory.getConfiguration();
7982
configuration.addMapper(NoMatchingConstructorMapper.class);
@@ -92,9 +95,11 @@ interface ConstructorWithWrongJavaType {
9295
@Test
9396
public void wrongJavaType() {
9497
ex.expect(BuilderException.class);
95-
ex.expectMessage(startsWith("Failed to find a constructor in "
96-
+ "'org.apache.ibatis.submitted.named_constructor_args.User' by arg names [id]."));
97-
98+
ex.expectMessage(allOf(
99+
containsString(
100+
"'org.apache.ibatis.submitted.named_constructor_args.InvalidNamedConstructorArgsTest$ConstructorWithWrongJavaType.select-void'"),
101+
containsString("'org.apache.ibatis.submitted.named_constructor_args.User'"),
102+
containsString("[id]")));
98103
Configuration configuration = sqlSessionFactory.getConfiguration();
99104
configuration.addMapper(ConstructorWithWrongJavaType.class);
100105
}
@@ -114,8 +119,11 @@ interface ConstructorMissingRequiresJavaType {
114119
@Test
115120
public void missingRequiredJavaType() {
116121
ex.expect(BuilderException.class);
117-
ex.expectMessage(startsWith("Failed to find a constructor in "
118-
+ "'org.apache.ibatis.submitted.named_constructor_args.User' by arg names [id]."));
122+
ex.expectMessage(allOf(
123+
containsString(
124+
"'org.apache.ibatis.submitted.named_constructor_args.InvalidNamedConstructorArgsTest$ConstructorMissingRequiresJavaType.select-void'"),
125+
containsString("'org.apache.ibatis.submitted.named_constructor_args.User'"),
126+
containsString("[id]")));
119127

120128
Configuration configuration = sqlSessionFactory.getConfiguration();
121129
configuration.addMapper(ConstructorMissingRequiresJavaType.class);

0 commit comments

Comments
 (0)