I agree that exception handling/error verbosity could be improved. But don't get me wrong though -- iBATIS.NET has a very solid 1.0 showing.
Your idea of passing the original exception (instead of just its message) to the wrapping ConfigurationException would help a lot. I wouldn't throw NullReferenceExceptions explicitly though - that's intended to be thrown by the .NET runtime. Instead, throw a ConfigurationException() with the message. Technically it's not a null reference until you attempt to use it. Even better: make use of the provided iBATIS schemas by invoking schema validation before configuration. The built-in schema validation will give you the best context for errors in the XML config files and could greatly simplify the configuration logic. - Kit -----Original Message----- From: Emmanuele De Andreis [mailto:[EMAIL PROTECTED] Sent: Monday, January 17, 2005 12:56 PM To: ibatis-user-cs@incubator.apache.org Subject: A debug day with ibatis and netpetshop dao pattern Hi all ibatis developers and lovers. I'm spending some time to learn the pattern proposed with netpetshop + ibatis mapper for developing a simple application of mine as I think the best way to learn something is to try in real life applications. This is my experience on debugging mapping files. As a newbie I do some errors in configuration and I found that is really difficult to debug as the framework is not so explicit and talkative about the errors. I have proposed a couple of fixes that can be discussed. I'm using build 321 First problem: The cause was simply "Object null reference"... not so explicit. Line 75: catch(Exception e) Line 76: { Line 77: throw new ConfigurationException(string.Format("DaoManager could not configure SqlMapDaoSessionHandler.Cause: {0}", e.Message)); Line 78: } Line 79: } Source File: C:\Dev\iBatis\iBatisNet-1.0.1.321\source\IBatisNet.DataAccess\DaoSessionHand lers\SqlMapDaoSessionHandler.cs Line: 77 Proposed fix: catch(Exception e) { throw new ConfigurationException(string.Format("DaoManager could not configure SqlMapDaoSessionHandler.Cause: {0}", e.Message), e); } Now I can jump to the line that raises the exception: Line 448: XmlDocument config = Resources.GetAsXmlDocument(sqlMapNode); Line 449: Line 450: sqlMapName = config.SelectSingleNode("sqlMap").Attributes["namespace"].Value; Line 451: Line 452: #region Load TypeAlias Source File: C:\Dev\iBatis\iBatisNet-1.0.1.321\source\IBatisNet.DataMapper\Configuration\ DomSqlMapBuilder.cs Line: 450 I changed this way: XmlDocument config = Resources.GetAsXmlDocument(sqlMapNode); if (config.SelectSingleNode("sqlMap") == null) throw new NullReferenceException("Missing 'sqlMap' tag"); if (config.SelectSingleNode("sqlMap").Attributes["namespace"] == null) throw new NullReferenceException("Missing 'namespace' attribute on 'sqlMap' tag"); sqlMapName = config.SelectSingleNode("sqlMap").Attributes["namespace"].Value; so I fixed my map (namespace was missing). then I found an error on my dao configuration ad I fixed. Unfortunately seems that after a dao change I need to rebuild or restert application to make it recognize the changed file. Same for maps: the only way to reload is restart or rebuild (build is not enough) the app. Exception Details: System.InvalidCastException: Specified cast is not valid. Source Error: Line 49: else Line 50: { Line 51: return dataReader.GetString(index); Line 52: } Line 53: } Source File: C:\Dev\iBatis\iBatisNet-1.0.1.321\source\IBatisNet.DataMapper\TypesHandler\S tringTypeHandler.cs Line: 51 Changed: try { if (dataReader.IsDBNull(index) == true) { return System.DBNull.Value; } else { return dataReader.GetString(index); } } catch(InvalidCastException icex) { throw new InvalidCastException(string.Format("Invalid cast converting column '{0}'", mapping.ColumnName), icex); } so I was informed that I have missed a field on the output mapping. I then fixed that and my application now runs. now the debug is alittle more easy :) any comment? Manu