[ 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.