Do you can create a NUnit test case http://nhforge.org/blogs/nhibernate/archive/2008/10/04/the-best-way-to-solve-nhibernate-bugs-submit-good-unit-test.aspx
to recreate your problem ? Then you can create a JIRA ticket with your issue and the test to reproduce it. 2008/12/17 epitka <[email protected]> > > No, Item get's loaded via repository, and then I unbind values on the > form to underlying object. If for example there is a rule validation > on the let's say "name" field, then setter will throw > ValidationException. I can step through the code and see it with my > own eyes throwing correct exception. > > On Dec 17, 9:09 am, "Fabio Maulo" <[email protected]> wrote: > > are you throwing an exception in a fresh load from DB ? > > > > 2008/12/17 epitka <[email protected]> > > > > > > > > > > > > > I tried it with ArgumentOut..., same thing. > > > > > On Dec 17, 3:44 am, "Richard \(Google\)" <[email protected]> > > > wrote: > > > > That does sound strange - and if it's re-thrown I would expect the > line > > > > number in the (final) stack trace to be line 78 (not 60). > > > > > > Are you able to throw other exceptions types across the proxy? For > > > example, > > > > does it work if you throw an ArgumentOutOfRangeException? (If it > does, > > > it > > > > might suggest there's something unusual about your custom exception > > > class) > > > > > > -------------------------------------------------- > > > > From: "epitka" <[email protected]> > > > > Sent: Tuesday, December 16, 2008 11:28 PM > > > > To: "nhusers" <[email protected]> > > > > Subject: [nhusers] Re: CastleLazyInitializer does not propagate > > > exceptions > > > > correctly > > > > > > > I stand corrected by the last statement. It does unwrap it > correctly, > > > > > as I just assigned the unwrapped value to temp variable and it is > of > > > > > my type, but then throw piece is doing something weird as it is not > > > > > coming across as my exception type. hmmmm > > > > > > > On Dec 16, 5:16 pm, epitka <[email protected]> wrote: > > > > >> Ok, I debugged and I can see my exception thrown and then the next > > > > >> thing is that TargetInvocationException is caught. I looked at the > > > > >> stack trace of the exception and here is what is says: > > > > >> at System.RuntimeMethodHandle._InvokeMethodFast(Object target, > > > > >> Object[] arguments, SignatureStruct& sig, MethodAttributes > > > > >> methodAttributes, RuntimeTypeHandle typeOwner) > > > > >> at System.RuntimeMethodHandle.InvokeMethodFast(Object target, > Object > > > > >> [] arguments, Signature sig, MethodAttributes methodAttributes, > > > > >> RuntimeTypeHandle typeOwner) > > > > >> at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, > > > > >> BindingFlags invokeAttr, Binder binder, Object[] parameters, > > > > >> CultureInfo culture, Boolean skipVisibilityChecks) > > > > >> at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, > > > > >> BindingFlags invokeAttr, Binder binder, Object[] parameters, > > > > >> CultureInfo culture) > > > > >> at System.Reflection.MethodBase.Invoke(Object obj, Object[] > > > > >> parameters) > > > > >> at NHibernate.Proxy.Poco.Castle.CastleLazyInitializer.Intercept > > > > >> (IInvocation invocation) in C:\Users\epitka\UltiMod\NHibernate > > > > >> \NHibernate-2.0.1.GA-src\src\NHibernate\Proxy\Poco\Castle > > > > >> \CastleLazyInitializer.cs:line 60 > > > > > > >> Looking at the line sixty it does this. > > > > > > >> if (invocation.ReturnValue == InvokeImplementation) > > > > >> { > > > > >> invocation.ReturnValue = invocation.Method.Invoke > > > > >> (GetImplementation(), invocation.Arguments); > > > > >> return; > > > > >> } > > > > > > >> which will invoke my property setter that throws > ValidationException, > > > > >> which is then caught in this block > > > > > > >> catch (TargetInvocationException tie) > > > > >> { > > > > >> // Propagate the inner exception so that the proxy throws the same > > > > >> exception as > > > > >> // the real object would > > > > >> throw ReflectHelper.UnwrapTargetInvocationException(tie); > > > > >> } > > > > > > >> which does not really unwrap it at all, It just returns regular > > > > >> exception with my exception being inner one. > > > > > > >> On Dec 16, 12:04 pm, "Richard \(Google\)" < > [email protected]> > > > > >> wrote: > > > > > > >> > Hi epitka, > > > > > > >> > Can you get the full stack trace for the exception that is > thrown? > > > > > > >> > The line: > > > > >> > ''System.Reflection.TargetInvocationException' occurred in > > > > >> > mscorlib.dll' > > > > >> > suggests (from mscorlib.dll) that the error you are getting is > > > coming > > > > >> > from > > > > >> > the .Net framework - not from NHibernate. > > > > > > >> > The code for CastLazyInitalizer catches any exceptions and > unwraps > > > > >> > them - so > > > > >> > it shouldn't change the original exception thrown (see line > > > > >> > 74): > > >http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/branches/2.0.. > .. > > > > > > >> > Regards, > > > > >> > Richard > > > > > > >> > -------------------------------------------------- > > > > >> > From: "epitka" <[email protected]> > > > > >> > Sent: Tuesday, December 16, 2008 5:46 PM > > > > >> > To: "nhusers" <[email protected]> > > > > >> > Subject: [nhusers] Re: CastleLazyInitializer does not propagate > > > > >> > exceptions > > > > >> > correctly > > > > > > >> > > Ok, here is what I see in output window > > > > > > >> > > 'w3wp.exe' (Managed): Loaded 'DynamicProxyGenAssembly2' > > > > >> > > 'w3wp.exe' (Managed): Loaded 'CastleDynProxy2.dll' > > > > >> > > 'w3wp.exe' (Managed): Loaded > > > 'C:\Windows\assembly\GAC_32\ISymWrapper > > > > >> > > \2.0.0.0__b03f5f7f11d50a3a\ISymWrapper.dll' > > > > >> > > A first chance exception of type > > > > >> > > 'dnnSphere.Exceptions.ValidationException' occurred in > > > > >> > > dnnSphere.Meta.DLL > > > > >> > > A first chance exception of type > > > > >> > > 'System.Reflection.TargetInvocationException' occurred in > > > > >> > > mscorlib.dll > > > > > > >> > > and I am catching it like this. I have a workaround where I > look > > > at > > > > >> > > he > > > > >> > > inner exception. > > > > > > >> > > // *** Handles any errors that are raise from the property > setters > > > > >> > > catch (ValidationException ve) > > > > >> > > { > > > > >> > > this.HandleUnbindingError(Item, new > > > > >> > > ValidationErrorException(ve.Message)); > > > > >> > > } > > > > >> > > catch (Exception ex) > > > > >> > > { > > > > >> > > //this is a hack to NHibernate proxy exceptions > > > > >> > > if (ex.InnerException is ValidationException) > > > > >> > > { > > > > >> > > this.HandleUnbindingError(Item, new > > > > >> > > ValidationErrorException(ex.InnerException.Message)); > > > > >> > > } > > > > >> > > else > > > > >> > > { > > > > >> > > this.HandleUnbindingError(Item, ex); > > > > >> > > ResultFlag = false; > > > > >> > > } > > > > > > >> > > } > > > > > > >> > > On Dec 16, 7:34 am, epitka <[email protected]> wrote: > > > > >> > >> Will do, it will take several hours before I get back to it. > Got > > > to > > > > >> > >> take kids to school. > > > > > > >> > >> On Dec 16, 7:16 am, "Richard \(Google\)" < > > > [email protected]> > > > > >> > >> wrote: > > > > > > >> > >> > Can you post a stack trace? > > > > > > >> > >> > From: first last > > > > >> > >> > Sent: Tuesday, December 16, 2008 1:02 PM > > > > >> > >> > To: [email protected] > > > > >> > >> > Subject: [nhusers] Re: CastleLazyInitializer does not > propagate > > > > >> > >> > exceptions correctly > > > > > > >> > >> > 2.0 > > > > > > --------------------------------------------------------------------------- > > > > >> > >> > ----- > > > > >> > >> > From: Richard (Google) <[email protected]> > > > > >> > >> > To: nhusers <[email protected]> > > > > >> > >> > Sent: Tuesday, December 16, 2008 4:30:44 AM > > > > >> > >> > Subject: [nhusers] Re: CastleLazyInitializer does not > propagate > > > > >> > >> > exceptions correctly > > > > > > >> > >> > Hi epitka, > > > > > > >> > >> > What version of NH are you using? > > > > > > >> > >> > This was sorted for V2.0 I think. > > > > > > >> > >> > Regards, > > > > >> > >> > Richard > > > > > > >> > >> > -------------------------------------------------- > > > > >> > >> > From: "epitka" <[email protected]> > > > > >> > >> > Sent: Monday, December 15, 2008 11:07 PM > > > > >> > >> > To: "nhusers" <[email protected]> > > > > >> > >> > Subject: [nhusers] CastleLazyInitializer does not propagate > > > > >> > >> > exceptions > > > > >> > >> > correctly > > > > > > >> > >> > > This code in CastleLazyInitializer returns generic > Exception > > > > >> > >> > > with a > > > > >> > >> > > generic "Target of invoication ..." message. I am rasing > > > > >> > >> > > ValidationException in my code yet I cannot catch it as > > > > >> > >> > > ValidationException only as Exception. My exception is > > > actually > > > > >> > >> > > in > > > > >> > >> > > innerException. How am I supposed to catch custom > exceptions? > > > > > > >> > >> > > /// <summary> > > > > >> > >> > > /// Invoke the actual Property/Method using the Proxy or > > > > >> > >> > > instantiate > > > > >> > >> > > the actual > > > > >> > >> > > /// object and use it when the Proxy can't handle the > method. > > > > >> > >> > > /// </summary> > > > > >> > >> > > /// <param name="invocation">The <see > cref="IInvocation"/> > > > from > > > > >> > >> > > the > > > > >> > >> > > generated Castle.DynamicProxy.</param> > > > > >> > >> > > public virtual void Intercept(IInvocation invocation) > > > > >> > >> > > { > > > > >> > >> > > try > > > > >> > >> > > { > > > > >> > >> > > if (_constructed) > > > > >> > >> > > { > > > > >> > >> > > // let the generic LazyInitializer figure out if this can > be > > > > >> > >> > > handled > > > > >> > >> > > // with the proxy or if the real class needs to be > > > initialized > > > > >> > >> > > invocation.ReturnValue = base.Invoke(invocation.Method, > > > > >> > >> > > invocation.Arguments, invocation.Proxy); > > > > > > >> > >> > > // the base LazyInitializer could not handle it so we > need to > > > > >> > >> > > Invoke > > > > >> > >> > > // the method/property against the real class > > > > >> > >> > > if (invocation.ReturnValue == InvokeImplementation) > > > > >> > >> > > { > > > > >> > >> > > invocation.ReturnValue = invocation.Method.Invoke > > > > >> > >> > > (GetImplementation(), invocation.Arguments); > > > > >> > >> > > return; > > > > >> > >> > > } > > > > >> > >> > > else > > > > >> > >> > > { > > > > >> > >> > > return; > > > > >> > >> > > } > > > > >> > >> > > } > > > > >> > >> > > else > > > > >> > >> > > { > > > > >> > >> > > // TODO: Find out equivalent to CGLIB's > 'method.invokeSuper'. > > > > >> > >> > > return; > > > > >> > >> > > } > > > > >> > >> > > } > > > > >> > >> > > catch (TargetInvocationException tie) > > > > >> > >> > > { > > > > >> > >> > > // Propagate the inner exception so that the proxy throws > the > > > > >> > >> > > same > > > > >> > >> > > exception as > > > > >> > >> > > // the real object would > > > > >> > >> > > throw ReflectHelper.UnwrapTargetInvocationException(tie); > > > > >> > >> > > } > > > > >> > >> > > } > > > > -- ... > > > > read more ยป > > > -- Fabio Maulo --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
