Hi, thanks for reply... the idea of validate against schema is very good. Where is the best place to do such validation? Could make sense that ibatis performs a validation internally before loading the xml config? Manu
On Mon, 17 Jan 2005 13:19:08 -0600, Kit Cragin <[EMAIL PROTECTED]> wrote: > 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 > >