Bug 22702 - XmlLogger not working?
Summary: XmlLogger not working?
Status: VERIFIED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: Ant (show other bugs)
Version: 2.0   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: 2.1 M2   Edit
Assignee: Jared Burns CLA
QA Contact:
URL:
Whiteboard:
Keywords: core
Depends on:
Blocks:
 
Reported: 2002-08-22 10:24 EDT by Rodrigo Peretti CLA
Modified: 2002-10-07 12:00 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rodrigo Peretti CLA 2002-08-22 10:24:37 EDT
build 20020821 branch 2.0.1

If the user wants to use a logger other than the default the command line
 -logger <loggerClassName> can be used. It seems to work fine if you create a 
logger and add its JAR to the Ant classpath but trying to use the 
org.apache.tools.ant.XmlLogger (available in the ant.jar) gives a 
dialog "Build Failed." with no more explanation about the problem. The user 
has no clue of what is wrong.
Comment 1 Gunnar Wagenknecht CLA 2002-09-23 07:37:28 EDT
The same happens in 2.1.0 M1 build when calling antRunner from command line 
("eclipse -application org.eclipse.core.antRunner -logger ....")

     [exec] java.lang.reflect.InvocationTargetException: 
java.lang.ClassCastException: org.apache.tools.ant.XmlLogger
     [exec]     at 
org.eclipse.ant.internal.core.ant.InternalAntRunner.addBuildListeners
(InternalAntRunner.java:176)
     [exec]     at org.eclipse.ant.internal.core.ant.InternalAntRunner.run
(InternalAntRunner.java:279)
     [exec]     at org.eclipse.ant.internal.core.ant.InternalAntRunner.run
(InternalAntRunner.java:443)
     [exec]     at java.lang.reflect.Method.invoke(Native Method)
     [exec]     at org.eclipse.ant.core.AntRunner.run(AntRunner.java:338)
     [exec]     at org.eclipse.core.internal.boot.InternalBootLoader.run
(InternalBootLoader.java:775)
     [exec]     at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462)
     [exec]     at java.lang.reflect.Method.invoke(Native Method)
     [exec]     at org.eclipse.core.launcher.Main.basicRun(Main.java:247)
     [exec]     at org.eclipse.core.launcher.Main.run(Main.java:703)
     [exec]     at org.eclipse.core.launcher.Main.main(Main.java:539)
     [exec] --- Nested Exception ---
     [exec] java.lang.ClassCastException: org.apache.tools.ant.XmlLogger
     [exec]     at 
org.eclipse.ant.internal.core.ant.InternalAntRunner.createLogger
(InternalAntRunner.java:474)
     [exec]     at 
org.eclipse.ant.internal.core.ant.InternalAntRunner.addBuildListeners
(InternalAntRunner.java:169)
     [exec]     at org.eclipse.ant.internal.core.ant.InternalAntRunner.run
(InternalAntRunner.java:279)
     [exec]     at org.eclipse.ant.internal.core.ant.InternalAntRunner.run
(InternalAntRunner.java:443)
     [exec]     at java.lang.reflect.Method.invoke(Native Method)
     [exec]     at org.eclipse.ant.core.AntRunner.run(AntRunner.java:338)
     [exec]     at org.eclipse.core.internal.boot.InternalBootLoader.run
(InternalBootLoader.java:775)
     [exec]     at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462)
     [exec]     at java.lang.reflect.Method.invoke(Native Method)
     [exec]     at org.eclipse.core.launcher.Main.basicRun(Main.java:247)
     [exec]     at org.eclipse.core.launcher.Main.run(Main.java:703)
     [exec]     at org.eclipse.core.launcher.Main.main(Main.java:539)
     [exec] --- Nested Exception ---
     [exec] java.lang.ClassCastException: org.apache.tools.ant.XmlLogger
     [exec]     at 
org.eclipse.ant.internal.core.ant.InternalAntRunner.createLogger
(InternalAntRunner.java:470)
     [exec]     at 
org.eclipse.ant.internal.core.ant.InternalAntRunner.addBuildListeners
(InternalAntRunner.java:169)
     [exec]     at org.eclipse.ant.internal.core.ant.InternalAntRunner.run
(InternalAntRunner.java:279)
     [exec]     at org.eclipse.ant.internal.core.ant.InternalAntRunner.run
(InternalAntRunner.java:443)
     [exec]     at java.lang.reflect.Method.invoke(Native Method)
     [exec]     at org.eclipse.ant.core.AntRunner.run(AntRunner.java:338)
     [exec]     at org.eclipse.core.internal.boot.InternalBootLoader.run
(InternalBootLoader.java:775)
     [exec]     at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462)
     [exec]     at java.lang.reflect.Method.invoke(Native Method)
     [exec]     at org.eclipse.core.launcher.Main.basicRun(Main.java:247)
     [exec]     at org.eclipse.core.launcher.Main.run(Main.java:703)
     [exec]     at org.eclipse.core.launcher.Main.main(Main.java:539)
Comment 2 Gunnar Wagenknecht CLA 2002-09-23 07:48:40 EDT
I found the following interesting method in the source of CruiseControl 
(cruisecontrol.sourceforge.net). It seems that there are two different 
implementations of "org.apache.tools.ant.XmlLogger" (Ant 1.4/1.5 ?!?) One is 
uses as "-logger" and one is used as "-listener".

    /**
     *  Determine whether the org.apache.tools.ant.XmlLogger being
     *  used implements the BuildLogger interface.  Using the XmlLogger
     *  as a BuildLogger rather than a BuildListener is a newer feature
     *  and can reduce log file size dramatically.
     *
     *  @return true if XmlLogger can be found and used as a BuildLogger.
     */
    protected boolean isLoggerSupported() {
        try {
            Class[] interfaces = Class.forName
("org.apache.tools.ant.XmlLogger").getInterfaces();
            for(int i=0; i<interfaces.length; i++) {
                log.debug(interfaces[i].getName());
            }
            boolean isLoggerAssignableToXml = (Class.forName
("org.apache.tools.ant.BuildLogger").isAssignableFrom(Class.forName
("org.apache.tools.ant.XmlLogger")));
            boolean isXmlAssignableToLogger = (Class.forName
("org.apache.tools.ant.XmlLogger").isAssignableFrom(Class.forName
("org.apache.tools.ant.BuildLogger")));
            log.debug("" + isLoggerAssignableToXml);
            log.debug("" + isXmlAssignableToLogger);
            return (Class.forName
("org.apache.tools.ant.BuildLogger").isAssignableFrom(Class.forName
("org.apache.tools.ant.XmlLogger")));
        } catch (ClassNotFoundException e) {
            log.error("Could not find Ant XmlLogger", e);
            return false;
        }
    }


Comment 3 Darin Swanson CLA 2002-09-23 16:07:23 EDT
The XmlLogger provided in org.apache.tools.ant is NOT a BuildLogger but a 
BuildListener in Ant 1.4.1.  It should be added using -listener.

Using Ant 1.5, the XmlLogger IS a BuildLogger.

Thanks Gunnar.

So our bug here is that we need a much better error message in these types of 
cases where we expect a certain type of class passed 

Comment 4 Darin Swanson CLA 2002-09-27 17:50:34 EDT
For BuildListeners and BuildLoggers, the class cast error message is shown to 
the user to help diagnose and fix the problem.
Comment 5 Darin Swanson CLA 2002-09-27 17:50:58 EDT
Please verify (Jared).
Comment 6 Jared Burns CLA 2002-10-07 12:00:50 EDT
Verified.