Skocz do zawartości

Jacob

Członkowie
  • Postów

    1
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Jacob

  1.  

    Witam, mam pewien kod który powinien działać jako servlet projektu Apache FOP do konwertowania XML+XSL:fo do postaci PDF, sam od siebie stworzyłem Applet który działa, nawet na serwerze, jednakże problem w nim jest dość specyficzny, tzn. trzeba potwierdzać użycie każdej biblioteki co przy 13 daje ładną liczbę klikania OK...

    Dołączyłem do Eclipse wszelkie potrzebne biblioteki, plik nie pokazuje żadnych błędów, po odpaleniu pliku CreatePDF.java, dostaje komunikat "The selection cannot be launched, and there are no recent launches" Oczywiście sprawdziłem co to za błąd, wchodzę do Run Configurations, wybieram Java Application, no i tu jest pies pogrzebany co wybrać jako main class aby to działało ?

    Poniżej przesyłam kod źródłowy:

    package servlet;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //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.sax.SAXResult;
    
    //FOP
    import org.apache.fop.servlet.ServletContextURIResolver;
    import org.apache.fop.apps.Fop;
    import org.apache.fop.apps.FopFactory;
    import org.apache.fop.apps.MimeConstants;
    
    public class CreatePDF extends HttpServlet {
    
    	private static final long serialVersionUID = 1L;
    
    	private FopFactory fopFactory ;
    
    	private TransformerFactory tFactory ;
    
    	/** URIResolver for use by this servlet */
        protected ServletContextURIResolver uriResolver;
    
    	/**
    	 * Constructor of the object.
    	 */
    	public CreatePDF() {
    		super();
    	}
    
    	/**
    	 * Destruction of the servlet. <br>
    	 */
    	public void destroy() {
    		super.destroy(); // Just puts "destroy" string in log
    		// Put your code here
    	}
    
    	/**
    	 * The doGet method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to get.
    	 *
    	 * @param request the request send by the client to the server
    	 * @param response the response send by the server to the client
    	 * @throws ServletException if an error occurred
    	 * @throws IOException if an error occurred
    	 */
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		try {
    
    			 //Setup a buffer to obtain the content length
    		    ByteArrayOutputStream out = new ByteArrayOutputStream();
    
    		    //tell the FOPFactory object where to look for resources
    		    fopFactory.setURIResolver(uriResolver);
    
    		    //Setup FOP to create a PDF and send it to the out
    		    //ByteArrayOutputStream object
    		    Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
    
    		    //Setup Transformer
    		    //use the uriResolver object to find the XSL style sheet
    		    Source xsltSrc = this.uriResolver.resolve(
    		    	    "servlet-context:/xsl/peopleconvertor.xsl", null);
    
    		    //tell the TransformerFactory where to find resources
    		    tFactory.setURIResolver(uriResolver);
    
    		    Transformer transformer = tFactory.newTransformer(xsltSrc);
    
    		    //tell the Transformer object where to find resources
    		    transformer.setURIResolver(uriResolver);
    
    		    //Make sure the XSL transformation's result is piped through to FOP
    		    Result res = new SAXResult(fop.getDefaultHandler());
    
    		 
    		    //use the uriResolver object to find the xml source file
    		    Source xmlSrc = uriResolver.resolve(
    		    	    "servlet-context:/xml/people.xml", null);
    
    		    //Start the transformation and rendering process
    		    transformer.transform(xmlSrc, res);
    
    		    //Prepare response
    		    response.setContentType("application/pdf");
    		    response.setContentLength(out.size());
    
    		    //Send content to Browser
    		    response.getOutputStream().write(out.toByteArray());
    		    response.getOutputStream().flush();
    
    			} catch (Exception e) {
    
    		          e.printStackTrace(System.err);
    
    		    }
    
    	}
    
    	/**
    	 * The doPost method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to post.
    	 *
    	 * @param request the request send by the client to the server
    	 * @param response the response send by the server to the client
    	 * @throws ServletException if an error occurred
    	 * @throws IOException if an error occurred
    	 */
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet( request, response );
    	}
    
    	/**
    	 * Initialization of the servlet. <br>
    	 *
    	 * @throws ServletException if an error occurs
    	 */
    	public void init() throws ServletException {
    
    		////specify that resources can be found in this Web application
    		uriResolver = new ServletContextURIResolver(getServletContext());
    
    		fopFactory = FopFactory.newInstance();
    
    		tFactory = TransformerFactory.newInstance();
    
    	}
    
    }
×
×
  • Utwórz nowe...