# Problem mit FOP in Java Programm



## matzze2000 (13. Nov 2008)

Hallo,

ich habe das Problem, dass irgendwie FOP bei mir nicht richtig funktioniert. Ich habe zum Testen einfach einmal das Beispiel von der FOP Website benutzt und nur leicht geändert:


```
package DataProcessing;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.MimeConstants;

/** 
* Beispiel wie man aus einem XML-file in ein PDF generiert 
*/ 
public class PDFCreator { 

    public PDFCreator() { 
    	
    	try{
    		// Step 1: Construct a FopFactory
    		// (reuse if you plan to render multiple documents!)
    		FopFactory fopFactory = FopFactory.newInstance();

    		// Step 2: Set up output stream.
    		// Note: Using BufferedOutputStream for performance reasons (helpful with FileOutputStreams).
    		OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("C:/Temp/myfile.pdf")));

    		try {
    		  // Step 3: Construct fop with desired output format
    		  Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

    		  // Step 4: Setup JAXP using identity transformer
    		  TransformerFactory factory = TransformerFactory.newInstance();
    		  Transformer transformer = factory.newTransformer(); // identity transformer
    		           
    		  // Step 5: Setup input and output for XSLT transformation 
    		  // Setup input stream
    		  Source src = new StreamSource(new File("C:/Temp/myfile.fo"));

    		  // Resulting SAX events (the generated FO) must be piped through to FOP
    		  Result res = new SAXResult(fop.getDefaultHandler());
    		            
    		  // Step 6: Start XSLT transformation and FOP processing
    		  transformer.transform(src, res);

    		} finally {
    		  //Clean-up
    		  out.close();
    		}
    	}
    	
    	
		catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("File not Found: " + e.toString());
		}
    	  
    	catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("IO Exception: " + e.toString());
		}
    	catch (TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Transformer: " + e.toString());
		}
    	catch (FOPException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("FOP Exception: " + e.toString());
		}
    } 
}
```

Wenn ich das Programm ausführe bekomme ich folgende Fehlermeldung in der Console:


```
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlgraphics/image/loader/ImageContext
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.access$000(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at PDFTest.<init>(PDFTest.java:32)
	at PDFTest.main(PDFTest.java:115)
Caused by: java.lang.ClassNotFoundException: org.apache.xmlgraphics.image.loader.ImageContext
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	... 14 more
```

Habe die Exception mal gegoogled und dazu nur folgendes von jemandem der ein ähnliches Problem hatte (gleiche Exception) gefunden:



> Thanks if you were going to help but I found the problem and if anyone else has a problem I found that it was a problem with the permissions of the installed fop once I changed them to the user and grp of the server everythin g snapped into place.



Aber eigentlich ist die Berechtigung so gesetzt, dass jeder Vollzugriff hat :-\ Hat vielleicht irgend jemand anders ne Idee? (Benutze Vista als OS). Danke schonmal für Hilfe!


----------



## Murray (13. Nov 2008)

Vermutlich musst Du Apache XML Graphics Commons noch installieren bzw. in den Classpath aufnehmen.


----------



## matzze2000 (14. Nov 2008)

Ok, danke für den Hinweis, jetzt funktionierts. Alle benötigten Bibliotheken sind bereits im lib Ordner im FOB Verzeichnis vorhanden. Hab das nur in der installationsanleitung überlesen weil es nicht unter dem Punkt Installation sondern unter System Requirements stand ^^


----------

