We should create a test case for this, also. I could create one, I believe
and submit a formal patch later on tonight. And, I think the implementation
could short circuit a bit earlier..
Method m = methods[i];
if((!methodMap.containsKey(new MethodSignature(m)))
{
builder.clear();
builder.begin();
builder.add("return ($r) ");
...
}
-----Original Message-----
From: Howard Lewis Ship [mailto:[EMAIL PROTECTED]
Sent: Wednesday, September 08, 2004 12:35 PM
To: [email protected]
Subject: Re: Service implementing multiple interfaces
Thanks for the bug and the fix (which needs to be applied in a couple
of different places). If you could add a JIRA bug, that would be
great!
On Wed, 08 Sep 2004 17:31:15 +0200, Strutynski, Oliver
<[EMAIL PROTECTED]> wrote:
> For now I have worked around this by adding some code to
> ProxyBuilder.addServiceMethods that avoids that methods are being added
> twice. Not sure if this is a good patch, as addServiceMethods should
> probably check, if these methods are really defined in different
> interfaces. But works for now. Code below.
>
> This issue is related to issue 39
> (http://issues.apache.org/jira/browse/HIVEMIND-39). Here combining two
> interfaces into one was suggested as a way to write a service that has
> multiple interfaces, but the fact that two interfaces ARE ALLOWED to
> have similar methods was not taken into account.
>
> My new ProxyBuilder.addServiceMethods():
>
> public void addServiceMethods(String indirection)
> {
> // use a local map to remember all method signatures
> java.util.Map methodMap = new java.util.HashMap();
> BodyBuilder builder = new BodyBuilder();
> boolean toString = false;
>
> Method[] methods = _serviceInterface.getMethods();
> for (int i = 0; i < methods.length; i++)
> {
> Method m = methods[i];
>
> builder.clear();
> builder.begin();
> builder.add("return ($r) ");
> builder.add(indirection);
> builder.add(".");
> builder.add(m.getName());
> builder.addln("($$);");
> builder.end();
> // only add new methods, ignore ones with signatures that
> have already been added to proxy.
> if (!methodMap.containsKey(new MethodSignature(m))) {
> methodMap.put(new MethodSignature(m), null);
> _classFab.addMethod(Modifier.PUBLIC, new
> MethodSignature(m), builder.toString());
> }
> toString |= ClassFabUtils.isToString(m);
> }
>
> if (!toString)
> ClassFabUtils.addToStringMethod(
> _classFab,
> "<"
> + _type
> + " for "
> + _point.getExtensionPointId()
> + "("
> + _serviceInterface.getName()
> + ")>");
>
>
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
--
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind
http://howardlewisship.com
---------------------------------------------------------------------
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]