Hello,

The problem has been identified. It is basically a backward
compatibility problem of the worst kind: everything appears ok at
compile time only to blow up at your face at runtime.

The symptom
===========

Source code will compile fine using either log4j-1.1.3.jar or
log4j-1.2alphaX.jar. However, code compiled with log4j-1.1.3.jar will
not run with log4j-1.2alphaX.jar and vice versa.

Reason
======

The compiler is forgiving on the return type of a method whereas the
java runtime is not.

Solution
========

None yet.

See the attached file surprise.zip to have a better understanding of
the exact nature of the problem.

At 22:29 08.02.2002 -0500, Chris Haddad wrote:
>Ceki -
>
>This may help to outline the issue that developers may experience with
>the recent log4j changes if libraries are built using different versions
>of lo4j libraries.
>
>Tom's suggestion of building axis.jar and the Axis client with the same
>log4j file solves the runtime exception.    Thanks for the tip Tom.
>
>The exception appears when Axis client code is build using a lo4j.jar
>file that is different than the one used to build the Axis.jar file.  It
>doesn't matter if only a single lo4j jarfile is available at runtime.
>
>Is the exception (when different log4 versions are defined at build
>time) due to the static declaration of the Category property?   Does the
>JDK1.3 java compiler optimize the declaration so that there is a
>run-time library dependency?  It is my understanding that the dependency
>of Category changes between the versions even though the outward
>getInstance() signature used in the Axis codebase remains constant.
>
>The interop issue is when libraries (for example, Axis.jar and
>MyWebServiceClient.jar) are layered (MyWebService code calls Axis code),
>both use log4j, and have been built using different versions of log4j.
>In this use case, there is no backward compatibility.
>
>=====
>The gory details:
>
>The exception arises when axis.jar is built against log4j-core.jar (the
>distribution version) and then used in conjunction with an Axis client
>built against log4j-1.2alpha7.jar.   For some reason, when the client
>calls the Axis layer, there is an initialization exception if the
>distribution jar for log4j is log4j-1.2alpha7.jar and not log4j-core.
>
>
>Here's the exception thrown:
>
>Exception in thread "main" java.lang.NoSuchMethodError
>
>         at org.apache.axis.handlers.BasicHandler.<clinit>(Unknown
>Source)
>         at org.apache.axis.client.Service.getAxisClient(Unknown Source)
>
>         at org.apache.axis.client.Service.<init>(Unknown Source)
>
>
>To recap, if one compiles the main branch of xml-axis (using log4j-core)
>to obtain axis.jar, builds an Axis client (using log4j-1.2alpha7.jar)
>and runs the client with a classpath of axis.jar:log4j-1.2alpha7.jar, a
>runtime exception will be thrown when BasicHandler is instantiated.
>
>
>The offending line might be:
>
>static Category category =
>          Category.getInstance(BasicHandler.class.getName());
>
>
>This exception does not occur if the identical log4j jarfile is used for
>both the Axis and client build.
>
>Thanks for your help,
>
>/Chris
>
>-----Original Message-----
>From: Ceki Gülcü [mailto:[EMAIL PROTECTED]]
>Sent: Friday, February 08, 2002 1:01 PM
>To: Log4J Developers List; '[EMAIL PROTECTED]'
>Cc: '[EMAIL PROTECTED]'
>Subject: RE: Interop with Log4j
>
>
>Hi Tom,
>
>Nothing that would affect backward compatibility was added or removed in
>the
>recent past. So I can't think of anything. Could you provide more detail
>
>about the problem
>please?  Thank you, Ceki
>
>At 11:36 08.02.2002 -0500, Tom Jordahl wrote:
> >Tom Jordahl wrote:
> > > The latest log4j from CVS has made a incompatible change from the
>previous
> > > release version.
> >
> >Sam Ruby wrote:
> > > Have you communicated this to the log4j development team?  Such
>changes
> > > would eventually impact Axis users...  I can tell you that the log4j
>team
> > > takes backwards compatibility very seriously and agressively address
>any
> > > issues brought to their attention.
> >
> >I have not in fact communicated with the log4j team.  Hi guys!
> >
> >Here is what I know:  If you try to use the nightly build axis.jar with
>
> >the log4j.jar checked in to our CVS tree, it will fail due to a missing
>
> >log4j class.  I apologize for not having the class name handy.
> >
> >--
> >Tom Jordahl
> >Macromedia
> >
> >--
> >To unsubscribe, e-mail:
><mailto:[EMAIL PROTECTED]>
> >For additional commands, e-mail:
><mailto:[EMAIL PROTECTED]>
>
>--
>Ceki Gülcü
>
>
>
>
>
>
>_________________________________________________________
>Do You Yahoo!?
>Get your free @yahoo.com address at http://mail.yahoo.com
>
>
>--
>To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
>For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

--
Ceki Gülcü

Attachment: surprise.ZIP
Description: Zip archive

Reply via email to