Return-Path: Delivered-To: apmail-jakarta-ant-dev-archive@apache.org Received: (qmail 22733 invoked from network); 2 May 2002 17:09:03 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 2 May 2002 17:09:03 -0000 Received: (qmail 12088 invoked by uid 97); 2 May 2002 17:08:55 -0000 Delivered-To: qmlist-jakarta-archive-ant-dev@nagoya.betaversion.org Received: (qmail 12015 invoked by alias); 2 May 2002 17:08:55 -0000 Delivered-To: jakarta-archive-ant-dev@jakarta.apache.org Received: (qmail 12001 invoked by uid 97); 2 May 2002 17:08:54 -0000 Mailing-List: contact ant-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Ant Developers List" Reply-To: "Ant Developers List" Delivered-To: mailing list ant-dev@jakarta.apache.org Received: (qmail 11983 invoked by uid 98); 2 May 2002 17:08:54 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Message-ID: <3CD16FC4.8080807@noos.fr> Date: Thu, 02 May 2002 18:56:36 +0200 From: =?UTF-8?B?RnJhbsOnb2lz?= Wolff User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.8) Gecko/20020204 X-Accept-Language: fr, en-us MIME-Version: 1.0 To: ant-dev@jakarta.apache.org Subject: Proxy support in Ant Content-Type: multipart/mixed; boundary="------------080803090703070106090306" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N --------------080803090703070106090306 Content-Type: multipart/alternative; boundary="------------050908020607010002070709" --------------050908020607010002070709 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hello, I'm the developer of Ejen , a Java/XSLT based code generation system. Next release of this system implements an Ant task that uses java.lang.reflect.Proxy/java.lang.reflect.InvocationHandler classes for sub-node creation. For example, there is this kind of declaration: public class Ejen extends Task (...) { ... public Source createSource() { return (Source)(Proxy.newProxyInstance(Source.class.getClassLoader(), new Class[] { Source.class }, new NodeInvocationHandler(...))); } ... } with, public interface Source { public void setUri(String uri); } NodeInvocationHandler implementation doesn't matter here... With this kind of build file: ... ... ... I get the following error: ...: Class $Proxy0 doesn't support the "badattr" attribute. I would prefer of course: ...: Class Source doesn't support the "badattr" attribute. I wrote a patch for the org.apache.tools.ant.IntrospectionHelper class (getElementName method) with this code (for Ant 1.4.1 release): ... // New -------------------------------------------------------- Class eltClass = element.getClass(); if (java.lang.reflect.Proxy.isProxyClass(eltClass)) { Class[] interfaces = eltClass.getInterfaces(); if (interfaces.length == 1) return "Class " + interfaces[0].getName(); else if (interfaces.length > 1) { StringBuffer sb = new StringBuffer("Classes "); for (int i = 0; i < interfaces.length; i++) { if (i > 0) sb.append(", "); sb.append(interfaces[i].getName()); } return sb.toString(); } } return "Class " + eltClass.getName(); // -------------------------------------------------------- New /* Old -------------------------------------------------------- return "Class " + element.getClass().getName(); -------------------------------------------------------- Old */ ... Error message is then correct. The patch is included as an attachment. I have written also a patch for the next 1.5 release of Ant (based on the org.apache.tools.ant.Project class, revision 1.108). I think it could be very interesting to add Proxy support in the next release of Ant, because use of Proxys can be very useful when adapting existing API to specific Ant constraints (create..., set...). Thanks a lot for the excellent Ant, F. Wolff. --------------050908020607010002070709 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit Hello,

I'm the developer of Ejen, a Java/XSLT based code generation system. Next release of this system implements an Ant task that uses java.lang.reflect.Proxy/java.lang.reflect.InvocationHandler classes for sub-node creation.

For example, there is this kind of declaration:
public class Ejen extends Task (...) {
...
public Source createSource() {
return (Source)(Proxy.newProxyInstance(Source.class.getClassLoader(),
new Class[] { Source.class },
new NodeInvocationHandler(...)));
}
...
}
with,
public interface Source {
public void setUri(String uri);
}
NodeInvocationHandler implementation doesn't matter here...

With this kind of build file:
...
<taskdef name="ejen" classname="org.ejen.ant.Ejen"/>

<target name="ejen-target">
<ejen>
<source badattr="..."/>
...
</ejen>
</target>
...
I get the following error:
...: Class $Proxy0 doesn't support the "badattr" attribute.
I would prefer of course:
...: Class Source doesn't support the "badattr" attribute.
I wrote a patch for the org.apache.tools.ant.IntrospectionHelper class (getElementName method) with this code (for Ant 1.4.1 release):
...
// New --------------------------------------------------------
Class eltClass = element.getClass();
if (java.lang.reflect.Proxy.isProxyClass(eltClass))
{
Class[] interfaces = eltClass.getInterfaces();
if (interfaces.length == 1)
return "Class " + interfaces[0].getName();
else if (interfaces.length > 1)
{
StringBuffer sb = new StringBuffer("Classes ");
for (int i = 0; i < interfaces.length; i++) {
if (i > 0)
sb.append(", ");
sb.append(interfaces[i].getName());
}
return sb.toString();
}
}
return "Class " + eltClass.getName();
// -------------------------------------------------------- New

/* Old --------------------------------------------------------
return "Class " + element.getClass().getName();
-------------------------------------------------------- Old */
...

Error message is then correct.

The patch is included as an attachment. I have written also a patch for the next 1.5 release of Ant (based on the org.apache.tools.ant.Project class, revision 1.108). I think it could be very interesting to add Proxy support in the next release of Ant, because use of Proxys can be very useful when adapting existing API to specific Ant constraints (create..., set...).

Thanks a lot for the excellent Ant,
F. Wolff.
--------------050908020607010002070709-- --------------080803090703070106090306 Content-Type: application/octet-stream; name="IntrospectionHelper-Ant-1.4.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="IntrospectionHelper-Ant-1.4.zip" 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 --------------080803090703070106090306 Content-Type: application/octet-stream; name="Project-Ant-1.5.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Project-Ant-1.5.zip" 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 AABQSwUGAAAAAAEAAQBHAAAATzUAAAAA --------------080803090703070106090306 Content-Type: text/plain; charset=us-ascii -- To unsubscribe, e-mail: For additional commands, e-mail: --------------080803090703070106090306--