The parameter class reflection does not work anymore
----------------------------------------------------

                 Key: IBATISNET-168
                 URL: http://issues.apache.org/jira/browse/IBATISNET-168
             Project: iBatis for .NET
          Issue Type: Bug
          Components: DataMapper
    Affects Versions: DataMapper 1.5
         Environment: Windows 2003 server, dot net framework 2.0, VS2005
            Reporter: cristian manea
            Priority: Blocker


Hello.

We have upgraded our project from dnf 1.1 to dnf 2.0 vs2005, so we have 
upgraded to Data Mapper 1.5 (from 1.3).

It seams that the dynamic class reflection for the query parameters does not 
work anymore in 1.5, in the 1.3 version it work just fine. It is really a 
blocking situation for us, because...it simply does not work anymore :(

We are using a solution where the parameter that we are passing is a "generic" 
one, and has this definition: 

        public class Query
        {               
                private Object _DataObject;
                public Object    DataObject{get{return _DataObject; }set { 
_DataObject = value;}}
                private Object _ParametersObject;
                public object     ParametersObject{get { return 
_ParametersObject; }set { _ParametersObject = value; }}
        }

Then we are passing to iBatis (by internal convention) the "parameters" embeded 
in the Query class, here is an example:
 
                        obj_Query.ParametersObject = Parameters; //here we are 
setting our Parameters object
                        obj_Query.DataObject = Labels[0];  //here we are 
setting our Business Object
                        objLabel = (Label) Helpers.Label().Read(obj_Query); 
//here we are calling by passing the query object
                        Assert.IsNotNull (objLabel, "Label not returned");
.............................................................................................
                public override System.Object Read(System.Object obj)
                {
                        Labels objLabel =  (Label) Mapper 
().QueryForObject("SelectLabel",obj);
                        return(objLabel);
                }


The mapped statemend in the sqlmap file is as follows:

                <select id="SelectLabel"  parameterClass="Query" 
resultMap="LabelResult">
                        select *
                        from ll_label_language
                        <dynamic prepend="WHERE">
                                <isParameterPresent>
                                        <isNotNull property="DataObject">
                                                <isGreaterThan 
property="DataObject.Id" compareValue="0" prepend="AND">
                                                        label_language_id = 
#DataObject.Id#     
                                                </isGreaterThan>
                                                <isGreaterThan 
property="DataObject.LabelId" compareValue="0" prepend="AND">
                                                        label_id = 
#DataObject.LabelId# 
                                                </isGreaterThan>                
                        
                                        </isNotNull>
                                        <isNotNull  property="ParametersObject" 
prepend="AND">
                                                        language_id = 
#ParametersObject.LanguageId#
                                        </isNotNull>
                                </isParameterPresent>
                        </dynamic>
                </select>

iBatis 1.5 returns this error (it does not understand that the DataObject is in 
fact a Label, and not an Object):

failed: IBatisNet.Common.Exceptions.ConfigurationException : 
- The error occurred while loading SqlMap.
- parse dynamic tags on sql statement
- The error occurred in <sqlMap resource="${root}Resources/LabelHelper.xml" 
xmlns="http://ibatis.apache.org/dataMapper"; />.  
- Check the SelectLabel.
  ----> IBatisNet.Common.Exceptions.ProbeException : There is no Get member 
named 'Id' in class 'Object'
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Build(XmlDocument document, 
DataSource dataSource, Boolean useConfigFileWatcher, Boolean isCallFromDao)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ConfigureAndWatch(String 
resource, ConfigureHandler configureDelegate)
        at IBatisNet.DataMapper.Mapper.InitMapper()
        at IBatisNet.DataMapper.Mapper.Instance()
        C:\Documents and 
Settings\Administrator\Favorites\LogiqLibrary\Source\LL\LL_BusinessObjects\Helper.cs(18,0):
 at LL_BusinessObjects.Helper.Mapper()
        C:\Documents and 
Settings\Administrator\Favorites\LogiqLibrary\Source\LL\LL_BusinessObjects\LanguageHelper.cs(17,0):
 at LL_BusinessObjects.LanguageHelper.ReadList(Object obj)
        C:\Documents and 
Settings\Administrator\Favorites\LogiqLibrary\Source\LL\LL_Tests\DAL_tests.cs(27,0):
 at LL_Tests.DAL_tests.LanguageSelects()
        --ConfigurationException
        at 
IBatisNet.Common.Utilities.Objects.ReflectionInfo.GetGetterType(String 
memberName)
        at 
IBatisNet.Common.Utilities.Objects.ObjectProbe.GetMemberTypeForGetter(Type 
type, String memberName)
        at 
IBatisNet.DataMapper.Configuration.ParameterMapping.InlineParameterMapParser.ResolveTypeHandler(TypeHandlerFactory
 typeHandlerFactory, Type parameterClassType, String propertyName, String 
propertyType, String dbType)
        at 
IBatisNet.DataMapper.Configuration.ParameterMapping.InlineParameterMapParser.NewParseMapping(String
 token, Type parameterClassType, IScope scope)
        at 
IBatisNet.DataMapper.Configuration.ParameterMapping.InlineParameterMapParser.ParseInlineParameterMap(IScope
 scope, IStatement statement, String sqlStatement)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ParseDynamicTags(XmlNode 
commandTextNode, IDynamicParent dynamic, StringBuilder sqlBuffer, Boolean 
isDynamic, Boolean postParseRequired, IStatement statement)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ParseDynamicTags(XmlNode 
commandTextNode, IDynamicParent dynamic, StringBuilder sqlBuffer, Boolean 
isDynamic, Boolean postParseRequired, IStatement statement)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ParseDynamicTags(XmlNode 
commandTextNode, IDynamicParent dynamic, StringBuilder sqlBuffer, Boolean 
isDynamic, Boolean postParseRequired, IStatement statement)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ParseDynamicTags(XmlNode 
commandTextNode, IDynamicParent dynamic, StringBuilder sqlBuffer, Boolean 
isDynamic, Boolean postParseRequired, IStatement statement)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ParseDynamicTags(XmlNode 
commandTextNode, IDynamicParent dynamic, StringBuilder sqlBuffer, Boolean 
isDynamic, Boolean postParseRequired, IStatement statement)
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ProcessSqlStatement(IStatement
 statement)
        at IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ConfigureSqlMap()
        at IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Initialize()
        at 
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Build(XmlDocument document, 
DataSource dataSource, Boolean useConfigFileWatcher, Boolean isCallFromDao)

Thank you for your support.

Cristian Manea
www.atypiqsoftware.ro


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to