[ http://issues.apache.org/jira/browse/IBATISNET-168?page=all ]
Gilles Bayon closed IBATISNET-168. ---------------------------------- Fix Version/s: DataMapper 1.5.1 Resolution: Fixed Assignee: Gilles Bayon In SVN > 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 > Assigned To: Gilles Bayon > Priority: Blocker > Fix For: DataMapper 1.5.1 > > > 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