JavacErrorDetailpublic class JavacErrorDetail extends Object Class providing details about a javac compilation error. |
Fields Summary |
---|
private String | javaFileName | private int | javaLineNum | private String | jspFileName | private int | jspBeginLineNum | private StringBuffer | errMsg | private String | jspExtract |
Constructors Summary |
---|
public JavacErrorDetail(String javaFileName, int javaLineNum, StringBuffer errMsg)Constructor.
this.javaFileName = javaFileName;
this.javaLineNum = javaLineNum;
this.errMsg = errMsg;
this.jspBeginLineNum = -1;
| public JavacErrorDetail(String javaFileName, int javaLineNum, String jspFileName, int jspBeginLineNum, StringBuffer errMsg)Constructor.
this(javaFileName, javaLineNum, jspFileName, jspBeginLineNum, errMsg,
null);
| public JavacErrorDetail(String javaFileName, int javaLineNum, String jspFileName, int jspBeginLineNum, StringBuffer errMsg, org.apache.jasper.JspCompilationContext ctxt)
this(javaFileName, javaLineNum, errMsg);
this.jspFileName = jspFileName;
this.jspBeginLineNum = jspBeginLineNum;
if (jspBeginLineNum > 0 && ctxt != null) {
InputStream is = null;
FileInputStream fis = null;
try {
// Read both files in, so we can inspect them
is = ctxt.getResourceAsStream(jspFileName);
String[] jspLines = readFile(is);
fis = new FileInputStream(ctxt.getServletJavaFileName());
String[] javaLines = readFile(fis);
// If the line contains the opening of a multi-line scriptlet
// block, then the JSP line number we got back is probably
// faulty. Scan forward to match the java line...
if (jspLines[jspBeginLineNum-1].lastIndexOf("<%") >
jspLines[jspBeginLineNum-1].lastIndexOf("%>")) {
String javaLine = javaLines[javaLineNum-1].trim();
for (int i=jspBeginLineNum-1; i<jspLines.length; i++) {
if (jspLines[i].indexOf(javaLine) != -1) {
// Update jsp line number
this.jspBeginLineNum = i+1;
break;
}
}
}
// copy out a fragment of JSP to display to the user
StringBuffer fragment = new StringBuffer(1024);
int startIndex = Math.max(0, this.jspBeginLineNum-1-3);
int endIndex = Math.min(
jspLines.length-1, this.jspBeginLineNum-1+3);
for (int i=startIndex;i<=endIndex; ++i) {
fragment.append(i+1);
fragment.append(": ");
fragment.append(jspLines[i]);
fragment.append("\n");
}
jspExtract = fragment.toString();
} catch (IOException ioe) {
// Can't read files - ignore
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ioe) {
// Ignore
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException ioe) {
// Ignore
}
}
}
}
|
Methods Summary |
---|
public java.lang.String | getErrorMessage()Gets the compilation error message.
return this.errMsg.toString();
| public java.lang.String | getJavaFileName()Gets the name of the Java source file in which the compilation error
occurred.
return this.javaFileName;
| public int | getJavaLineNumber()Gets the compilation error line number.
return this.javaLineNum;
| public int | getJspBeginLineNumber()Gets the start line number (in the JSP file) of the JSP element
responsible for the compilation error.
return this.jspBeginLineNum;
| public java.lang.String | getJspExtract()Gets the extract of the JSP that corresponds to this message.
return this.jspExtract;
| public java.lang.String | getJspFileName()Gets the name of the JSP file from which the Java source file was
generated.
return this.jspFileName;
| private java.lang.String[] | readFile(java.io.InputStream s)Reads a text file from an input stream into a String[]. Used to read in
the JSP and generated Java file when generating error messages.
BufferedReader reader = new BufferedReader(new InputStreamReader(s));
List lines = new ArrayList();
String line;
while ( (line = reader.readLine()) != null ) {
lines.add(line);
}
return (String[]) lines.toArray( new String[lines.size()] );
|
|