You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2002/08/20 00:36:15 UTC
cvs commit: jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold Resources.properties ProcessDispatchAction.java BaseAction.java
husted 2002/08/19 15:36:15
Modified: contrib/scaffold/src/java/org/apache/struts/scaffold
Resources.properties ProcessDispatchAction.java
BaseAction.java
Log:
+ Resources.properties: Conform with latest Token class.
+ ProcessDispatchAction: Improve exception handling.
+ BaseAction: Update to better handle exceptions with null message.
Revision Changes Path
1.2 +32 -2 jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/Resources.properties
Index: Resources.properties
===================================================================
RCS file: /home/cvs/jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/Resources.properties,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Resources.properties 14 Aug 2002 18:30:08 -0000 1.1
+++ Resources.properties 19 Aug 2002 22:36:15 -0000 1.2
@@ -5,10 +5,40 @@
# --!! YOU MUST COPY THESE TO YOUR APPLICATION'S FILE !!--
# -- See also constants in lang/Tokens --
#
+#
+errors.header=
+errors.footer=
+error.cancel=Operation cancelled.
+error.detail={0}
+error.general=The process did not complete. Details should follow.
+error.token=Request could not be completed. Operation is not in sequence.
+error.dispatch=Process could not be dispatched. Path: [{0}]. Parameter: [{1}].
+error.dispatch.return=The return value of the process is not correct. Path: [{0}]. Parameter: [{1}].
+# -- validator --
+errors.required={0} is required.
+errors.minlength={0} can not be less than {1} characters.
+errors.maxlength={0} can not be greater than {1} characters.
+errors.invalid={0} is invalid.
+errors.byte={0} must be an byte.
+errors.short={0} must be an short.
+errors.integer={0} must be an integer.
+errors.long={0} must be an long.
+errors.float={0} must be an float.
+errors.double={0} must be an double.
+errors.date={0} is not a date.
+errors.range={0} is not in the range {1} through {2}.
+errors.creditcard={0} is not a valid credit card number.
+errors.email={0} is an invalid e-mail address.
# -- data --
data.access.denied=Access denied.
data.access.error=Unable to access database.
data.access.empty=Requested records were not found.
data.record.inserted=Record {0} inserted.
data.record.updated=Record {0} updated.
-data.record.deleted=Record {0} deleted.
\ No newline at end of file
+data.record.deleted=Record {0} deleted.
+data.record.recycled=Record {0} marked for deletion.
+data.record.restored=Record {0} restored.
+data.transfer.error=Unable to transfer data.
+# -- process --
+process.complete=Process complete.
+process.missing.parameter=A required parameter is missing.
1.3 +46 -2 jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/ProcessDispatchAction.java
Index: ProcessDispatchAction.java
===================================================================
RCS file: /home/cvs/jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/ProcessDispatchAction.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ProcessDispatchAction.java 16 Aug 2002 22:29:24 -0000 1.2
+++ ProcessDispatchAction.java 19 Aug 2002 22:36:15 -0000 1.3
@@ -4,6 +4,7 @@
import java.io.IOException;
import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
@@ -35,6 +36,7 @@
import org.apache.commons.scaffold.lang.Tokens;
import org.apache.commons.scaffold.util.ProcessBean;
import org.apache.commons.scaffold.util.ProcessResult;
+import org.apache.commons.scaffold.util.ProcessResultBase;
import org.apache.commons.scaffold.util.ResultList;
import org.apache.commons.scaffold.util.ResultListBase;
@@ -58,6 +60,19 @@
private static final Class types[] = { Object.class };
+ /**
+ * Error handler.
+ * Posts a message template and two parameters in a ProcessResult.
+ */
+ public void processError(ProcessResult result, String template,
+ ActionMapping mapping) {
+ result = new ProcessResultBase(this);
+ result.addMessage(template);
+ result.addMessage(mapping.getPath());
+ result.addMessage(mapping.getParameter());
+ }
+
+
// --------------------------------------------------------- Public Methods
/**
@@ -128,7 +143,36 @@
Method method = dataBean.getClass().getMethod(tokens[1],types);
Object args[] = { properties };
- ProcessResult result = (ProcessResult) method.invoke(dataBean,args);
+
+ ProcessResult result = null;
+
+ try {
+
+ result = (ProcessResult) method.invoke(dataBean,args);
+
+ }
+
+ catch (ClassCastException e) {
+
+ processError(result,Tokens.ERROR_DISPATCH_RETURN,mapping);
+ }
+
+ catch (IllegalAccessException e) {
+
+ processError(result,Tokens.ERROR_DISPATCH_RETURN,mapping);
+ }
+
+ catch (InvocationTargetException e) {
+
+ // Rethrow the target exception if possible so that the
+ // exception handling machinery can deal with it
+ Throwable t = e.getTargetException();
+ if (t instanceof Exception) {
+ throw ((Exception) t);
+ } else {
+ processError(result,Tokens.ERROR_DISPATCH,mapping);
+ }
+ }
// Execute business logic, using map
checkOutcome(mapping,request,result);
1.2 +33 -6 jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/BaseAction.java
Index: BaseAction.java
===================================================================
RCS file: /home/cvs/jakarta-struts/contrib/scaffold/src/java/org/apache/struts/scaffold/BaseAction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- BaseAction.java 14 Aug 2002 18:30:09 -0000 1.1
+++ BaseAction.java 19 Aug 2002 22:36:15 -0000 1.2
@@ -29,9 +29,10 @@
import org.apache.struts.util.MessageResources;
-import org.apache.commons.scaffold.lang.ChainedException;
+import org.apache.commons.scaffold.lang.BaseException;
import org.apache.commons.scaffold.lang.Log;
import org.apache.commons.scaffold.lang.Tokens;
+import org.apache.commons.scaffold.text.ConvertUtils;
/**
@@ -668,9 +669,22 @@
/**
+ * Token to print before short description
+ * of an exception.
+ */
+ private static final String ERROR = " ERROR: ";
+
+ /**
+ * Token to print between short and long description
+ * of an exception.
+ */
+ private static final String DETAILS = " DETAILS: ";
+
+
+ /**
* Process the exception handling for this Action.
*
- * If Exception is subclass of ChainedException, will
+ * If Exception is subclass of BaseException, will
* report on everything in chain.
*
* Default behaviour should suffice for most circumstances.
@@ -684,6 +698,7 @@
* @param response The response we are creating
* @param errors Our ActionErrors collection
* @param exception The exception we are catching
+ * @todo Use a StringBufferOUTPUTStream to capture trace for error queue
*/
protected void catchException(
ActionMapping mapping,
@@ -691,6 +706,7 @@
HttpServletRequest request,
HttpServletResponse response) {
+
// Retrieve, log and print to error console
Exception exception = getException(request);
servlet.log(Log.ACTION_EXCEPTION, exception);
@@ -705,12 +721,22 @@
// If chained, descend down chain
// appending messages to StringBuffer
StringBuffer sb = new StringBuffer();
- if (exception instanceof ChainedException) {
- ChainedException e = (ChainedException) exception;
+ if (exception instanceof BaseException) {
+ BaseException e = (BaseException) exception;
e.getMessage(sb);
}
else {
- sb.append(exception.getMessage());
+ sb.append(ConvertUtils.LINE_FEED);
+ sb.append(ERROR);
+ sb.append(exception.toString());
+ String message = exception.getMessage();
+ if (null!=message) {
+ sb.append(ConvertUtils.LINE_FEED);
+ sb.append(DETAILS);
+ sb.append(message);
+ sb.append(ConvertUtils.LINE_FEED);
+ }
+ // :TODO: Use a StringBufferOUTPUTStream to capture trace
}
errors.add(ActionErrors.GLOBAL_ERROR,
@@ -875,6 +901,7 @@
if ((isStruts_1_0()) && (isMessages(request))) {
saveErrors(request,getMessages(request,false));
}
+
return findSuccess(mapping,form,request,response);
} // end execute()
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>