Hi,
I have a program that dynamically generates XML content and to integrate
it with Cocoon 2 I have tried to write my own generator. But every time I
try to test it, I get a java.lang.NoClassDefFoundError:
org/apache/cocoon/generation/AbstractGenerator
I guess it has something to do with an incorrect classpath, but I have
tried a lot and haven't been able to solve it.
---o---
My setup:
DEC Alpha Personal Workstation 500a
Redhat Linux 7.1
Jakarta Tomcat 3.2.3
Cocoon 2.0.1
Compaq JDK for Alpha, version 1.3.1-1
Output of java -version
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition
Classic VM (build 1.3.1-1, native threads, jit)
---o---
I made following changes to the root sitemap to test my generator:
In <map:generators> added:
<map:generator name="rmigen" src="rmitest.Client"/>
In a <map:pipeline> element added:
<map:match pattern="rmitest">
<map:generate type="rmigen"/>
<map:serialize type="xml"/>
</map:match>
Then I stopped Tomcat (and thus Cocoon), removed the Cocoon-directory in
the tomcat work directory, adjusted the classpath so the class
rmitest.Client would be found and then restarted Tomcat.
---o---
I then tried to access http://localhost:8080/cocoon/rmitest but that
resulted in a 'fatal error'. Looking in sitemap.log I found the following:
ERROR (2002-03-27) 23:21.40:190 [sitemap] (/cocoon/)
Thread-23/Handler: Error compiling sitemap
java.lang.NoClassDefFoundError:
org/apache/cocoon/generation/AbstractGenerator
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java, Compiled
Code)
at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java,
Compiled Code)
at java.net.URLClassLoader.defineClass(URLClassLoader.java,
Compiled Code)
at java.net.URLClassLoader.access$100(URLClassLoader.java,
Compiled Code)
at java.net.URLClassLoader$1.run(URLClassLoader.java, Compiled
Code)
at java.security.AccessController.doPrivileged(Native Method)
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.tomcat.loader.AdaptiveClassLoader.loadClass(AdaptiveClassLoader.java,
Compiled Code)
at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled
Code)
at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled
Code)
at org.apache.cocoon.util.ClassUtils.loadClass(ClassUtils.java,
Compiled Code)
at
org.apache.cocoon.sitemap.AbstractSitemap.load_component(AbstractSitemap.java,
Compiled Code)
at
org.apache.cocoon.www.sitemap_xmap$Configurer.configGenerators(sitemap_xmap.java,
Compiled Code)
at org.apache.cocoon.www.sitemap_xmap.configure(sitemap_xmap.java,
Compiled Code)
at
org.apache.avalon.excalibur.component.DefaultComponentFactory.newInstance(DefaultComponentFactory.java,
Compiled Code)
at
org.apache.avalon.excalibur.component.ThreadSafeComponentHandler.initialize(ThreadSafeComponentHandler.java,
Compiled Code)
at
org.apache.cocoon.components.language.generator.GeneratorSelector.addGenerator(GeneratorSelector.java,
Compiled Code)
at
org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.addCompiledComponent(ProgramGeneratorImpl.java,
Compiled Code)
at
org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.generateResource(ProgramGeneratorImpl.java,
Compiled Code)
at
org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.createResource(ProgramGeneratorImpl.java,
Compiled Code)
at
org.apache.cocoon.components.language.generator.ProgramGeneratorImpl.load(ProgramGeneratorImpl.java,
Compiled Code)
at org.apache.cocoon.sitemap.Handler.run(Handler.java, Compiled
Code)
at java.lang.Thread.run(Thread.java:484)
---o---
The following is the code from my generator
package rmitest;
import java.io.IOException;
import java.io.StringReader;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.generation.AbstractGenerator;
public class Client extends AbstractGenerator {
public void generate() throws IOException, SAXException, ProcessingException
{
String message = "<leeg/>";
XMLReader xmlreader = new org.apache.xerces.parsers.SAXParser();
xmlreader.setContentHandler(super.xmlConsumer);
InputSource source = new InputSource(new StringReader(message));
xmlreader.parse(source);
}
}
---o---
To start Tomcat I use the following script:
(everything actually on one line, but here on multiple lines for clarity)
(large heapsize is so that fop won't give a java.lang.OutOfMemoryError)
java -Xmx256217728
-cp /usr/local/jakarta-tomcat-3.2.3/classes:
/usr/local/jakarta-tomcat-3.2.3/lib/ant.jar:
/usr/local/jakarta-tomcat-3.2.3/lib/jasper.jar:
/usr/local/jakarta-tomcat-3.2.3/lib/servlet.jar:
/usr/local/jakarta-tomcat-3.2.3/lib/webserver.jar:
/usr/local/jakarta-tomcat-3.2.3/lib/xercesImpl-2.0.0.jar:
/usr/local/jakarta-tomcat-3.2.3/lib/xml-apis.jar:
/usr/local/jakarta-tomcat-3.2.3/lib/zparser.jar:
/usr/java/jdk1.3.1/lib/tools.jar:
/home/erwin/public_html/thesis/coc2/src/be/ac/kuleuven/cs/rmitest/compiled/
-Dtomcat.home=/usr/local/jakarta-tomcat-3.2.3 org.apache.tomcat.startup.Tomcat
The last path in the classpath is the location of the generator
(rmitest/Client.class thus).
---o---
I use the following command to compile my generator:
javac -classpath .:jar/xerces.jar:
/usr/local/jakarta-tomcat-3.2.3/webapps/cocoon/WEB-INF/lib/cocoon-2.0.1.jar:
/usr/local/jakarta-tomcat-3.2.3/webapps/cocoon/WEB-INF/lib/avalon-framework-4.1.1.jar:
/usr/local/jakarta-tomcat-3.2.3/webapps/cocoon/WEB-INF/lib/avalon-excalibur-4.1.jar
-d compiled/ rmitest/Client.java
---o---
Well, the obvious question is: how can I get my generator to work?
Have I forgotten/overlooked something or what am I doing wrong?
Tnx in advance.
---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>
To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>