Thanks much.  I will give this a try and will document what I find.
I've never submitted a patch before but would be happy to do so if this
works. 

Joel McConaughy
Managing Partner
Displayware LLC
800 Fifth Ave., #101-316
Seattle, WA 98104-3191
206-300-4732 Direct
206-382-2188 Fax
[EMAIL PROTECTED]


-----Original Message-----
From: Bruno Dumon [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, April 28, 2004 11:30 AM
To: [EMAIL PROTECTED]
Subject: Re: Cannot access Hibernate queries with Woody


On Sun, 2004-04-25 at 20:06, Joel McConaughy wrote:
> I'm trying to extend Hugo's hibernate sample to handle queries that
> return multiple rows but have run into a problem.  I can load the
query 
> results, edit existing rows and delete rows successfully using the 
> following flow:
> 
>     var factory =
>
cocoon.getComponent(Packages.com.displayware.hiblib.PersistenceFactory.R
OLE);
>     var hs = factory.createSession();
>     // NOTE:  users class type is 'java.util.ArrayList'
>     var users = hs.find("from User");
>     form.load(users);
>     form.showForm("simpleuseradmin-display-pipeline");
>     form.save(users);
>     hs.flush();
>     hs.close();
>     cocoon.releaseComponent(factory);
> 
> However, when the add method specified in this binding snippet is 
> called:
> 
>    <wb:on-insert-row>
>       <wb:insert-bean classname="com.displayware.hiblib.User"
>       addmethod="add" />
>     </wb:on-insert-row>
> 
> I get the following error:
> 
>     org.apache.avalon.framework.CascadingRuntimeException:
>     "resource://org/apache/cocoon/woody/flow/javascript/woody2.js",
line
>     198: uncaught JavaScript exception: at simpleuseradmin
>
(file:/home/joel/jakarta-tomcat-5.0.19/webapps/cocoon/StorePortal/flow/u
seradmin.js,
>     Line 35) at
>     (resource://org/apache/cocoon/woody/flow/javascript/woody2.js,
Line
>     198): org.apache.avalon.framework.CascadingRuntimeException:
>     InsertBean failed.
> 
> I've traced thru the code and found the exception is thrown in the
> doSave() method in insertBeanJXPathBinding.java at line 109:
> 
>            // lookup the named method on the parent
>             Method addMethod =
>                 parent.getClass().getMethod(this.addMethodName, 
> argTypes);
> 
> The problem appears to be that the getMethod call requires that the
> argTypes match the exact signature of the corresponsign method.  In
this 
> case, ArrayList.add(Object o).  However, the binding is passing in the

> class associated with the row com.displayware.hiblib.User which causes

> getMethod() to throw an exception.  The funny thing is that this call 
> ***would work*** if called directly since com.displayware.hiblib.User
is 
> derived from Object.
> 
> Is there any way to wrk around this?  Thanks.

The problem is the Class.getMethod method which searches for exact
matching argument types. It doesn't seem the standard Java API contains
something to find methods with compatible argument types.

A quick look at jakarta commons beanutils
(http://jakarta.apache.org/commons/beanutils/) shows that they have an
utility for that: MethodUtils.getMatchingAccessibleMethod()

If you are capable of doing this yourself, could you try if you can fix
it by using that, and if so submit a patch?

-- 
Bruno Dumon                             http://outerthought.org/
Outerthought - Open Source, Java & XML Competence Support Center
[EMAIL PROTECTED]                          [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to