|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.apache.jasper.compiler; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.util.jar.JarFile; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.apache.jasper.compiler.Compiler; import org.openide.ErrorManager; /** * * @author Petr Jiricka */ public class ParserControllerProxy { private JspCompilationContext ctxt; private Compiler compiler; private ParserController pc; boolean isXml; String sourceEnc; private static Method getJarFileM; private static Method resolveFileNameM; private static Method getJspConfigPageEncodingM; private static Method determineSyntaxAndEncodingM; private static Field isXmlF; private static Field sourceEncF; static { initMethodsAndFields(); } /** Creates a new instance of ParserControllerProxy */ public ParserControllerProxy(JspCompilationContext ctxt, Compiler compiler) { this.ctxt = ctxt; this.compiler = compiler; pc = new ParserController(ctxt, compiler); } public static void initMethodsAndFields() { try { // getJarFile method getJarFileM = ParserController.class.getDeclaredMethod("getJarFile", new Class[] {URL.class}); getJarFileM.setAccessible(true); // resolveFileName method resolveFileNameM = ParserController.class.getDeclaredMethod("resolveFileName", new Class[] {String.class}); resolveFileNameM.setAccessible(true); // getJspConfigPageEncoding method getJspConfigPageEncodingM = ParserController.class.getDeclaredMethod("getJspConfigPageEncoding", new Class[] {String.class}); getJspConfigPageEncodingM.setAccessible(true); // determineSyntaxAndEncoding method determineSyntaxAndEncodingM = ParserController.class.getDeclaredMethod("determineSyntaxAndEncoding", new Class[] {String.class, JarFile.class, String.class}); determineSyntaxAndEncodingM.setAccessible(true); // isXML field isXmlF = ParserController.class.getDeclaredField("isXml"); isXmlF.setAccessible(true); // sourceEnc field sourceEncF = ParserController.class.getDeclaredField("sourceEnc"); sourceEncF.setAccessible(true); } catch (NoSuchMethodException e) { ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e); } catch (NoSuchFieldException e) { ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e); } } public void extractSyntaxAndEncoding(String inFileName) throws FileNotFoundException, JasperException, IOException { // If we're parsing a packaged tag file or a resource included by it // (using an include directive), ctxt.getTagFileJar() returns the // JAR file from which to read the tag file or included resource, // respectively. extractSyntaxAndEncoding(inFileName, ctxt.getTagFileJarUrl()); } private void extractSyntaxAndEncoding(String inFileName, URL jarFileUrl) throws FileNotFoundException, JasperException, IOException { try { JarFile jarFile = (JarFile)getJarFileM.invoke(pc, new Object[] {jarFileUrl}); String absFileName = (String)resolveFileNameM.invoke(pc, new Object[] {inFileName}); String jspConfigPageEnc = (String)getJspConfigPageEncodingM.invoke(pc, new Object[] {absFileName}); // Figure out what type of JSP document and encoding type we are // dealing with determineSyntaxAndEncodingM.invoke(pc, new Object[] {absFileName, jarFile, jspConfigPageEnc}); // now the isXml and sourceEnc variables of ParserController have values isXml = ((Boolean)isXmlF.get(pc)).booleanValue(); sourceEnc = (String)sourceEncF.get(pc); } catch (IllegalAccessException e) { ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e); throw new JasperException(e); } catch (InvocationTargetException e) { Throwable r = e.getTargetException(); if (r instanceof RuntimeException) { throw (RuntimeException)r; } if (r instanceof FileNotFoundException) { throw (FileNotFoundException)r; } if (r instanceof JasperException) { throw (JasperException)r; } if (r instanceof IOException) { throw (IOException)r; } ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e); throw new JasperException(e); } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.