|
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.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import org.apache.jasper.JasperException;
import org.apache.jasper.JspCompilationContext;
import org.openide.ErrorManager;
/** Reflection stuff for org.apache.jasper.compiler.Compiler.
*
* @author Petr Jiricka
*/
public class CompilerHacks {
private Compiler comp;
protected JspCompilationContext ctxt;
private static Field pageInfoF;
private static Field errDispatcherF;
static {
initMethodsAndFields();
}
/** Creates a new instance of CompilerHacks */
public CompilerHacks(JspCompilationContext ctxt) {
this.ctxt = ctxt;
}
static void initMethodsAndFields() {
try {
// pageInfo field
pageInfoF = Compiler.class.getDeclaredField("pageInfo");
pageInfoF.setAccessible(true);
// errDispatcher field
errDispatcherF = Compiler.class.getDeclaredField("errDispatcher");
errDispatcherF.setAccessible(true);
}
catch (NoSuchFieldException e) {
ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e);
}
}
private void setupCompiler() throws JasperException {
if (comp == null) {
comp = ctxt.createCompiler();
setErrDispatcherInCompiler(comp, new ErrorDispatcher(false));
setPageInfoInCompiler(comp, new HackPageInfo(new BeanRepository(
ctxt.getClassLoader(), comp.getErrorDispatcher())));
}
}
Compiler getCompiler() throws JasperException {
setupCompiler();
return comp;
}
private static void setPageInfoInCompiler(Compiler c, PageInfo pageInfo) throws JasperException {
try {
pageInfoF.set(c, pageInfo);
}
catch (IllegalAccessException e) {
throw new JasperException(e);
}
}
private static void setErrDispatcherInCompiler(Compiler c, ErrorDispatcher errDispatcher) throws JasperException {
try {
errDispatcherF.set(c, errDispatcher);
}
catch (IllegalAccessException e) {
throw new JasperException(e);
}
}
/** Hacked PageInfo to get better XML directive data
*/
class HackPageInfo extends PageInfo {
/** Map of prefix -> uri. */
private Map approxXmlPrefixMapper;
HackPageInfo(BeanRepository beanRepository) {
super(beanRepository);
approxXmlPrefixMapper = new HashMap();
}
public void pushPrefixMapping(String prefix, String uri) {
super.pushPrefixMapping(prefix, uri);
if (uri != null) {
approxXmlPrefixMapper.put(prefix, uri);
}
}
Map getApproxXmlPrefixMapper() {
return approxXmlPrefixMapper;
}
}
}
|
| ... 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.