[
https://issues.apache.org/jira/browse/IBATIS-389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12493917
]
Claus Ibsen commented on IBATIS-389:
------------------------------------
Good error reporting is a must.
> Unbalanced # in SQL causes unclear/misleading error message
> -----------------------------------------------------------
>
> Key: IBATIS-389
> URL: https://issues.apache.org/jira/browse/IBATIS-389
> Project: iBatis for Java
> Issue Type: Bug
> Components: SQL Maps
> Affects Versions: 2.2.0
> Reporter: Jamison
>
> Below is the stack trace for in exception caused by an unbalanced # in an
> insert statement. The "Error parsing XPath 'blah'" message does not give
> nearly as much information as the parser has available at the time and does
> not even indicate the source of the problem. I have traced the issue back to
> the use of StringTokenizer in InlineParameterMapParser, if this class was
> changed slightly, to catch NoSuchElementException and rethrow SqlMapException
> with a message like "Failed to parse statement [xpath] with id [statement
> id], check inline parameters" or even "Failed to parse SQL in [statement id]"
> finding the problem would be almost effortless. All it needs is a big
> try-catch block around the whole method body.
> This code appears to be an failed effort to do this, StringTokenizer picks up
> the sntax error before this:
> if (!PARAMETER_TOKEN.equals(token)) {
> throw new SqlMapException("Unterminated inline parameter in mapped
> statement (" + "statement.getId()" + ").");
> }
> I just lost a good hour trying to find the source of one of these problems, I
> traced the iBatis code to figure out where a NoSuchElementEx _could_ be
> thrown to figure out what would be wrong after 20 minutes of reading my
> XML/SQL. Calling the bug major might seem a bit melodramatic, but I think it
> is important that this gets out in a maint. release soon.
> --
> Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing
> XML. Cause: com.ibatis.common.exception.NestedRuntimeException: Error
> parsing XPath '/sqlMapConfig/sqlMap'. Cause:
> com.ibatis.common.xml.NodeletException: Error parsing XML. Cause:
> com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath
> '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing
> XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause:
> com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath
> '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing
> XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing
> XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException:
> Error parsing XML. Cause:
> com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath
> '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing
> XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause:
> com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath
> '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
> Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing
> XPath '/sqlMap/insert'. Cause: java.util.NoSuchElementException
> Caused by: java.util.NoSuchElementException
>
> org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
>
> org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.