2011-11-28 84 views
0

我试图执行以下代码Fop的工厂运行时异常

import java.io.File; 
import java.io.OutputStream;  
//JAXP 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.Source; 
import javax.xml.transform.Result; 
import javax.xml.transform.stream.StreamSource; 
import javax.xml.transform.sax.SAXResult; 

//FOP 
import org.apache.fop.apps.FOUserAgent; 
import org.apache.fop.apps.Fop; 
import org.apache.fop.apps.FopFactory; 
import org.apache.fop.apps.MimeConstants; 

/** 
* This class demonstrates the conversion of an XML file to PDF using * JAXP (XSLT) and FOP (XSL-FO). 
*/ 
public class xml2pd { 

    /** 
    * Main method. 
    * @param args command-line arguments 
    */ 
    public static void main(String[] args) { 
     try { 
      System.out.println("FOP ExampleXML2PDF\n"); 
      System.out.println("Preparing..."); 

      // Setup directories 
      File baseDir = new File("e:"); 
      File outDir = new File(baseDir, "out"); 
      outDir.mkdirs(); 

      // Setup input and output files 
      File xmlfile = new File(baseDir, "ajay.xml"); 
      File xsltfile = new File(baseDir, "test.xsl"); 
      File pdffile = new File(outDir, "ResultXML2PDF.pdf"); 

      System.out.println("Input: XML (" + xmlfile + ")"); 
      System.out.println("Stylesheet: " + xsltfile); 
      System.out.println("Output: PDF (" + pdffile + ")"); 
      System.out.println(); 
      System.out.println("Transforming..."); 

      // configure fopFactory as desired 
      **strong text**FopFactory fopFactory = FopFactory.newInstance(); 

      FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); 
      // configure foUserAgent as desired 

      // Setup output 
      OutputStream out = new java.io.FileOutputStream(pdffile); 
      out = new java.io.BufferedOutputStream(out); 

      try { 
       // Construct fop with desired output format 
       Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out); 
       System.out.println("After MIME_PDF"); 
       // Setup XSLT 
       TransformerFactory factory = TransformerFactory.newInstance(); 
       Transformer transformer = factory.newTransformer(new StreamSource(xsltfile)); 

      // Set the value of a <param> in the stylesheet 
       transformer.setParameter("versionParam", "2.0"); 

       // Setup input for XSLT transformation 
       Source src = new StreamSource(xmlfile); 

       // Resulting SAX events (the generated FO) must be piped through to FOP 
       Result res = new SAXResult(fop.getDefaultHandler()); 

       // Start XSLT transformation and FOP processing 
       transformer.transform(src, res); 
      } finally { 
       out.close(); 
      } 

      System.out.println("Success!"); 
    } catch (Exception e) { 
      e.printStackTrace(System.err); 
      System.exit(-1); 
    } 
} 
} 

(这是从http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleXML2PDF.java?view=markup复制一个例子),但我得到以下运行时错误...

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
at org.apache.fop.apps.FopFactory.<clinit>(FopFactory.java:65) 
at ExampleFO2PDF.<init>(ExampleFO2PDF.java:33) 
at ExampleFO2PDF.main(ExampleFO2PDF.java:116) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
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) 
... 3 more 

任何人都可以帮我解决这个问题吗? 在此先感谢。

回答

0

您需要commons-logging软件包(例如commons-logging-1.0.4.jar)。要做到这一点,只需下载并放入您的classpath