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]>

Reply via email to