Hi Conor, thanks a lot for your quick help - now it works! I'm now using a simple Class.forName(), which works as well:
try { // force class loading, so that no additional build-event // is triggered when the messageLogged()-method // is invoced: Class.forName( "org.apache.tools.ant.BuildEvent" ); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new BuildException("Unable to load BuildEvent from the classpath.", e); } Thanks again, Robert On Thursday 02 September 2004 09:53, Conor MacNeill wrote: > Robert Virkus wrote: > > Hi everyone, > > > > I am trying to substitute the original build logger in my task with Ant > > 1.6.1. I have written a wrapper-class which just forwards the events to > > the original build logger, which works fine as long as I don't try to > > modify the build events. When I change a build event, however, Ant is > > stopping the execution with the message "BUILD FAILED > > Listener attempted to access System.out - infinite loop terminated" > > This is an interesting problem. Nothing you're doing sounds like a > problem but somewhere something in your message handling is attempting > to output a message. i.e. before one message has been delivered to the > listeners something is attempting to send another. The message above > gives the most common cause but it is in fact not the only possibility > as I found when trying to sort out your problem. > > Since your logger is loaded by an AntClassLoader it is susceptible to > any logging done by that classloader. In fact I reproduced your problem > and here is the stack trace > > Listener attempted to access System.out - infinite loop terminated > at > org.apache.tools.ant.Project.fireMessageLoggedEvent(Project.java:1991) > at > org.apache.tools.ant.Project.fireMessageLogged(Project.java:2020) > at org.apache.tools.ant.Project.log(Project.java:387) > at > org.apache.tools.ant.AntClassLoader.log(AntClassLoader.java:394) at > org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:974) > at java.lang.ClassLoader.loadClass(ClassLoader.java:236) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:303) > at PolishLogger.messageLogged(PolishLogger.java:32) > > So the deferred classloading that is triggered in your messageLogged > method causes the AntClassLoader to log a message (a class being loaded). > > The workaround is to trigger the class loading earlier. I changed the > PolishLogger constructor as follows: > > public PolishLogger(BuildLogger realLogger, Project project) > { > this.logger = realLogger; > BuildEvent event = new BuildEvent(project); > String s = new String(); > StringBuffer sb = new StringBuffer(); > } > > > Note that it is not easy to ensure you have got all the classes loaded. > A better solution might be to not load the PolishLogger through the > AntClassLoader. > > Conor > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] -- Robert Virkus Enough Software Vor dem Steintor 218 D-28203 Bremen Germany www.enough.de [EMAIL PROTECTED] SAY NO TO SOFTWARE PATENTS: http://www.ffii.org --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]