You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2006/03/24 18:27:16 UTC
svn commit: r388583 [2/2] - in /beehive/trunk/netui:
src/pageflow/org/apache/beehive/netui/script/
src/pageflow/org/apache/beehive/netui/script/common/
src/pageflow/org/apache/beehive/netui/script/common/bundle/
src/pageflow/org/apache/beehive/netui/sc...
Copied: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/MapFacade.java (from r387052, beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/AbstractAttributeMap.java)
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/MapFacade.java?p2=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/MapFacade.java&p1=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/AbstractAttributeMap.java&r1=387052&r2=388583&rev=388583&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/AbstractAttributeMap.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/MapFacade.java Fri Mar 24 09:27:11 2006
@@ -22,85 +22,115 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.Iterator;
+import java.util.Collections;
/**
- *
+ * Facade used to put a {@link Map} API atop another object. For example, a sublcass might allow
+ * the {@link javax.servlet.http.HttpSession} to be treated like a Map for purposes of referencing session
+ * attributes from expressions.
*/
-public abstract class AbstractAttributeMap
+public abstract class MapFacade
implements Map {
private Map _map = null;
+ /**
+ * Subclasses should implement this method in order to get a value from the
+ * backing object.
+ * @param key the key of the object
+ * @return the value associated with the <code>key</code>.
+ */
protected abstract Object getValue(Object key);
+ /**
+ * Subclasses should implement this method in order to set a value in
+ * the backing object.
+ * @param key the key of the object
+ * @param value the value to associate with the key
+ * @return the previous value associated with this key or <code>null</code> if no value was associated
+ */
protected abstract Object putValue(Object key, Object value);
- protected abstract Enumeration getKeysEnumeration();
+ /**
+ * Get an {@link Enumeration} of the keys associated with a backing object. Note,
+ * an {@link Enumeration} is used here because many web-based attribute maps
+ * expose their list of keys only as enumeration objects.
+ * @return the {@link Enumeration} of keys available from the backing object
+ */
+ protected abstract Iterator getKeys();
+ /*--------------------------------------------------------------------------
+
+ Implementation of the {@link Map} interface.
+
+ -------------------------------------------------------------------------- */
public void clear() {
}
public boolean containsKey(Object key) {
- return (getValue(key) != null);
+ return getValue(key) != null;
+ }
+
+ public Object get(Object key) {
+ return getValue(key);
+ }
+
+ public Object put(Object key, Object value) {
+ return putValue(key, value);
}
public boolean containsValue(Object key) {
+ assert getMap() != null;
return getMap().containsValue(key);
}
public Set entrySet() {
- return getMap().entrySet();
- }
-
- public Object get(Object key) {
- return getValue(key);
+ assert getMap() != null;
+ return Collections.unmodifiableSet(getMap().entrySet());
}
public boolean isEmpty() {
+ assert getMap() != null;
return getMap().isEmpty();
}
public Set keySet() {
- return getMap().keySet();
- }
-
- public Object put(Object key, Object value) {
- return putValue(key, value);
+ assert getMap() != null;
+ return Collections.unmodifiableSet(getMap().keySet());
}
public void putAll(Map t) {
+ assert getMap() != null;
getMap().putAll(t);
}
public Object remove(Object key) {
+ assert getMap() != null;
return getMap().remove(key);
}
public int size() {
+ assert getMap() != null;
return getMap().size();
}
public Collection values() {
- return getMap().values();
+ assert getMap() != null;
+ return Collections.unmodifiableCollection(getMap().values());
}
private Map getMap() {
- if(_map == null)
- _map = convertToMap();
-
- return _map;
- }
-
- private Map convertToMap() {
- if(_map == null)
+ if(_map == null) {
_map = new HashMap();
- Enumeration keys = getKeysEnumeration();
- while(keys.hasMoreElements()) {
- Object key = keys.nextElement();
- _map.put(key, getValue(key));
+ Iterator keys = getKeys();
+ assert keys != null;
+ while(keys.hasNext()) {
+ Object key = keys.next();
+ _map.put(key, getValue(key));
+ }
}
-
return _map;
}
}
Propchange: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/MapFacade.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java?rev=388583&r1=388582&r2=388583&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/ParseUtils.java Fri Mar 24 09:27:11 2006
@@ -36,57 +36,62 @@
/**
*
*/
-public class ParseUtils {
+public final class ParseUtils {
private static final Logger LOGGER = Logger.getInstance(ParseUtils.class);
-
- private static final HashMap/*<String, ParsedExpression>*/ PARSED_CACHE = new HashMap/*<String, ParsedExpression>*/();
+ private static final HashMap/*<String, ParsedExpression>*/ PARSED_CACHE = new HashMap();
/* do not construct */
- private ParseUtils() {}
+ private ParseUtils() {
+ }
- public static final ParsedExpression parse(String exprStr) {
- ParsedExpression pe = (ParsedExpression) PARSED_CACHE.get(exprStr);
+ /**
+ * Parse the givne String into a {@link ParsedExpression}.
+ * @param expression the expression
+ * @return the parsed expression
+ */
+ public static ParsedExpression parse(String expression) {
+ ParsedExpression pe = (ParsedExpression)PARSED_CACHE.get(expression);
if(pe != null)
return pe;
try {
- NetUIELParser learn = new NetUIELParser(new StringReader(exprStr));
+ NetUIELParser learn = new NetUIELParser(new StringReader(expression));
ParsedExpression expr = learn.parse();
expr.seal();
/* infrequent; this should only happen when there is a cache miss */
synchronized(PARSED_CACHE) {
- PARSED_CACHE.put(exprStr, expr);
+ PARSED_CACHE.put(expression, expr);
}
return expr;
} catch(ParseException e) {
- String msg = "Error occurred parsing expression \"" + exprStr + "\".";
+ String msg = "Error occurred parsing expression \"" + expression + "\".";
LOGGER.error(msg, e);
throw new ExpressionParseException(msg, e);
} catch(TokenMgrError tm) {
- String msg = "Error occurred parsing expression \"" + exprStr + "\".";
+ String msg = "Error occurred parsing expression \"" + expression + "\".";
LOGGER.error(msg, tm);
throw new ExpressionParseException(msg, tm);
}
}
- public static final Object evaluate(String exprStr, NetUIVariableResolver vr) {
+ public static Object evaluate(String exprStr, NetUIVariableResolver vr) {
ParsedExpression expr = parse(exprStr);
assert expr != null;
return expr.evaluate(vr);
}
- public static final void update(String exprStr, Object value, NetUIVariableResolver vr) {
+ public static void update(String exprStr, Object value, NetUIVariableResolver vr) {
ParsedExpression expr = parse(exprStr);
assert expr != null;
expr.update(value, vr);
}
- public static final Class getPropertyType(Object value, String name, PropertyCache cache) {
+ public static Class getPropertyType(Object value, String name, PropertyCache cache) {
assert value != null;
assert cache != null;
@@ -105,7 +110,7 @@
}
}
- public static final Object getProperty(Object value, String name, PropertyCache cache) {
+ public static Object getProperty(Object value, String name, PropertyCache cache) {
assert value != null;
assert cache != null;
Copied: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMapFacade.java (from r387052, beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java)
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMapFacade.java?p2=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMapFacade.java&p1=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java&r1=387052&r2=388583&rev=388583&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMap.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMapFacade.java Fri Mar 24 09:27:11 2006
@@ -17,31 +17,46 @@
*/
package org.apache.beehive.netui.script.el.util;
-import java.util.Enumeration;
+import java.util.Iterator;
import javax.servlet.ServletRequest;
+import org.apache.beehive.netui.util.iterator.EnumerationIterator;
+
/**
- *
+ * Class that puts a {@link java.util.Map} facade atop a {@link ServletRequest}'s attribute map.
*/
-public class RequestAttributeMap
- extends AbstractAttributeMap
- implements BindingContext {
+public class RequestAttributeMapFacade
+ extends MapFacade
+ implements WrappedObject {
private ServletRequest _request = null;
- public RequestAttributeMap(ServletRequest request) {
+ public RequestAttributeMapFacade(ServletRequest request) {
_request = request;
}
+ /**
+ * Implementation of the {@link WrappedObject} API that allows the caller to discover the
+ * backing object.
+ *
+ * @return the backing object
+ */
public Object unwrap() {
return _request;
}
protected Object getValue(Object key) {
+ if(key == null)
+ return null;
+
+ assert _request != null;
return _request.getAttribute(key.toString());
}
protected Object putValue(Object key, Object value) {
+ assert key != null;
+ assert _request != null;
+
String strKey = key.toString();
Object prev = _request.getAttribute(strKey);
@@ -50,7 +65,7 @@
return prev;
}
- protected Enumeration getKeysEnumeration() {
- return _request.getAttributeNames();
+ protected Iterator getKeys() {
+ return new EnumerationIterator(_request.getAttributeNames());
}
}
Propchange: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/RequestAttributeMapFacade.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMapFacade.java (from r387052, beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java)
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMapFacade.java?p2=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMapFacade.java&p1=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java&r1=387052&r2=388583&rev=388583&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMap.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMapFacade.java Fri Mar 24 09:27:11 2006
@@ -17,27 +17,39 @@
*/
package org.apache.beehive.netui.script.el.util;
-import java.util.Enumeration;
+import java.util.Iterator;
import javax.servlet.http.HttpSession;
+import org.apache.beehive.netui.util.iterator.EnumerationIterator;
+
/**
- *
+ * Class that puts a {@link java.util.Map} facade atop a {@link HttpSession}'s attribute map.
*/
-public class SessionAttributeMap
- extends AbstractAttributeMap
- implements BindingContext {
+public class SessionAttributeMapFacade
+ extends MapFacade
+ implements WrappedObject {
private HttpSession _session = null;
- public SessionAttributeMap(HttpSession session) {
- this._session = session;
+ public SessionAttributeMapFacade(HttpSession session) {
+ _session = session;
}
+ /**
+ * Implementation of the {@link WrappedObject} API that allows the caller to discover the
+ * backing object.
+ *
+ * @return the backing object
+ */
public Object unwrap() {
return _session;
}
protected Object getValue(Object key) {
+ if(key == null)
+ return null;
+
+ assert _session != null;
return _session.getAttribute(key.toString());
}
@@ -50,7 +62,7 @@
return prev;
}
- protected Enumeration getKeysEnumeration() {
- return _session.getAttributeNames();
+ protected Iterator getKeys() {
+ return new EnumerationIterator(_session.getAttributeNames());
}
}
Propchange: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/SessionAttributeMapFacade.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/WrappedObject.java (from r387052, beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/BindingContext.java)
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/WrappedObject.java?p2=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/WrappedObject.java&p1=beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/BindingContext.java&r1=387052&r2=388583&rev=388583&view=diff
==============================================================================
--- beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/BindingContext.java (original)
+++ beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/WrappedObject.java Fri Mar 24 09:27:11 2006
@@ -20,7 +20,7 @@
/**
*
*/
-public interface BindingContext {
+public interface WrappedObject {
public Object unwrap();
}
Propchange: beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/script/el/util/WrappedObject.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java?rev=388583&r1=388582&r2=388583&view=diff
==============================================================================
--- beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java (original)
+++ beehive/trunk/netui/src/util/org/apache/beehive/netui/util/iterator/EnumerationIterator.java Fri Mar 24 09:27:11 2006
@@ -42,7 +42,7 @@
}
public Object next() {
- if(_enum == null || hasNext() == false)
+ if(_enum == null || !hasNext())
throw new NoSuchElementException(Bundle.getErrorString("IteratorFactory_Iterator_noSuchElement"));
else return _enum.nextElement();
}
Modified: beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java?rev=388583&r1=388582&r2=388583&view=diff
==============================================================================
--- beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java (original)
+++ beehive/trunk/netui/test/src/junitTests/org/apache/beehive/netui/test/script/ExpressionUpdateTest.java Fri Mar 24 09:27:11 2006
@@ -118,15 +118,11 @@
String expr = (String)data[i][0];
Object act = (Object)data[i][1];
- System.out.println("=========================== ????????????? form: " + getActionForm());
-
evaluateUpdateExpression(expr, act, request, response, getActionForm(), false);
-
Object foo = evaluateExpression(expr, getPageContext());
-
assertTrue(act.equals(foo));
- if(_logger.isDebugEnabled()) _logger.debug("returned value: " + evaluateExpression(expr, getPageContext()));
+ _logger.debug("returned value: " + evaluateExpression(expr, getPageContext()));
}
// primitive int test
Modified: beehive/trunk/netui/test/webapps/drt/testRecorder/tests/CtBindingReport.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/CtBindingReport.xml?rev=388583&r1=388582&r2=388583&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/testRecorder/tests/CtBindingReport.xml (original)
+++ beehive/trunk/netui/test/webapps/drt/testRecorder/tests/CtBindingReport.xml Fri Mar 24 09:27:11 2006
@@ -1,73 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
-<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
- <ses:sessionName>CtBindingReport</ses:sessionName>
- <ses:tester>rich</ses:tester>
- <ses:startDate>26 May 2005, 04:07:04.215 PM MDT</ses:startDate>
- <ses:description>Normal errors reported by the BindingUpdateErrors tag.</ses:description>
- <ses:tests>
- <ses:test>
- <ses:testNumber>1</ses:testNumber>
- <ses:request>
- <ses:protocol>HTTP</ses:protocol>
- <ses:protocolVersion>1.1</ses:protocolVersion>
- <ses:host>localhost</ses:host>
- <ses:port>8080</ses:port>
- <ses:uri>/coreWeb/coretags/binding/report/Controller.jpf</ses:uri>
- <ses:method>GET</ses:method>
- <ses:parameters/>
- <ses:cookies>
- <ses:cookie>
- <ses:name>JSESSIONID</ses:name>
- <ses:value>BCA7BC08EC3F8A8A81D0B47F32E2297C</ses:value>
- </ses:cookie>
- <ses:cookie>
- <ses:name>nde-textsize</ses:name>
- <ses:value>16px</ses:value>
- </ses:cookie>
- </ses:cookies>
- <ses:headers>
- <ses:header>
- <ses:name>accept</ses:name>
- <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>accept-charset</ses:name>
- <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>accept-encoding</ses:name>
- <ses:value>gzip,deflate</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>accept-language</ses:name>
- <ses:value>en-us,en;q=0.5</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>connection</ses:name>
- <ses:value>keep-alive</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>cookie</ses:name>
- <ses:value>JSESSIONID=BCA7BC08EC3F8A8A81D0B47F32E2297C; nde-textsize=16px</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>host</ses:name>
- <ses:value>localhost:8080</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>keep-alive</ses:name>
- <ses:value>300</ses:value>
- </ses:header>
- <ses:header>
- <ses:name>user-agent</ses:name>
- <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</ses:value>
- </ses:header>
- </ses:headers>
- </ses:request>
- <ses:response>
- <ses:statusCode>200</ses:statusCode>
- <ses:reason/>
- <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+<recorderSession xmlns="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+<sessionName>CtBindingReport</sessionName>
+<tester>rich</tester>
+<startDate>24 Mar 2006, 08:16:10.984 AM MST</startDate>
+<description>rich</description>
+<tests>
+<test>
+<testNumber>1</testNumber>
+<request>
+<protocol>HTTP</protocol>
+<protocolVersion>1.1</protocolVersion>
+<host>localhost</host>
+<port>8080</port>
+<uri>/coreWeb/coretags/binding/report/Controller.jpf</uri>
+<method>GET</method>
+<parameters>
+</parameters>
+<cookies>
+<cookie>
+<name>JSESSIONID</name>
+<value>F296B175664AE65D49E7CD4A67E84C4A</value>
+</cookie>
+</cookies>
+<headers>
+<header>
+<name>accept</name>
+<value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</value>
+</header>
+<header>
+<name>accept-charset</name>
+<value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</value>
+</header>
+<header>
+<name>accept-encoding</name>
+<value>gzip,deflate</value>
+</header>
+<header>
+<name>accept-language</name>
+<value>en-us,en;q=0.5</value>
+</header>
+<header>
+<name>connection</name>
+<value>keep-alive</value>
+</header>
+<header>
+<name>cookie</name>
+<value>$Version=0; JSESSIONID=F296B175664AE65D49E7CD4A67E84C4A; $Path=/coreWeb</value>
+</header>
+<header>
+<name>host</name>
+<value>localhost:8080</value>
+</header>
+<header>
+<name>keep-alive</name>
+<value>300</value>
+</header>
+<header>
+<name>testrecorder.playback.testid</name>
+<value>-488ff64a:10a2cd06eed:-7da9</value>
+</header>
+<header>
+<name>user-agent</name>
+<value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</value>
+</header>
+</headers>
+</request>
+<response>
+<statusCode>200</statusCode>
+<reason></reason>
+<responseBody>
+<![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
@@ -105,17 +107,22 @@
<tr><th>Error Number</th><th>Tag Type</th><th colspan="4">Error</th></tr>
<tr><th rowspan="2">1</th><th rowspan="2">TextBox</th><th>Attribute</th><td>dataSource</td>
<th>Expression</th><td>{actionForm.name}</td></tr>
- <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{actionForm.name}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, application, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "name" on a null value object.</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{actionForm.name}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, application, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "name" on a null object.</td></tr>
<tr><th rowspan="2">2</th><th rowspan="2">TextBox</th><th>Attribute</th><td>dataSource</td>
<th>Expression</th><td>{actionForm.type}</td></tr>
- <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{actionForm.type}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, application, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "type" on a null value object.</td></tr>
+ <tr><th valign="top">Message</th><td colspan="3">Caught exception when evaluating expression "{actionForm.type}" with available binding contexts [actionForm, pageFlow, globalApp, request, session, application, pageContext, bundle, container, url, pageInput]. Root cause: java.lang.RuntimeException: Can not evaluate the identifier "type" on a null object.</td></tr>
</table></div>
</body>
-</html>]]></ses:responseBody>
- </ses:response>
- </ses:test>
- </ses:tests>
- <ses:endDate>26 May 2005, 04:07:08.952 PM MDT</ses:endDate>
- <ses:testCount>1</ses:testCount>
-</ses:recorderSession>
+</html>]]>
+</responseBody>
+</response>
+<testResults><testStatus>fail</testStatus>
+</testResults></test>
+</tests>
+<endDate>24 Mar 2006, 08:16:11.515 AM MST</endDate>
+<sessionStatus>fail</sessionStatus>
+<testCount>1</testCount>
+<passedCount>0</passedCount>
+<failedCount>1</failedCount>
+</recorderSession>