Thank you all.  I went with Option 3 since the problem didn't seem to be
bubbling into our Dev environment and I am only seeing it on my local box.
For completness sake, I did notice that the line
  d.setClassLoader(Thread.currentThread.getContex
>
> tClassLoader())


should be  Thread.currentThread(), but again thank you very much for the
help.

Michael



On 4/14/06, Simon Kitching <[EMAIL PROTECTED]> wrote:
>
> Hi Michael,
>
> I think James is probably right.
>
> By default, Digester will look for classes using the same Classloader
> that loaded the Digester class. This means that if the
> commons-digester.jar file is in some container-level dir (rather than in
> WEB-INF/lib or similar) then it can't see that class.
>
> Option 1: put commons-digester.jar in the WEB-INF/lib (or equivalent) of
> your project. This is the cleanest solution, but it does require that
> "child-first" classloading is selected.
>
> Option 2: Tell digester to use the context classloader:
>   Digester d = new Digester();
>   d.setUseContextClassLoader(true);
>
> Option 3: Set the classloader explicitly:
>   Digester d = new Digester();
>   d.setClassLoader(Thread.currentThread.getContextClassLoader())
>   // this is equivalent to the above, assuming that the current
>   // class is from the webapp/ejb
>   // d.setClassLoader(this.getClass().getClassLoader());
>
> Regards,
>
> Simon
>
> On Fri, 2006-04-14 at 15:42 -0500, Michael Rasmussen wrote:
> > That line of code appears to be working properly.  I do not get a
> > ClassNotFoundException on the call to the below code.  Any thoughts on
> why
> > this might be occurring?  More information on my environment
> >
> > IBM JDK 1.3 WebSphere 5.0
> >
> > Thanks,
> > Michael
> >
> > On 4/14/06, James Carman <[EMAIL PROTECTED]> wrote:
> > >
> > > Try this:
> > >
> > > Thread.currentThread().getContextClassLoader().loadClass(
> > > "mycompany.service.ups.dto.UPSResponseDTO" )
> > >
> > > Digester, by default, uses the thread context classloader.  So, if it
> > > can't
> > > find the class, then Digester can't instantiate it.  You can
> optionally
> > > tell
> > > Digester what classloader to use by calling setClassLoader().  Hope
> that
> > > helps!
> > >
> > > James
> > >
> > > -----Original Message-----
> > > From: Michael Rasmussen [mailto:[EMAIL PROTECTED]
> > > Sent: Friday, April 14, 2006 3:49 PM
> > > To: commons-user@jakarta.apache.org
> > > Subject: ClassNotFound [digester]
> > >
> > > Hello,
> > >   I am working with digester and when executing this line of code
> > >
> > > upsResponseDTO = xmlDigester.parse(new ByteArrayInputStream(
> > > upsResponse.getBytes()));
> > >
> > > I get a ClassNotFoundException in digester
> > >
> > > org.apache.commons.digester.Digester  TRAS0014I: The following
> exception
> > > was
> > > logged java.lang.ClassNotFoundException:
> > > mycompany.service.ups.dto.UPSResponseDTO
> > >     at java.net.URLClassLoader.findClass(URLClassLoader.java(Compiled
> > > Code))
> > >     at java.lang.ClassLoader.loadClass(ClassLoader.java(Compiled
> Code))
> > >     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java
> (Compiled
> > > Code))
> > >     at java.lang.ClassLoader.loadClass(ClassLoader.java(Compiled
> Code))
> > >     at org.apache.commons.digester.ObjectCreateRule.begin(
> > > ObjectCreateRule.java:204)
> > >     at org.apache.commons.digester.Rule.begin(Rule.java:152)
> > >     at org.apache.commons.digester.Digester.startElement(Digester.java
> > > :1286)
> > >     at org.apache.xerces.parsers.AbstractSAXParser.startElement(
> > > AbstractSAXParser.java(Compiled Code))
> > >     at org.apache.xerces.impl.XMLNamespaceBinder.startElement(
> > > XMLNamespaceBinder.java(Compiled Code))
> > >     at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(
> > > XMLDTDValidator.java(Compiled Code))
> > >     at
> > > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement
> (
> > > XMLDocumentFragmentScannerImpl.java(Compiled Code))
> > >     at
> > >
> > >
> org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElem
> > > entHook
> > > (XMLDocumentScannerImpl.java:929)
> > >     at
> > >
> > >
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatc
> > > her.dispatch
> > > (XMLDocumentFragmentScannerImpl.java(Compiled Code))
> > >     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(
> > > XMLDocumentFragmentScannerImpl.java(Compiled Code))
> > >     at org.apache.xerces.parsers.StandardParserConfiguration.parse(
> > > StandardParserConfiguration.java:525)
> > >     at org.apache.xerces.parsers.StandardParserConfiguration.parse(
> > > StandardParserConfiguration.java:581)
> > >     at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
> > >     at org.apache.xerces.parsers.AbstractSAXParser.parse(
> > > AbstractSAXParser.java:1158)
> > >     at org.apache.commons.digester.Digester.parse(Digester.java:1591)
> > >     at mycompany.service.ups.client.UPSXmlDigester.parse(
> > > UPSXmlDigester.java
> > > :84)
> > >
> > >
> > > I can execute the following line in the same JVM instance with no
> > > problems.
> > >
> > > UPSResponseDTO upsRp = new UPSResponseDTO();
> > >
> > > I have verified that the import is the same as the ClassNotFound
> > >
> > > import mycompany.service.ups.dto.UPSResponseDTO;
> > >
> > > Is it possible that digester uses a different classpath or classloaded
> for
> > > the classloading it does?  I'm a little confused here (Actually very
> > > confused)
> > >
> > > Thanks,
> > > Michael
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to