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

Reply via email to