Sachin says that maven 2 uses the eclipse compiler rather than javac
and that judging by its behavior when looking at binary classes in
eclipse it may well be producing these bad class files. It appears
that all the methods in the "implements" interfaces have been added to
the class.
Presumably the solution is to build with maven 1.
If the eclipse compiler is in fact at fault, I think that this will
prevent us from using maven 2 until either a javac compiler is provided
or the eclipse compiler is fixed. If the eclipse compiler behavior is
actually according to the jdk spec we may have a different issue.
thanks
david jencks
On Dec 13, 2005, at 1:11 AM, David Jencks wrote:
Something is dreadfully wrong with two of the spec jars build by maven
2.
The javamail BodyPart class source looks like this:
package javax.mail;
/**
* @version $Rev: 54266 $ $Date: 2004-10-10 14:02:50 -0700 (Sun, 10
Oct 2004) $
*/
public abstract class BodyPart implements Part {
protected Multipart parent;
public Multipart getParent() {
return parent;
}
}
Decompiling the class (1951 bytes) from the maven 2 build gives this:
David-Jencks-Computer:~/geronimo/geronimo/svn/geronimo/branches/1.0
david$ javap -classpath
~/downloads/geronimo-javamail_1.3.1_spec-1.0.jar javax.mail.BodyPart
Compiled from "BodyPart.java"
public abstract class javax.mail.BodyPart extends java.lang.Object
implements javax.mail.Part{
protected javax.mail.Multipart parent;
public javax.mail.BodyPart();
public javax.mail.Multipart getParent();
public abstract void writeTo(java.io.OutputStream);
throws java/io/IOException, javax/mail/MessagingException
public abstract void setText(java.lang.String);
throws javax/mail/MessagingException
public abstract void setHeader(java.lang.String,java.lang.String);
throws javax/mail/MessagingException
public abstract void setFileName(java.lang.String);
throws javax/mail/MessagingException
public abstract void setDisposition(java.lang.String);
throws javax/mail/MessagingException
public abstract void setDescription(java.lang.String);
throws javax/mail/MessagingException
public abstract void setDataHandler(javax.activation.DataHandler);
throws javax/mail/MessagingException
public abstract void setContent(java.lang.Object,java.lang.String);
throws javax/mail/MessagingException
public abstract void setContent(javax.mail.Multipart);
throws javax/mail/MessagingException
public abstract void removeHeader(java.lang.String);
throws javax/mail/MessagingException
public abstract boolean isMimeType(java.lang.String);
throws javax/mail/MessagingException
public abstract int getSize();
throws javax/mail/MessagingException
public abstract java.util.Enumeration
getNonMatchingHeaders(java.lang.String[]);
throws javax/mail/MessagingException
public abstract java.util.Enumeration
getMatchingHeaders(java.lang.String[]);
throws javax/mail/MessagingException
public abstract int getLineCount();
throws javax/mail/MessagingException
public abstract java.io.InputStream getInputStream();
throws java/io/IOException, javax/mail/MessagingException
public abstract java.lang.String[] getHeader(java.lang.String);
throws javax/mail/MessagingException
public abstract java.lang.String getFileName();
throws javax/mail/MessagingException
public abstract java.lang.String getDisposition();
throws javax/mail/MessagingException
public abstract java.lang.String getDescription();
throws javax/mail/MessagingException
public abstract javax.activation.DataHandler getDataHandler();
throws javax/mail/MessagingException
public abstract java.lang.String getContentType();
throws javax/mail/MessagingException
public abstract java.lang.Object getContent();
throws java/io/IOException, javax/mail/MessagingException
public abstract java.util.Enumeration getAllHeaders();
throws javax/mail/MessagingException
public abstract void addHeader(java.lang.String,java.lang.String);
throws javax/mail/MessagingException
}
Decompiling the class from our own maven 1 build gives:
David-Jencks-Computer:~/geronimo/geronimo/svn/geronimo/branches/1.0
david$ javap -classpath
~/.maven/repository/geronimo-spec/jars/geronimo-spec-javamail-1.3.1-
rc6.jar javax.mail.BodyPart
Compiled from "BodyPart.java"
public abstract class javax.mail.BodyPart extends java.lang.Object
implements javax.mail.Part{
protected javax.mail.Multipart parent;
public javax.mail.BodyPart();
public javax.mail.Multipart getParent();
}
There appears to be a similar problem with the saaj SOAPPart class.
What should we do? Use the maven 1 built jars?
thanks
david jencks