<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-205</id>
	<title>Nabble - Struts - Dev</title>
	<updated>2009-11-08T16:01:00Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Struts---Dev-f205.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Struts---Dev-f205.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26259403</id>
	<title>[CONF] Confluence Changes in the last 24 hours</title>
	<published>2009-11-08T16:01:00Z</published>
	<updated>2009-11-08T16:01:00Z</updated>
	<author>
		<name>confluence-2</name>
	</author>
	<content type="html">This is a daily summary of all recent changes in Confluence.
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Updated Spaces:
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Directory Studio (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Screenshots edited by &amp;nbsp;seelmann &amp;nbsp;(07:06 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Screenshots&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Screenshots&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Traffic Server (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TS&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Ubuntu edited by &amp;nbsp;zwoop &amp;nbsp;(11:37 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TS/Ubuntu&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TS/Ubuntu&lt;/a&gt;&lt;br&gt;&lt;br&gt;Git edited by &amp;nbsp;zwoop &amp;nbsp;(10:15 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TS/Git&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TS/Git&lt;/a&gt;&lt;br&gt;&lt;br&gt;Subversion created by zwoop (10:04 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TS/Subversion&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TS/Subversion&lt;/a&gt;&lt;br&gt;&lt;br&gt;TrafficServerLogos created by mlibbey (05:32 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TS/TrafficServerLogos&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TS/TrafficServerLogos&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Wookie (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/WOOKIE&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/WOOKIE&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Wookie Plugin Developers Guide edited by &amp;nbsp;scottbw &amp;nbsp;(08:38 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/WOOKIE/Wookie+Plugin+Developers+Guide&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/WOOKIE/Wookie+Plugin+Developers+Guide&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Change your notification preferences: &lt;a href=&quot;http://cwiki.apache.org/confluence/users/viewnotifications.action&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/users/viewnotifications.action&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-CONF--Confluence-Changes-in-the-last-24-hours-tp26259403p26259403.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26251666</id>
	<title>svn commit: r833846 - in /struts/sandbox/trunk/struts2-uel-plugin: ./ src/main/java/org/apache/struts2/uelplugin/ src/main/java/org/apache/struts2/uelplugin/elresolvers/ src/main/java/org/apache/struts2/uelplugin/reflection/ src/main/resources/ src/tes...</title>
	<published>2009-11-08T00:19:00Z</published>
	<updated>2009-11-08T00:19:00Z</updated>
	<author>
		<name>musachy-2</name>
	</author>
	<content type="html">Author: musachy
&lt;br&gt;Date: Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;New Revision: 833846
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=833846&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=833846&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;add test, prevent method evaluation, organize classes
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied, changed from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied, changed from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied, changed from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml
&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/pom.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/pom.xml
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/pom.xml?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/pom.xml?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/pom.xml (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/pom.xml Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,5 +1,4 @@
&lt;br&gt;-&amp;lt;project xmlns=&amp;quot;&lt;a href=&quot;http://maven.apache.org/POM/4.0.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://maven.apache.org/POM/4.0.0&lt;/a&gt;&amp;quot; xmlns:xsi=&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xsi:schemaLocation=&amp;quot;&lt;a href=&quot;http://maven.apache.org/POM/4.0.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://maven.apache.org/POM/4.0.0&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/maven-v4_0_0.xsd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://maven.apache.org/maven-v4_0_0.xsd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;project xmlns=&amp;quot;&lt;a href=&quot;http://maven.apache.org/POM/4.0.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://maven.apache.org/POM/4.0.0&lt;/a&gt;&amp;quot; xmlns:xsi=&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&amp;quot; xsi:schemaLocation=&amp;quot;&lt;a href=&quot;http://maven.apache.org/POM/4.0.0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://maven.apache.org/POM/4.0.0&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://maven.apache.org/maven-v4_0_0.xsd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://maven.apache.org/maven-v4_0_0.xsd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;parent&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.struts&amp;lt;/groupId&amp;gt;
&lt;br&gt;@@ -56,6 +55,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/exclusions&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.struts&amp;lt;/groupId&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;struts2-junit-plugin&amp;lt;/artifactId&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.2.0-SNAPSHOT&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;spring-test&amp;lt;/artifactId&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;${struts2.springPlatformVersion}&amp;lt;/version&amp;gt;
&lt;br&gt;@@ -85,10 +90,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.mortbay.jetty&amp;lt;/groupId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;jsp-2.1&amp;lt;/artifactId&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;6.1.3&amp;lt;/version&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.easymock&amp;lt;/groupId&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;easymock&amp;lt;/artifactId&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.4&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;commons-beanutils&amp;lt;/groupId&amp;gt;
&lt;br&gt;@@ -111,5 +116,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/exclusion&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/exclusions&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;jsp-api&amp;lt;/artifactId&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/dependencies&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;/project&amp;gt;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/BuiltinFunctionMapper.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,18 +1,16 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;-import com.opensymphony.xwork2.TextProviderFactory;
&lt;br&gt;-import com.opensymphony.xwork2.TextProvider;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.LocaleProvider;
&lt;br&gt;-import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;+import com.opensymphony.xwork2.TextProvider;
&lt;br&gt;+import com.opensymphony.xwork2.TextProviderFactory;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;+import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.FunctionMapper;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.Method;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.HashMap;
&lt;br&gt;-
&lt;br&gt;-import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * &amp;lt;p&amp;gt;Builtin function availabe from UEL. Available functions are&amp;lt;/p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -4,7 +4,10 @@
&lt;br&gt;&amp;nbsp;import de.odysseus.el.util.SimpleContext;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.uelplugin.elresolvers.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.el.*;
&lt;br&gt;+import javax.el.BeanELResolver;
&lt;br&gt;+import javax.el.CompositeELResolver;
&lt;br&gt;+import javax.el.FunctionMapper;
&lt;br&gt;+import javax.el.VariableMapper;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;@@ -13,11 +16,13 @@
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;public class CompoundRootELContext extends SimpleContext {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final static BuiltinFunctionMapper BUILTIN_FUNCTION_MAPPER = new BuiltinFunctionMapper();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public CompoundRootELContext(final Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(new CompositeELResolver() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new MethodInvocationGuardELResolver(container));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new CompoundRootELResolver(container));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new ValueStackContextResolver());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new ValueStackContextReferenceELResolver(container));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkBeanELResolver(container));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkListELResolver(container));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkMapELResolver(container));
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/JUELExtensionBuilder.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,16 +1,21 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import de.odysseus.el.misc.TypeConverter;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.misc.NumberOperations;
&lt;br&gt;+import de.odysseus.el.misc.TypeConverter;
&lt;br&gt;+import de.odysseus.el.tree.Bindings;
&lt;br&gt;+import de.odysseus.el.tree.Node;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.impl.Builder;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.impl.Parser;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.impl.Scanner;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.impl.ast.AstBinary;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.impl.ast.AstNode;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.impl.ast.AstUnary;
&lt;br&gt;-import de.odysseus.el.tree.impl.ast.AstIdentifier;
&lt;br&gt;&amp;nbsp;import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import javax.el.ELContext;
&lt;br&gt;+import javax.el.MethodInfo;
&lt;br&gt;+import javax.el.ValueReference;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Plugs into JUEL parser to supper expressions like &amp;quot;#obj&amp;quot;, to provide some level
&lt;br&gt;&amp;nbsp; * of backward compatibility with OGNL
&lt;br&gt;@@ -54,9 +59,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;static Parser.ExtensionHandler SHARP_HANDLER = new Parser.ExtensionHandler(Parser.ExtensionPoint.UNARY) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public AstNode createAstNode(AstNode... children) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//AstIdentifier astIdentifier = (AstIdentifier) children[0];
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ValueStackAstIdentifier valueStackAstIdentifier = new ValueStackAstIdentifier(astIdentifier.getName(), astIdentifier.getIndex());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new AstUnary(children[0], SHARP_OPERATOR);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new DelegateAstNode(children[0]);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -123,3 +126,59 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new ExtendedParser(this, expression);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+class DelegateAstNode extends AstNode {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final AstNode child;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public DelegateAstNode(AstNode child) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.child = child;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void appendStructure(StringBuilder builder, Bindings bindings) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;child.appendStructure(builder, bindings);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object eval(Bindings bindings, ELContext context) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.eval(bindings, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getCardinality() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.getCardinality();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Node getChild(int i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.getChild(i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public MethodInfo getMethodInfo(Bindings bindings, ELContext context, Class&amp;lt;?&amp;gt; returnType, Class&amp;lt;?&amp;gt;[] paramTypes) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.getMethodInfo(bindings, context, returnType, paramTypes);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Class&amp;lt;?&amp;gt; getType(Bindings bindings, ELContext context) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.getType(bindings, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ValueReference getValueReference(Bindings bindings, ELContext context) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.getValueReference(bindings, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object invoke(Bindings bindings, ELContext context, Class&amp;lt;?&amp;gt; returnType, Class&amp;lt;?&amp;gt;[] paramTypes, Object[] paramValues) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.invoke(bindings, context, returnType, paramTypes, paramValues);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isLeftValue() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.isLeftValue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isLiteralText() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.isLiteralText();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isReadOnly(Bindings bindings, ELContext context) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return child.isReadOnly(bindings, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setValue(Bindings bindings, ELContext context, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;child.setValue(bindings, context, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -4,13 +4,10 @@
&lt;br&gt;&amp;nbsp;import de.odysseus.el.tree.TreeBuilder;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.ExpressionFactory;
&lt;br&gt;-import javax.servlet.ServletContext;
&lt;br&gt;&amp;nbsp;import javax.servlet.ServletContextEvent;
&lt;br&gt;&amp;nbsp;import javax.servlet.ServletContextListener;
&lt;br&gt;&amp;nbsp;import java.util.Properties;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import org.apache.struts2.uelplugin.ExpressionFactoryHolder;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Responsible for creating the ExpressionFactory that will be used by the
&lt;br&gt;&amp;nbsp; * UelValueStack
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -9,15 +9,15 @@
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.logging.Logger;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.logging.LoggerFactory;
&lt;br&gt;-import org.apache.struts2.uelplugin.elresolvers.AccessorsContextKey;
&lt;br&gt;+import org.apache.struts2.uelplugin.elresolvers.XWorkValueStackContext;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;&amp;nbsp;import javax.el.ExpressionFactory;
&lt;br&gt;&amp;nbsp;import javax.el.PropertyNotFoundException;
&lt;br&gt;&amp;nbsp;import javax.el.ValueExpression;
&lt;br&gt;+import java.io.Serializable;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.TreeMap;
&lt;br&gt;-import java.io.Serializable;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * A ValueStack that uses Unified EL as the underlying Expression Language.
&lt;br&gt;@@ -95,7 +95,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr = &amp;quot;#{&amp;quot; + expr + &amp;quot;}&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(AccessorsContextKey.class, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(XWorkValueStackContext.class, context);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(XWorkConverter.class, xworkConverter);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(CompoundRoot.class, root);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -195,7 +195,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (expr != null &amp;&amp; !expr.startsWith(&amp;quot;${&amp;quot;) &amp;&amp; !expr.startsWith(&amp;quot;#{&amp;quot;)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr = &amp;quot;#{&amp;quot; + expr + &amp;quot;}&amp;quot;;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(AccessorsContextKey.class, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(XWorkValueStackContext.class, context);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(XWorkConverter.class, xworkConverter);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(CompoundRoot.class, root);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Copied: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java (from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java)
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java&amp;r1=833776&amp;r2=833846&amp;rev=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java&amp;r1=833776&amp;r2=833846&amp;rev=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AbstractELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,26 +1,26 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.ObjectFactory;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.NullHandler;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.ObjectTypeDeterminer;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;-import com.opensymphony.xwork2.ObjectFactory;
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.el.ELResolver;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;-import java.util.Iterator;
&lt;br&gt;+import javax.el.ELResolver;
&lt;br&gt;&amp;nbsp;import java.beans.FeatureDescriptor;
&lt;br&gt;+import java.util.Iterator;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public abstract class AbstractResolver extends ELResolver {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected ReflectionProvider reflectionProvider;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected XWorkConverter xworkConverter;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected NullHandler nullHandler;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected ObjectTypeDeterminer objectTypeDeterminer;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected ObjectFactory objectFactory;
&lt;br&gt;+public abstract class AbstractELResolver extends ELResolver {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected final ReflectionProvider reflectionProvider;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected final XWorkConverter xworkConverter;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected final NullHandler nullHandler;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected final ObjectTypeDeterminer objectTypeDeterminer;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected final ObjectFactory objectFactory;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public AbstractResolver(Container container) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public AbstractELResolver(Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.reflectionProvider = container.getInstance(ReflectionProvider.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.xworkConverter = container.getInstance(XWorkConverter.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.nullHandler = container.getInstance(NullHandler.class, &amp;quot;java.lang.Object&amp;quot;);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,9 +1,9 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;-import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import org.apache.commons.beanutils.BeanUtils;
&lt;br&gt;&amp;nbsp;import org.apache.commons.beanutils.PropertyUtils;
&lt;br&gt;&amp;nbsp;import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;@@ -16,7 +16,7 @@
&lt;br&gt;&amp;nbsp; * An ELResolver that is capable of resolving properties against the
&lt;br&gt;&amp;nbsp; * CompoundRoot if available in the ELContext.
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-public class CompoundRootELResolver extends AbstractResolver {
&lt;br&gt;+public class CompoundRootELResolver extends AbstractELResolver {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public CompoundRootELResolver(Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;@@ -48,7 +48,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return root.get(0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object bean = findObjectForProperty(root, propertyName);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (bean != null) {
&lt;br&gt;@@ -86,7 +86,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CompoundRoot root = (CompoundRoot) context.getContext(CompoundRoot.class);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) context.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) context.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String propertyName = (String) property;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (base == null &amp;&amp; property != null &amp;&amp; root != null) {
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java?rev=833846&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java?rev=833846&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/MethodInvocationGuardELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -0,0 +1,34 @@
&lt;br&gt;+package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;+
&lt;br&gt;+import javax.el.ELContext;
&lt;br&gt;+import javax.el.ELException;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * Will throw an exception if invoke is called and method invocation is not allowed
&lt;br&gt;+ */
&lt;br&gt;+public class MethodInvocationGuardELResolver extends AbstractELResolver {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public MethodInvocationGuardELResolver(Container container) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object getValue(ELContext context, Object base, Object property) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setValue(ELContext context, Object base, Object property, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object invoke(ELContext elContext, Object base, Object method, Class&amp;lt;?&amp;gt;[] paramTypes, Object[] params) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ReflectionContextState.isDenyMethodExecution(context)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//you aint invoking this
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new ELException(&amp;quot;Method ivocations are disabled&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Copied: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java (from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java)
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java&amp;r1=833776&amp;r2=833846&amp;rev=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java&amp;r1=833776&amp;r2=833846&amp;rev=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/ValueStackContextReferenceELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,29 +1,38 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;+import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.el.ELResolver;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;-import java.util.Iterator;
&lt;br&gt;&amp;nbsp;import java.beans.FeatureDescriptor;
&lt;br&gt;+import java.util.Iterator;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+public class ValueStackContextReferenceELResolver extends AbstractELResolver {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ValueStackContextReferenceELResolver(Container container) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class ValueStackContextResolver extends ELResolver {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Object getValue(ELContext context, Object base, Object property) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object base, Object property) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String objectName = property.toString();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (StringUtils.startsWith(objectName, &amp;quot;#&amp;quot;)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;objectName = StringUtils.removeStart(property.toString(), &amp;quot;#&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActionContext actionContext = ActionContext.getContext();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (elContext != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueStack valueStack = actionContext.getValueStack();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (valueStack != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj = valueStack.getContext().get(objectName);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (obj != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, obj.getClass());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, objectName);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return obj;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,17 +1,16 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;&amp;nbsp;import javax.el.ELException;
&lt;br&gt;-import java.util.List;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.Array;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class XWorkArrayELResolver extends AbstractResolver {
&lt;br&gt;+public class XWorkArrayELResolver extends AbstractELResolver {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public XWorkArrayELResolver(Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -19,7 +18,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target.getClass().isArray()) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;@@ -74,7 +73,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setValue(ELContext elContext, Object target, Object property, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target.getClass().isArray()) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -9,14 +9,14 @@
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class XWorkBeanELResolver extends AbstractResolver {
&lt;br&gt;+public class XWorkBeanELResolver extends AbstractELResolver {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public XWorkBeanELResolver(Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map&amp;lt;String, Object&amp;gt;) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map&amp;lt;String, Object&amp;gt;) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String propertyName = property.toString();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class targetType = target.getClass();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -48,7 +48,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setValue(ELContext elContext, Object target, Object property, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map&amp;lt;String, Object&amp;gt;) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map&amp;lt;String, Object&amp;gt;) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String propertyName = property.toString();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class targetType = target.getClass();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,16 +1,16 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.XWorkException;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;-import com.opensymphony.xwork2.XWorkException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;+import java.util.Collection;
&lt;br&gt;&amp;nbsp;import java.util.List;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;-import java.util.Collection;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class XWorkListELResolver extends AbstractResolver {
&lt;br&gt;+public class XWorkListELResolver extends AbstractELResolver {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public XWorkListELResolver(Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -18,7 +18,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof List) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List list = (List) target;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;@@ -82,7 +82,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setValue(ELContext elContext, Object target, Object property, Object value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof List) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,15 +1,14 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;-import java.util.List;
&lt;br&gt;&amp;nbsp;import java.util.WeakHashMap;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class XWorkMapELResolver extends AbstractResolver {
&lt;br&gt;+public class XWorkMapELResolver extends AbstractELResolver {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private final Map&amp;lt;Key, Class&amp;gt; keyClassCache = new WeakHashMap&amp;lt;Key, Class&amp;gt;();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public XWorkMapELResolver(Container container) {
&lt;br&gt;@@ -17,7 +16,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof Map) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;@@ -84,12 +83,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setValue(ELContext elContext, Object target, Object property, Object value) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(XWorkValueStackContext.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof Map) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object key = getKey(context, property);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map map = (Map) target;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(key, getValue(context, value));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(key, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Copied: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java (from r833776, struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java)
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java&amp;r1=833776&amp;r2=833846&amp;rev=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java&amp;r1=833776&amp;r2=833846&amp;rev=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/AccessorsContextKey.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkValueStackContext.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,5 +1,7 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public interface AccessorsContextKey {
&lt;br&gt;+
&lt;br&gt;+public interface XWorkValueStackContext extends Map {
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ClassCacheInspector.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -8,9 +8,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Invoked just before storing a class type within a cache instance.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @param type
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The class that is to be stored.
&lt;br&gt;- &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param type The class that is to be stored.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return True if the class can be cached, false otherwise.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;boolean shouldCache(Class type);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/DefaultMemberAccess.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,78 +1,68 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.reflection;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;-import java.lang.reflect.Member;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.AccessibleObject;
&lt;br&gt;+import java.lang.reflect.Member;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.Modifier;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Taken from OGNL
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-public class DefaultMemberAccess implements MemberAccess
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public boolean &amp;nbsp; &amp;nbsp; &amp;nbsp;allowPrivateAccess = false;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public boolean &amp;nbsp; &amp;nbsp; &amp;nbsp;allowProtectedAccess = false;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public boolean &amp;nbsp; &amp;nbsp; &amp;nbsp;allowPackageProtectedAccess = false;
&lt;br&gt;-
&lt;br&gt;-	/*===================================================================
&lt;br&gt;-		Constructors
&lt;br&gt;-	 &amp;nbsp;===================================================================*/
&lt;br&gt;-	public DefaultMemberAccess(boolean allowAllAccess)
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;this(allowAllAccess, allowAllAccess, allowAllAccess);
&lt;br&gt;-	}
&lt;br&gt;+public class DefaultMemberAccess implements MemberAccess {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean allowPrivateAccess = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean allowProtectedAccess = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean allowPackageProtectedAccess = false;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/*===================================================================
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Constructors
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; ===================================================================*/
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public DefaultMemberAccess(boolean allowAllAccess) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this(allowAllAccess, allowAllAccess, allowAllAccess);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public DefaultMemberAccess(boolean allowPrivateAccess, boolean allowProtectedAccess, boolean allowPackageProtectedAccess)
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;super();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;this.allowPrivateAccess = allowPrivateAccess;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;this.allowProtectedAccess = allowProtectedAccess;
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;this.allowPackageProtectedAccess = allowPackageProtectedAccess;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public DefaultMemberAccess(boolean allowPrivateAccess, boolean allowProtectedAccess, boolean allowPackageProtectedAccess) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.allowPrivateAccess = allowPrivateAccess;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.allowProtectedAccess = allowProtectedAccess;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.allowPackageProtectedAccess = allowPackageProtectedAccess;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	/*===================================================================
&lt;br&gt;-		Public methods
&lt;br&gt;-	 &amp;nbsp;===================================================================*/
&lt;br&gt;-	public boolean getAllowPrivateAccess()
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;return allowPrivateAccess;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/*===================================================================
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Public methods
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; ===================================================================*/
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean getAllowPrivateAccess() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return allowPrivateAccess;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public void setAllowPrivateAccess(boolean value)
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;allowPrivateAccess = value;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setAllowPrivateAccess(boolean value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowPrivateAccess = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public boolean getAllowProtectedAccess()
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;return allowProtectedAccess;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean getAllowProtectedAccess() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return allowProtectedAccess;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public void setAllowProtectedAccess(boolean value)
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;allowProtectedAccess = value;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setAllowProtectedAccess(boolean value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowProtectedAccess = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public boolean getAllowPackageProtectedAccess()
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;return allowPackageProtectedAccess;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean getAllowPackageProtectedAccess() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return allowPackageProtectedAccess;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public void setAllowPackageProtectedAccess(boolean value)
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;allowPackageProtectedAccess = value;
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setAllowPackageProtectedAccess(boolean value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allowPackageProtectedAccess = value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	/*===================================================================
&lt;br&gt;-		MemberAccess interface
&lt;br&gt;-	 &amp;nbsp;===================================================================*/
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Object setup(Map context, Object target, Member member, String propertyName)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object &amp;nbsp; &amp;nbsp; &amp;nbsp;result = null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/*===================================================================
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MemberAccess interface
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; ===================================================================*/
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object setup(Map context, Object target, Member member, String propertyName) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (isAccessible(context, target, member, propertyName)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AccessibleObject accessible = (AccessibleObject)member;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;AccessibleObject accessible = (AccessibleObject) member;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!accessible.isAccessible()) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = Boolean.TRUE;
&lt;br&gt;@@ -82,33 +72,31 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void restore(Map context, Object target, Member member, String propertyName, Object state)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void restore(Map context, Object target, Member member, String propertyName, Object state) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (state != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((AccessibleObject)member).setAccessible(((Boolean)state).booleanValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((AccessibleObject) member).setAccessible(((Boolean) state).booleanValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Returns true if the given member is accessible or can be made accessible
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;by this object.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Returns true if the given member is accessible or can be made accessible
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * by this object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;-	public boolean isAccessible(Map context, Object target, Member member, String propertyName)
&lt;br&gt;-	{
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; modifiers = member.getModifiers();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;boolean &amp;nbsp; &amp;nbsp; result = Modifier.isPublic(modifiers);
&lt;br&gt;-
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;if (!result) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Modifier.isPrivate(modifiers)) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = getAllowPrivateAccess();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Modifier.isProtected(modifiers)) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = getAllowProtectedAccess();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = getAllowPackageProtectedAccess();
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isAccessible(Map context, Object target, Member member, String propertyName) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int modifiers = member.getModifiers();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean result = Modifier.isPublic(modifiers);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!result) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Modifier.isPrivate(modifiers)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = getAllowPrivateAccess();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (Modifier.isProtected(modifiers)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = getAllowProtectedAccess();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = getAllowPackageProtectedAccess();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/Entry.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -9,21 +9,19 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Class key;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Object value;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Entry(Class key, Object value)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Entry(Class key, Object value) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.key = key;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.value = value;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public String toString()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String toString() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;quot;Entry[&amp;quot; +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;next=&amp;quot; + next +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '\n' +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;, key=&amp;quot; + key +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '\n' +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;, value=&amp;quot; + value +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '\n' +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ']';
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;next=&amp;quot; + next +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'\n' +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;, key=&amp;quot; + key +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'\n' +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;, value=&amp;quot; + value +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'\n' +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;']';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/MemberAccess.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,26 +1,25 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.reflection;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.Member;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Taken from OGNL
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-public interface MemberAccess
&lt;br&gt;-{
&lt;br&gt;+public interface MemberAccess {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sets the member up for accessibility
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Sets the member up for accessibility
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object setup(Map context, Object target, Member member, String propertyName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Restores the member from the previous setup call.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Restores the member from the previous setup call.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void restore(Map context, Object target, Member member, String propertyName, Object state);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Returns true if the given member is accessible or can be made accessible
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;by this object.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Returns true if the given member is accessible or can be made accessible
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * by this object.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;-	public boolean isAccessible(Map context, Object target, Member member, String propertyName);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isAccessible(Map context, Object target, Member member, String propertyName);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/reflection/ObjectIndexedPropertyDescriptor.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,38 +1,33 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.reflection;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.beans.PropertyDescriptor;
&lt;br&gt;&amp;nbsp;import java.beans.IntrospectionException;
&lt;br&gt;+import java.beans.PropertyDescriptor;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.Method;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Taken from OGNL
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;-public class ObjectIndexedPropertyDescriptor extends PropertyDescriptor
&lt;br&gt;-{
&lt;br&gt;+public class ObjectIndexedPropertyDescriptor extends PropertyDescriptor {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Method indexedReadMethod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private Method &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;indexedWriteMethod;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private Class &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; propertyType;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Method indexedWriteMethod;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Class propertyType;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public ObjectIndexedPropertyDescriptor(String propertyName, Class propertyType, Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ObjectIndexedPropertyDescriptor(String propertyName, Class propertyType, Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(propertyName, null, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.propertyType = propertyType;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.indexedReadMethod = indexedReadMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.indexedWriteMethod = indexedWriteMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Method getIndexedReadMethod()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Method getIndexedReadMethod() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return indexedReadMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Method getIndexedWriteMethod()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Method getIndexedWriteMethod() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return indexedWriteMethod;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Class getPropertyType()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Class getPropertyType() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return propertyType;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -5,12 +5,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://struts.apache.org/dtds/struts-2.0.dtd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://struts.apache.org/dtds/struts-2.0.dtd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;struts&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.ValueStackFactory&amp;quot; name=&amp;quot;uel&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.UELValueStackFactory&amp;quot;/&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.reflection.ReflectionProvider&amp;quot; name=&amp;quot;uel&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.reflection.GenericReflectionProvider&amp;quot;/&amp;gt;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.reflection.ReflectionContextFactory&amp;quot; name=&amp;quot;uel&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.UELReflectionContextFactory&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.ValueStackFactory&amp;quot; name=&amp;quot;uel&amp;quot; class=&amp;quot;org.apache.struts2.uelplugin.UELValueStackFactory&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.reflection.ReflectionProvider&amp;quot; name=&amp;quot;uel&amp;quot; class=&amp;quot;org.apache.struts2.uelplugin.reflection.GenericReflectionProvider&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.reflection.ReflectionContextFactory&amp;quot; name=&amp;quot;uel&amp;quot; class=&amp;quot;org.apache.struts2.uelplugin.UELReflectionContextFactory&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constant name=&amp;quot;struts.valueStackFactory&amp;quot; value=&amp;quot;uel&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constant name=&amp;quot;struts.reflectionProvider&amp;quot; value=&amp;quot;uel&amp;quot;/&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,26 +1,26 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.XWorkTestCase;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;+import com.opensymphony.xwork2.XWorkTestCase;
&lt;br&gt;+import com.opensymphony.xwork2.config.ConfigurationException;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.ContainerBuilder;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.test.StubConfigurationProvider;
&lt;br&gt;-import com.opensymphony.xwork2.config.ConfigurationException;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStackFactory;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.location.LocatableProperties;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;-import org.springframework.mock.web.MockServletContext;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.ServletActionContext;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.uelplugin.reflection.GenericReflectionProvider;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.util.StrutsTypeConverter;
&lt;br&gt;+import org.springframework.mock.web.MockServletContext;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.servlet.ServletContextEvent;
&lt;br&gt;&amp;nbsp;import javax.el.ExpressionFactory;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;-import java.text.ParseException;
&lt;br&gt;+import javax.servlet.ServletContextEvent;
&lt;br&gt;&amp;nbsp;import java.text.DateFormat;
&lt;br&gt;+import java.text.ParseException;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public abstract class AbstractUELTest extends XWorkTestCase {
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,9 +1,9 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.lang.reflect.InvocationTargetException;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;import org.apache.struts2.views.util.ContextUtil;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+import java.lang.reflect.InvocationTargetException;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class BuiltinFunctionsTest extends AbstractUELTest {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testGetText() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -2,8 +2,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionSupport;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.annotations.Conversion;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.annotations.ConversionType;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.annotations.TypeConversion;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;@Conversion
&lt;br&gt;&amp;nbsp;public class TestAction extends ActionSupport {
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,8 +1,8 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import java.util.Date;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.List;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.Set;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -23,6 +23,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Set set;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private ChildTestAction childTestAction;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean invoked;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean wasInvoked() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return invoked;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public ChildTestAction getChildTestAction() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return childTestAction;
&lt;br&gt;@@ -32,6 +37,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.childTestAction = childTestAction;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void invoke() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.invoked = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object getFail() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;kaboom&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -20,7 +20,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex Luthor&amp;quot;, stack.findValue(&amp;quot;${#s0.concat(' ').concat(#s1)}&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void testCallMethodsOnCompundRoot() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testCallMethodsOnCompundRoot() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this shuld not fail as the property is defined on a parent class
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -9,7 +9,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;0&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj = new TestObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;1&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -2,8 +2,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.util.*;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.InvocationTargetException;
&lt;br&gt;+import java.util.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class UELStackSetValueTest extends AbstractUELTest {
&lt;br&gt;@@ -46,6 +46,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;typedList[1].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, obj.getTypedList().size());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getTypedList().get(1).getValue());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//context ref
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list = new ArrayList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;theTypedList&amp;quot;, list);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;#theTypedList[0]&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, list.size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, list.get(0));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testWriteArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;@@ -85,6 +92,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;typedMap[1].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, obj.getTypedMap().size());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getTypedMap().get(1).getValue());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//context ref
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;themap&amp;quot;, map);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;#themap['str']&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, map.size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, map.get(&amp;quot;str&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSetPropertiesOnNestedNullObject() {
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java?rev=833846&amp;r1=833845&amp;r2=833846&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -1,10 +1,10 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.LinkedHashMap;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class UELValueStackOtherTests extends AbstractUELTest {
&lt;br&gt;@@ -56,7 +56,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void testFailsOnMissingNestedPropertyWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFailsOnMissingNestedPropertyWithThrowException() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;@@ -123,7 +123,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInNonDevMode() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInNonDevMode() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestAction action = new TestAction();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setDevMode(&amp;quot;false&amp;quot;);
&lt;br&gt;@@ -134,7 +134,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(conversionErrors.containsKey(&amp;quot;bar&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInDevMode() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInDevMode() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestAction action = new TestAction();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setDevMode(&amp;quot;true&amp;quot;);
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java?rev=833846&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java?rev=833846&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/VulnerabilityTest.java Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -0,0 +1,80 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;+import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;+import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;+import org.apache.struts2.StrutsTestCase;
&lt;br&gt;+
&lt;br&gt;+import javax.servlet.ServletContextEvent;
&lt;br&gt;+import java.util.HashMap;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+
&lt;br&gt;+public class VulnerabilityTest extends StrutsTestCase {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testMethodsAreNotInvokedUnlessDenyMethodExecutionIsTrue() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CompoundRoot root = new CompoundRoot();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueStack stack = new UELValueStack(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map contextMap = stack.getContext();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReflectionContextState.setCreatingNullObjects(contextMap, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReflectionContextState.setDenyMethodExecution(contextMap, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReflectionContextState.setReportingConversionErrors(contextMap, true);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//simple
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;top.invoke()&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(obj.wasInvoked());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//nested
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject nested = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setInner(nested);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;top.inner.invoke()&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertFalse(nested.wasInvoked());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testParametersDoesNotAffectSession() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HashMap&amp;lt;String, Object&amp;gt; session = new HashMap&amp;lt;String, Object&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueStack stack = ActionContext.getContext().getValueStack();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;session&amp;quot;, session);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(session, stack.findValue(&amp;quot;#session&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//make sure that values can tb set in session
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;#session['clean']&amp;quot;, &amp;quot;clean&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;clean&amp;quot;, stack.findValue(&amp;quot;#session['clean']&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; params = new HashMap&amp;lt;String, Object&amp;gt;();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;bar&amp;quot;, &amp;quot;123&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;#session.foo&amp;quot;, &amp;quot;Foo&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;\u0023session[\'user\']&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;\\u0023session[\'user\']&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;\u0023session.user2&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;\\u0023session.user2&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;('\u0023'%20%2b%20'session[\'user3\']')(unused)&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;('\\u0023' + 'session[\\'user4\\']')(unused)&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;('\u0023'%2b'session[\'user5\']')(unused)&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(&amp;quot;('\\u0023'%2b'session[\'user5\']')(unused)&amp;quot;, &amp;quot;0wn3d&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;request.setParameters(params);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;executeAction(&amp;quot;/test/test.action&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(123, findValueAfterExecute(&amp;quot;top.bar&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(session.get(&amp;quot;foo&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(session.get(&amp;quot;user&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(session.get(&amp;quot;user2&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(session.get(&amp;quot;user3&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(session.get(&amp;quot;user4&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(session.get(&amp;quot;user5&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.setUp();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//simulate start up
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;UELServletContextListener listener = new UELServletContextListener();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;listener.contextInitialized(new ServletContextEvent(servletContext));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml?rev=833846&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml?rev=833846&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/resources/struts.xml Sun Nov &amp;nbsp;8 08:18:59 2009
&lt;br&gt;@@ -0,0 +1,10 @@
&lt;br&gt;+&amp;lt;!DOCTYPE struts PUBLIC
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;a href=&quot;http://struts.apache.org/dtds/struts-2.0.dtd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://struts.apache.org/dtds/struts-2.0.dtd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;struts&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;package name=&amp;quot;test&amp;quot; namespace=&amp;quot;/test&amp;quot; extends=&amp;quot;struts-default&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;action name=&amp;quot;test&amp;quot; class=&amp;quot;org.apache.struts2.uelplugin.TestAction&amp;quot;&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;result&amp;gt;something.jsp&amp;lt;/result&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/action&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;lt;/package&amp;gt;
&lt;br&gt;+&amp;lt;/struts&amp;gt;
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r833846---in--struts-sandbox-trunk-struts2-uel-plugin%3A-.--src-main-java-org-apache-struts2-uelplugin--src-main-java-org-apache-struts2-uelplugin-elresolvers--src-main-java-org-apache-struts2-uelplugin-reflection--src-main-resources--src-tes...-tp26251666p26251666.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26249793</id>
	<title>[CONF] Confluence Changes in the last 24 hours</title>
	<published>2009-11-07T16:01:00Z</published>
	<updated>2009-11-07T16:01:00Z</updated>
	<author>
		<name>confluence-2</name>
	</author>
	<content type="html">This is a daily summary of all recent changes in Confluence.
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Updated Spaces:
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Directory Studio (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;ACI Editor Plugin edited by &amp;nbsp;seelmann &amp;nbsp;(10:07 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ACI+Editor+Plugin&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ACI+Editor+Plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;Index edited by &amp;nbsp;seelmann &amp;nbsp;(10:04 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Index&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Index&lt;/a&gt;&lt;br&gt;&lt;br&gt;Features edited by &amp;nbsp;seelmann &amp;nbsp;(10:03 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Features&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Features&lt;/a&gt;&lt;br&gt;&lt;br&gt;ApacheDS Configuration Plugin edited by &amp;nbsp;seelmann &amp;nbsp;(09:58 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ApacheDS+Configuration+Plugin&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ApacheDS+Configuration+Plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;Apache Directory Studio 1.0.0 released edited by &amp;nbsp;seelmann &amp;nbsp;(09:58 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/2007/09/04/Apache+Directory+Studio+1.0.0+released&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/2007/09/04/Apache+Directory+Studio+1.0.0+released&lt;/a&gt;&lt;br&gt;&lt;br&gt;LDAP Studio 0.8.0 released edited by &amp;nbsp;seelmann &amp;nbsp;(09:58 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/2007/05/04/LDAP+Studio+0.8.0+released&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/2007/05/04/LDAP+Studio+0.8.0+released&lt;/a&gt;&lt;br&gt;&lt;br&gt;Schema Editor Plugin edited by &amp;nbsp;seelmann &amp;nbsp;(09:53 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Schema+Editor+Plugin&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Schema+Editor+Plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;LDAP Browser Plugin edited by &amp;nbsp;seelmann &amp;nbsp;(09:49 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/LDAP+Browser+Plugin&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/LDAP+Browser+Plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;LDIF Editor Plugin edited by &amp;nbsp;seelmann &amp;nbsp;(09:48 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/LDIF+Editor+Plugin&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/LDIF+Editor+Plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;Screenshots edited by &amp;nbsp;seelmann &amp;nbsp;(09:31 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Screenshots&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Screenshots&lt;/a&gt;&lt;br&gt;&lt;br&gt;ApacheDS Plugin edited by &amp;nbsp;seelmann &amp;nbsp;(08:47 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ApacheDS+Plugin&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ApacheDS+Plugin&lt;/a&gt;&lt;br&gt;&lt;br&gt;Source repository edited by &amp;nbsp;seelmann &amp;nbsp;(02:08 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Source+repository&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Source+repository&lt;/a&gt;&lt;br&gt;&lt;br&gt;Studio Plugin Source Repository created by seelmann (02:04 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Studio+Plugin+Source+Repository&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Studio+Plugin+Source+Repository&lt;/a&gt;&lt;br&gt;&lt;br&gt;Developer's Guide edited by &amp;nbsp;seelmann &amp;nbsp;(02:00 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Developer%27s+Guide&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/Developer%27s+Guide&lt;/a&gt;&lt;br&gt;&lt;br&gt;ChangeLog edited by &amp;nbsp;seelmann &amp;nbsp;(11:47 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ChangeLog&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSTUDIO/ChangeLog&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Geronimo v2.2 (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/GMOxDOC22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/GMOxDOC22&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Substituting one module with another edited by &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26249793&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;chirunhua@...&lt;/a&gt; &amp;nbsp;(02:35 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/GMOxDOC22/Substituting+one+module+with+another&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/GMOxDOC22/Substituting+one+module+with+another&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Lucene Mahout (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAHOUT&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAHOUT&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;ClusteringYourData edited by &amp;nbsp;drew.farris &amp;nbsp;(03:13 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAHOUT/ClusteringYourData&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAHOUT/ClusteringYourData&lt;/a&gt;&lt;br&gt;&lt;br&gt;k-means-commandline created by drew.farris (03:03 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAHOUT/k-means-commandline&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAHOUT/k-means-commandline&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Maven (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAVEN&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAVEN&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;InternalErrorException created by bentmann (06:01 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAVEN/InternalErrorException&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAVEN/InternalErrorException&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Open Relevance (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ORP&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/ORP&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;ExistingCollections created by rcmuir (08:29 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ORP/ExistingCollections&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/ORP/ExistingCollections&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Sling (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/SLING&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/SLING&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;FAQ edited by &amp;nbsp;fmeschbe &amp;nbsp;(01:01 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/SLING/FAQ&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/SLING/FAQ&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Wicket (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/WICKET&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/WICKET&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Wicket and localized URLs edited by &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26249793&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jo@...&lt;/a&gt; &amp;nbsp;(04:26 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/WICKET/Wicket+and+localized+URLs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/WICKET/Wicket+and+localized+URLs&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Change your notification preferences: &lt;a href=&quot;http://cwiki.apache.org/confluence/users/viewnotifications.action&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/users/viewnotifications.action&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-CONF--Confluence-Changes-in-the-last-24-hours-tp26249793p26249793.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26249541</id>
	<title>svn commit: r833776 - in /struts/sandbox/trunk/struts2-uel-plugin/src: main/java/org/apache/struts2/uelplugin/ main/java/org/apache/struts2/uelplugin/contextlistener/ main/java/org/apache/struts2/uelplugin/elresolvers/ main/resources/ test/java/org/apa...</title>
	<published>2009-11-07T15:14:32Z</published>
	<updated>2009-11-07T15:14:32Z</updated>
	<author>
		<name>musachy-2</name>
	</author>
	<content type="html">Author: musachy
&lt;br&gt;Date: Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;New Revision: 833776
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=833776&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=833776&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;rename classes, add more tests
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELReflectionContextFactory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStackFactory.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied, changed from r833650, struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ChildTestAction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - copied, changed from r833650, struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/JuelMethodInvocationTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java
&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/contextlistener/
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/JuelMethodInvocationTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELReflectionContextFactory.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELReflectionContextFactory.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELReflectionContextFactory.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELReflectionContextFactory.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELReflectionContextFactory.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,15 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextFactory;
&lt;br&gt;+
&lt;br&gt;+import java.util.HashMap;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * ReflectionContextFactory for Unified EL.
&lt;br&gt;+ */
&lt;br&gt;+public class UELReflectionContextFactory implements ReflectionContextFactory {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Map createDefaultContext(Object root) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELServletContextListener.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,33 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import de.odysseus.el.ExpressionFactoryImpl;
&lt;br&gt;+import de.odysseus.el.tree.TreeBuilder;
&lt;br&gt;+
&lt;br&gt;+import javax.el.ExpressionFactory;
&lt;br&gt;+import javax.servlet.ServletContext;
&lt;br&gt;+import javax.servlet.ServletContextEvent;
&lt;br&gt;+import javax.servlet.ServletContextListener;
&lt;br&gt;+import java.util.Properties;
&lt;br&gt;+
&lt;br&gt;+import org.apache.struts2.uelplugin.ExpressionFactoryHolder;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * Responsible for creating the ExpressionFactory that will be used by the
&lt;br&gt;+ * UelValueStack
&lt;br&gt;+ */
&lt;br&gt;+public class UELServletContextListener implements ServletContextListener {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void contextInitialized(ServletContextEvent contextEvent) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Properties juelProperties = new Properties();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;juelProperties.setProperty(&amp;quot;javax.el.methodInvocations&amp;quot;, &amp;quot;true&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//custom parser
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;juelProperties.setProperty(TreeBuilder.class.getName(), JUELExtensionBuilder.class.getName());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpressionFactory factory = new ExpressionFactoryImpl(juelProperties);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpressionFactoryHolder.setExpressionFactory(factory);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void contextDestroyed(ServletContextEvent contextEvent) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStack.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,229 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.XWorkException;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Inject;
&lt;br&gt;+import com.opensymphony.xwork2.util.ClearableValueStack;
&lt;br&gt;+import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;+import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;+import com.opensymphony.xwork2.util.logging.Logger;
&lt;br&gt;+import com.opensymphony.xwork2.util.logging.LoggerFactory;
&lt;br&gt;+import org.apache.struts2.uelplugin.elresolvers.AccessorsContextKey;
&lt;br&gt;+
&lt;br&gt;+import javax.el.ELContext;
&lt;br&gt;+import javax.el.ExpressionFactory;
&lt;br&gt;+import javax.el.PropertyNotFoundException;
&lt;br&gt;+import javax.el.ValueExpression;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+import java.util.TreeMap;
&lt;br&gt;+import java.io.Serializable;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * A ValueStack that uses Unified EL as the underlying Expression Language.
&lt;br&gt;+ */
&lt;br&gt;+public class UELValueStack implements ValueStack, ClearableValueStack, Serializable {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private static final Logger LOG = LoggerFactory.getLogger(UELValueStack.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private CompoundRoot root = new CompoundRoot();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private transient Map context;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Class defaultType;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Map overrides;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private ELContext elContext;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Container container;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private XWorkConverter xworkConverter;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean logMissingProperties;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private boolean devMode;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public UELValueStack(Container container) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this(container, new CompoundRoot());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public UELValueStack(Container container, ValueStack vs) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this(container, new CompoundRoot(vs.getRoot()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public UELValueStack(Container container, CompoundRoot root) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.container = container;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.xworkConverter = container.getInstance(XWorkConverter.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setRoot(new CompoundRoot(root));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Inject(&amp;quot;devMode&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setDevMode(String mode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;devMode = &amp;quot;true&amp;quot;.equalsIgnoreCase(mode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Inject(value = &amp;quot;logMissingProperties&amp;quot;, required = false)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setLogMissingProperties(String logMissingProperties) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.logMissingProperties = &amp;quot;true&amp;quot;.equalsIgnoreCase(logMissingProperties);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String findString(String expr, boolean throwException) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return (String) findValue(expr, String.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String findString(String expr) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return findString(expr, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object findValue(String expr) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return findValue(expr, Object.class, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object findValue(String expr, boolean throwException) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return findValue(expr, Object.class, throwException);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object findValue(String expr, Class asType) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return findValue(expr, asType, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object findValue(String expr, Class asType, boolean throwException) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String originalExpression = expr;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ((overrides != null) &amp;&amp; overrides.containsKey(expr)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr = (String) overrides.get(expr);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (expr != null &amp;&amp; expr.startsWith(&amp;quot;%{&amp;quot;)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// replace %{ with ${
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr = &amp;quot;#&amp;quot; + expr.substring(1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (expr != null &amp;&amp; !expr.startsWith(&amp;quot;${&amp;quot;) &amp;&amp; !expr.startsWith(&amp;quot;#{&amp;quot;)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr = &amp;quot;#{&amp;quot; + expr + &amp;quot;}&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(AccessorsContextKey.class, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(XWorkConverter.class, xworkConverter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(CompoundRoot.class, root);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// parse our expression
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpressionFactory factory = getExpressionFactory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueExpression valueExpr = factory.createValueExpression(elContext, expr, Object.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object retVal = valueExpr.getValue(elContext);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!Object.class.equals(asType)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;retVal = xworkConverter.convertValue(context, root, null, null, retVal, asType);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return retVal;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return handleException(e, originalExpression, throwException);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Object handleException(Exception exception, String expression, boolean throwException) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object ret = context.get(expression);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ret != null)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ret;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (exception instanceof PropertyNotFoundException &amp;&amp; devMode &amp;&amp; logMissingProperties)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(exception.getMessage());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (throwException)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new XWorkException(exception);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected ExpressionFactory getExpressionFactory() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpressionFactory factory = ExpressionFactoryHolder.getExpressionFactory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (factory == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String message = &amp;quot;********** FATAL ERROR STARTING UP STRUTS-UEL INTEGRATION **********\n&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Looks like the UEL listener was not configured for your web app! \n&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;Nothing will work until UELServletContextListener is added as a listener in web.xml.\n&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;You might need to add the following to web.xml: \n&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;&amp;lt;listener&amp;gt;\n&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;listener-class&amp;gt;org.apache.struts2.uelplugin.UELServletContextListener&amp;lt;/listener-class&amp;gt;\n&amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; &amp;nbsp; &amp;nbsp;&amp;lt;/listener&amp;gt;&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.fatal(message);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Unable to find ExpressionFactory instance. Make sure that 'UELServletContextListener' &amp;quot; +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;is configured in web.xml as a listener&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return factory;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Map getContext() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return context;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Map getExprOverrides() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return overrides;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public CompoundRoot getRoot() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return root;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object peek() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return root.peek();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object pop() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return root.pop();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void push(Object o) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(o);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setDefaultType(Class defaultType) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.defaultType = defaultType;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setExprOverrides(Map overrides) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this.overrides == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.overrides = overrides;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.overrides.putAll(overrides);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void set(String key, Object o) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;overrides.put(key, o);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setValue(String expr, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;setValue(expr, value, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setValue(String expr, Object value, boolean throwExceptionOnFailure) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (expr != null &amp;&amp; !expr.startsWith(&amp;quot;${&amp;quot;) &amp;&amp; !expr.startsWith(&amp;quot;#{&amp;quot;)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr = &amp;quot;#{&amp;quot; + expr + &amp;quot;}&amp;quot;;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(AccessorsContextKey.class, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(XWorkConverter.class, xworkConverter);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.putContext(CompoundRoot.class, root);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// parse our expression
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ExpressionFactory factory = getExpressionFactory();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueExpression valueExpr = factory.createValueExpression(elContext, expr, Object.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;valueExpr.setValue(elContext, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (e instanceof PropertyNotFoundException &amp;&amp; devMode &amp;&amp; logMissingProperties)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.warn(&amp;quot;Could not find property [&amp;quot; + ((PropertyNotFoundException) e).getMessage() + &amp;quot;]&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (throwExceptionOnFailure)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new XWorkException(e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int size() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return root.size();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void setRoot(CompoundRoot root) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.context = new TreeMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.put(VALUE_STACK, this);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.root = root;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext = new CompoundRootELContext(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void clearContextValues() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;getContext().clear();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStackFactory.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStackFactory.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStackFactory.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStackFactory.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/UELValueStackFactory.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,45 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Inject;
&lt;br&gt;+import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;+import com.opensymphony.xwork2.util.ValueStackFactory;
&lt;br&gt;+
&lt;br&gt;+import javax.el.ExpressionFactory;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * Creates UelValueStacks.
&lt;br&gt;+ */
&lt;br&gt;+public class UELValueStackFactory implements ValueStackFactory {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private ExpressionFactory factory;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private XWorkConverter xworkConverter;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Container container;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Inject
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setXWorkConverter(XWorkConverter conv) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.xworkConverter = conv;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Inject
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setContainer(Container container) throws ClassNotFoundException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.container = container;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ValueStack createValueStack() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueStack results = new UELValueStack(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;results.getContext().put(ActionContext.CONTAINER, container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return results;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ValueStack createValueStack(ValueStack stack) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ValueStack results = new UELValueStack(container, stack);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;container.inject(results);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;results.getContext().put(ActionContext.CONTAINER, container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return results;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/CompoundRootELResolver.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -1,7 +1,6 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.NullHandler;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;@@ -10,14 +9,7 @@
&lt;br&gt;&amp;nbsp;import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;-import javax.el.ELResolver;
&lt;br&gt;-import java.beans.BeanInfo;
&lt;br&gt;-import java.beans.FeatureDescriptor;
&lt;br&gt;-import java.beans.Introspector;
&lt;br&gt;-import java.beans.PropertyDescriptor;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.InvocationTargetException;
&lt;br&gt;-import java.util.ArrayList;
&lt;br&gt;-import java.util.Iterator;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;@@ -31,8 +23,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Object getValue(ELContext context, Object base, Object property) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (context == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object base, Object property) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (elContext == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalArgumentException(&amp;quot;ElContext cannot be null&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -46,16 +38,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CompoundRoot root = (CompoundRoot) context.getContext(CompoundRoot.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CompoundRoot root = (CompoundRoot) elContext.getContext(CompoundRoot.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (root == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;top&amp;quot;.equals(propertyName) &amp;&amp; root.size() &amp;gt; 0) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return root.get(0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) context.getContext(AccessorsContextKey.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object bean = findObjectForProperty(root, propertyName);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (bean != null) {
&lt;br&gt;@@ -70,10 +63,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionProvider.setValue(propertyName, reflectionContext, bean, retVal);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return retVal;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -93,15 +86,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CompoundRoot root = (CompoundRoot) context.getContext(CompoundRoot.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map) context.getContext(AccessorsContextKey.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String propertyName = (String) property;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (base == null &amp;&amp; property != null &amp;&amp; root != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object bean = findObjectForProperty(root, propertyName);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (bean != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, bean.getClass());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, propertyName);
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;XWorkConverter converter = (XWorkConverter) context.getContext(XWorkConverter.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (converter != null &amp;&amp; root != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class propType = determineType(bean, propertyName);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = converter.convertValue(null, value, propType);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = converter.convertValue(reflectionContext, bean, null, propertyName, value, propType);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BeanUtils.setProperty(bean, propertyName, value);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.setPropertyResolved(true);
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -18,14 +18,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; reflectionContext = (Map&amp;lt;String, Object&amp;gt;) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String propertyName = property.toString();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class targetType = target.getClass();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//only handle this if there is such a property
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (PropertyUtils.isReadable(target, propertyName)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj = reflectionProvider.getValue(propertyName, reflectionContext, target);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, target.getClass());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, property.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_CLASS_ACCESSED, targetType);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionContext.put(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED, propertyName);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if object is null, and create objects is enabled, lets do it
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (obj == null &amp;&amp; ReflectionContextState.isCreatingNullObjects(reflectionContext)) {
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/resources/struts-plugin.xml Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -6,11 +6,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;lt;struts&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.ValueStackFactory&amp;quot; name=&amp;quot;uel&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.UelValueStackFactory&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.UELValueStackFactory&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.reflection.ReflectionProvider&amp;quot; name=&amp;quot;uel&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.reflection.GenericReflectionProvider&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;bean type=&amp;quot;com.opensymphony.xwork2.util.reflection.ReflectionContextFactory&amp;quot; name=&amp;quot;uel&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.UelReflectionContextFactory&amp;quot;/&amp;gt;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;class=&amp;quot;org.apache.struts2.uelplugin.UELReflectionContextFactory&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constant name=&amp;quot;struts.valueStackFactory&amp;quot; value=&amp;quot;uel&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constant name=&amp;quot;struts.reflectionProvider&amp;quot; value=&amp;quot;uel&amp;quot;/&amp;gt;
&lt;br&gt;&lt;br&gt;Copied: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java (from r833650, struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java)
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java&amp;r1=833650&amp;r2=833776&amp;rev=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java&amp;r1=833650&amp;r2=833776&amp;rev=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUELTest.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -2,19 +2,12 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.XWorkTestCase;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;-import com.opensymphony.xwork2.ActionProxyFactory;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.ContainerBuilder;
&lt;br&gt;-import com.opensymphony.xwork2.inject.Factory;
&lt;br&gt;-import com.opensymphony.xwork2.inject.Context;
&lt;br&gt;-import com.opensymphony.xwork2.inject.Scope;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.test.StubConfigurationProvider;
&lt;br&gt;-import com.opensymphony.xwork2.config.ConfigurationManager;
&lt;br&gt;-import com.opensymphony.xwork2.config.Configuration;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.config.ConfigurationException;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStackFactory;
&lt;br&gt;-import com.opensymphony.xwork2.util.LocalizedTextUtil;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.location.LocatableProperties;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;@@ -22,7 +15,6 @@
&lt;br&gt;&amp;nbsp;import org.apache.struts2.ServletActionContext;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.uelplugin.reflection.GenericReflectionProvider;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.util.StrutsTypeConverter;
&lt;br&gt;-import org.apache.commons.beanutils.converters.DateConverter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.servlet.ServletContextEvent;
&lt;br&gt;&amp;nbsp;import javax.el.ExpressionFactory;
&lt;br&gt;@@ -31,11 +23,11 @@
&lt;br&gt;&amp;nbsp;import java.text.DateFormat;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public abstract class AbstractUelBaseTest extends XWorkTestCase {
&lt;br&gt;+public abstract class AbstractUELTest extends XWorkTestCase {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private ExpressionFactory factory = ExpressionFactory.newInstance();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected XWorkConverter converter;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected CompoundRoot root;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;protected UelValueStack stack;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected UELValueStack stack;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected DateFormat format = DateFormat.getDateInstance();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;protected ReflectionProvider reflectionProvider;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -63,8 +55,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;loadConfigurationProviders(new StubConfigurationProvider() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ValueStack.class, UelValueStack.class);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ValueStackFactory.class, UelValueStackFactory.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ValueStack.class, UELValueStack.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ValueStackFactory.class, UELValueStackFactory.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ReflectionProvider.class, GenericReflectionProvider.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//builder.factory(StrutsTypeConverter)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -74,7 +66,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;reflectionProvider = container.getInstance(ReflectionProvider.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;converter.registerConverter(&amp;quot;java.util.Date&amp;quot;, new DateConverter());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.root = new CompoundRoot();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.stack = new UelValueStack(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.stack = new UELValueStack(container);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setRoot(root);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(ActionContext.CONTAINER, container);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -84,7 +76,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ServletActionContext.setServletContext(servletContext);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//simulate start up
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;UelServletContextListener listener = new UelServletContextListener();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;UELServletContextListener listener = new UELServletContextListener();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;listener.contextInitialized(new ServletContextEvent(servletContext));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/BuiltinFunctionsTest.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -1,21 +1,11 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.XWorkTestCase;
&lt;br&gt;-import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;-import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;import java.lang.reflect.InvocationTargetException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import org.springframework.mock.web.MockServletContext;
&lt;br&gt;-import org.apache.struts2.ServletActionContext;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.views.util.ContextUtil;
&lt;br&gt;-import org.apache.struts2.uelplugin.UelServletContextListener;
&lt;br&gt;-
&lt;br&gt;-import javax.servlet.ServletContextEvent;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class BuiltinFunctionsTest extends AbstractUelBaseTest {
&lt;br&gt;+public class BuiltinFunctionsTest extends AbstractUELTest {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testGetText() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestAction action = new TestAction();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.push(action);
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ChildTestAction.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ChildTestAction.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ChildTestAction.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ChildTestAction.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ChildTestAction.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,4 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+public class ChildTestAction extends TestAction {
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestAction.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -8,10 +8,18 @@
&lt;br&gt;&amp;nbsp;@Conversion
&lt;br&gt;&amp;nbsp;public class TestAction extends ActionSupport {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private TestObject object;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private int bar;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getBar() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return bar;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBar(int bar) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.bar = bar;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private String converted;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;@TypeConversion(type = ConversionType.APPLICATION, converter = &amp;quot;org.apache.struts2.uelplugin.DummyTypeConverter&amp;quot;)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public String getConverted() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return converted;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833776&amp;r1=833775&amp;r2=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -18,9 +18,32 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map map;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Map&amp;lt;Integer, TestObject&amp;gt; typedMap;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Object[] objectArray;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private Integer[] typedArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private int[] typedArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private TestObject[] typedArray2;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Set set;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private ChildTestAction childTestAction;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ChildTestAction getChildTestAction() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return childTestAction;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setChildTestAction(ChildTestAction childTestAction) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.childTestAction = childTestAction;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object getFail() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new RuntimeException(&amp;quot;kaboom&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public TestObject[] getTypedArray2() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return typedArray2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setTypedArray2(TestObject[] typedArray2) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.typedArray2 = typedArray2;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Set getSet() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return set;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -37,11 +60,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.objectArray = objectArray;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public Integer[] getTypedArray() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int[] getTypedArray() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return typedArray;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void setTypedArray(Integer[] typedArray) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setTypedArray(int[] typedArray) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.typedArray = typedArray;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Copied: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java (from r833650, struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/JuelMethodInvocationTest.java)
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/JuelMethodInvocationTest.java&amp;r1=833650&amp;r2=833776&amp;rev=833776&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java?p2=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java&amp;p1=struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/JuelMethodInvocationTest.java&amp;r1=833650&amp;r2=833776&amp;rev=833776&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/JuelMethodInvocationTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELMethodInvocationTest.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -1,19 +1,9 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;-import com.opensymphony.xwork2.XWorkTestCase;
&lt;br&gt;-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;-import com.opensymphony.xwork2.util.CompoundRoot;
&lt;br&gt;-import org.apache.struts2.ServletActionContext;
&lt;br&gt;-import org.apache.struts2.uelplugin.UelServletContextListener;
&lt;br&gt;-import org.springframework.mock.web.MockServletContext;
&lt;br&gt;-
&lt;br&gt;-import javax.servlet.ServletContextEvent;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.InvocationTargetException;
&lt;br&gt;-import java.util.HashMap;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-public class JuelMethodInvocationTest extends AbstractUelBaseTest {
&lt;br&gt;+public class UELMethodInvocationTest extends AbstractUELTest {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testBasicMethods() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;text&amp;quot;, stack.findValue(&amp;quot;${' text '.trim()}&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(3, stack.findValue(&amp;quot;${'123'.length()}&amp;quot;));
&lt;br&gt;@@ -29,4 +19,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;s1&amp;quot;, &amp;quot;Luthor&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex Luthor&amp;quot;, stack.findValue(&amp;quot;${#s0.concat(' ').concat(#s1)}&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; public void testCallMethodsOnCompundRoot() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this shuld not fail as the property is defined on a parent class
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ChildTestAction childTestAction = new ChildTestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setChildTestAction(childTestAction);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(childTestAction, stack.findValue(&amp;quot;top.getChildTestAction()&amp;quot;, true));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackReadValueTest.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,198 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import java.lang.reflect.InvocationTargetException;
&lt;br&gt;+import java.util.*;
&lt;br&gt;+
&lt;br&gt;+public class UELStackReadValueTest extends AbstractUELTest {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testTop() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;0&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;1&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;1&amp;quot;, stack.findValue(&amp;quot;top.value&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testReadList() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List someList = new ArrayList(3);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setObject(someList);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;someList.add(10);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(10, stack.findValue(&amp;quot;object[0]&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testReadArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int[] ints = {10, 20};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedArray(ints);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(20, stack.findValue(&amp;quot;typedArray[1]&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testReadMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HashMap map = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(&amp;quot;nameValue&amp;quot;, &amp;quot;Lex&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setParameters(map);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex&amp;quot;, stack.findValue(&amp;quot;parameters.nameValue&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex&amp;quot;, stack.findValue(&amp;quot;parameters['nameValue']&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testContextReferencesWithSameObjectInStack() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if there as object in the stack with the property &amp;quot;X&amp;quot; and there is an object in the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//stack context under the key &amp;quot;X&amp;quot; then:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//${X} : should return the value of X from object in stack
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//${#X} : should return object from the stack context
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;ref&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj2 = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;value&amp;quot;, obj2);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//simple
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;ref&amp;quot;, stack.findValue(&amp;quot;value&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(obj2, stack.findValue(&amp;quot;#value&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testExpressionSyntax() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setAge(1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;obj&amp;quot;, obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;${#obj.value}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;%{#obj.value}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;#{#obj.value}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testSuperNested() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj0 = new TestObject(&amp;quot;0&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj0);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj1 = new TestObject(&amp;quot;1&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj0.setInner(obj1);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj2 = new TestObject(&amp;quot;2&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map map = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(&amp;quot;key0&amp;quot;, obj2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj1.setParameters(map);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj3 = new TestObject(&amp;quot;3&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List list = new ArrayList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(obj3);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.setObject(obj3);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj4 = new TestObject(&amp;quot;4&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject[] array = new TestObject[]{obj4};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj3.setObject(array);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;obj&amp;quot;, obj0);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;4&amp;quot;, stack.findValue(&amp;quot;${inner.parameters['key0'].object.object[0].value}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testContextReferences() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setValue(&amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setAge(1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;obj&amp;quot;, obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//simple
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(obj, stack.findValue(&amp;quot;#obj&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;#obj.value&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//more expressions
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj2 = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.setValue(&amp;quot;val2&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.setAge(2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;obj2&amp;quot;, obj2);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//addition
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(3L, stack.findValue(&amp;quot;#obj.age + #obj2.age&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//string addition
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;valval2&amp;quot;, stack.findValue(&amp;quot;#obj.value + #obj2.value&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;1val2&amp;quot;, stack.findValue(&amp;quot;#obj.age + #obj2.value&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//map
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map someMap = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setInner(obj2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;someMap.put(&amp;quot;val&amp;quot;, obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;map&amp;quot;, someMap);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;#map[#obj.value].value&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List someList = new ArrayList(3);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setAge(0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;someList.add(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(&amp;quot;list&amp;quot;, someList);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;#list[#obj.age].value&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testBasicFind() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${value}&amp;quot;, &amp;quot;Hello World&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String value = stack.findString(&amp;quot;${value}&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Hello World&amp;quot;, value);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${age}&amp;quot;, &amp;quot;56&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Integer age = (Integer) stack.findValue(&amp;quot;${age}&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(56, (int) age);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testNestedFind() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj2 = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj2.setAge(100);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setInner(obj2);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(obj2, stack.findValue(&amp;quot;${inner}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(100, stack.findValue(&amp;quot;${inner.age}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testDeferredFind() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;#{value}&amp;quot;, &amp;quot;Hello World&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String value = stack.findString(&amp;quot;#{value}&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Hello World&amp;quot;, value);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;#{age}&amp;quot;, &amp;quot;56&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String age = stack.findString(&amp;quot;#{age}&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;56&amp;quot;, age);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;#{date}&amp;quot;, new Date());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findString(&amp;quot;#{date}&amp;quot;), format.format(obj.getDate()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testNotFound() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${value}&amp;quot;, &amp;quot;Hello World&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String value = stack.findString(&amp;quot;${VALUENOTHERE}&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(value);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value = stack.findString(&amp;quot;VALUENOTHERE&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELStackSetValueTest.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,159 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;+
&lt;br&gt;+import java.util.*;
&lt;br&gt;+import java.lang.reflect.InvocationTargetException;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+public class UELStackSetValueTest extends AbstractUELTest {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testSuperNested() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;inner.typedMap[10].inner.typedList[2].typedMap[1].value&amp;quot;, &amp;quot;whoa&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;whoa&amp;quot;, obj.getInner().getTypedMap().get(10).getInner().getTypedList().get(2).getTypedMap().get(1).getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testWriteList() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//not null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List list = new ArrayList();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setList(list);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getList());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;list[0]&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, list.size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, list.get(0));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//null list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setList(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(obj.getList());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;list[0]&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getList());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;list[0]&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//test out of index
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setList(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;list[3]&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(4, obj.getList().size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getList().get(3));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//test type determiner
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedList(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;typedList[1].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(2, obj.getTypedList().size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getTypedList().get(1).getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testWriteArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//not null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject[] array = new TestObject[2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedArray2(array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getTypedArray2());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;typedArray2[0].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(array[0]);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, ((TestObject) array[0]).getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testWriteMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//not null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map map = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setMap(map);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getMap());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;map['str']&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, map.size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, map.get(&amp;quot;str&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//null list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setMap(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(obj.getMap());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;map['str']&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getMap());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;map['str']&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//test type determiner
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedMap(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;typedMap[1].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, obj.getTypedMap().size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getTypedMap().get(1).getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testSetPropertiesOnNestedNullObject() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(obj.getInner());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//inner is null, it will be catched bye the CompoundRoolELResolver
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;inner.value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getInner());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getInner().getValue());
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//second nested property null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;inner.inner.value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getInner().getInner());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getInner().getInner().getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testSetStringArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${value}&amp;quot;, new String[]{&amp;quot;Hello World&amp;quot;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String value = stack.findString(&amp;quot;${value}&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Hello World&amp;quot;, value);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${age}&amp;quot;, new String[]{&amp;quot;67&amp;quot;});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(new Integer(67), stack.findValue(&amp;quot;${age}&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void test2LevelSet() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject nestedObj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setInner(nestedObj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${inner.age}&amp;quot;, &amp;quot;66&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(66, obj.getInner().getAge());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testTypeConversion() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject inner = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setInner(inner);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${age}&amp;quot;, &amp;quot;22&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findValue(&amp;quot;${age}&amp;quot;), obj.getAge());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${inner.value}&amp;quot;, &amp;quot;George&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findValue(&amp;quot;${inner.value}&amp;quot;), obj.getInner().getValue());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${inner.age}&amp;quot;, &amp;quot;44&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findValue(&amp;quot;${inner.age}&amp;quot;), obj.getInner().getAge());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;${date}&amp;quot;, new Date());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findString(&amp;quot;${date}&amp;quot;), format.format(obj.getDate()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected void setUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.setUp();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map context = stack.getContext();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReflectionContextState.setCreatingNullObjects(context, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReflectionContextState.setDenyMethodExecution(context, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ReflectionContextState.setReportingConversionErrors(context, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java?rev=833776&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java?rev=833776&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UELValueStackOtherTests.java Sat Nov &amp;nbsp;7 23:14:32 2009
&lt;br&gt;@@ -0,0 +1,159 @@
&lt;br&gt;+package org.apache.struts2.uelplugin;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;+
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+import java.util.LinkedHashMap;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+public class UELValueStackOtherTests extends AbstractUELTest {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testExpOverridesCanStackExpUp() throws Exception {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map expr1 = new LinkedHashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr1.put(&amp;quot;expr1&amp;quot;, &amp;quot;'expr1value'&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setExprOverrides(expr1);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findValue(&amp;quot;expr1&amp;quot;), &amp;quot;expr1value&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map expr2 = new LinkedHashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr2.put(&amp;quot;expr2&amp;quot;, &amp;quot;'expr2value'&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;expr2.put(&amp;quot;expr3&amp;quot;, &amp;quot;'expr3value'&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setExprOverrides(expr2);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findValue(&amp;quot;expr2&amp;quot;), &amp;quot;expr2value&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findValue(&amp;quot;expr3&amp;quot;), &amp;quot;expr3value&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testArrayAsString() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedArray(new int[]{1, 2});
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;1, 2&amp;quot;, stack.findValue(&amp;quot;typedArray&amp;quot;, String.class));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFailsOnExceptionWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;fail&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fail(&amp;quot;Failed to throw exception on EL error&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ok
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFailsOnMissingPropertyWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;someprop12&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fail(&amp;quot;Failed to throw exception on EL error&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ok
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; public void testFailsOnMissingNestedPropertyWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;top.someprop12&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fail(&amp;quot;Failed to throw exception on EL error&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ok
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFailsOnMissingMethodWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;top.somethingweird()&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fail(&amp;quot;Failed to throw exception on EL error&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception ex) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ok
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testDoesNotFailOnExceptionWithoutThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;fail&amp;quot;, false);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;fail&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testDoesNotFailOnInheritedPropertiesWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this shuld not fail as the property is defined on a parent class
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ChildTestAction childTestAction = new ChildTestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setChildTestAction(childTestAction);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(childTestAction.getConverted());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;childTestAction.converted&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testDoesNotFailOnInheritedMethodsWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this shuld not fail as the property is defined on a parent class
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ChildTestAction childTestAction = new ChildTestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setChildTestAction(childTestAction);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(childTestAction.getConverted());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;top.getChildTestAction().converted&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testFailsOnInheritedMethodsWithThrowException() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//this shuld not fail as the property is defined on a parent class
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ChildTestAction childTestAction = new ChildTestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setChildTestAction(childTestAction);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(childTestAction.getConverted());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.findValue(&amp;quot;top.getChildTestAction().converted2&amp;quot;, true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fail(&amp;quot;should have failed because of missing property&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInNonDevMode() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestAction action = new TestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setDevMode(&amp;quot;false&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.push(action);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;bar&amp;quot;, &amp;quot;3x&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map conversionErrors = (Map) stack.getContext().get(ActionContext.CONVERSION_ERRORS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(conversionErrors.containsKey(&amp;quot;bar&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; public void testPrimitiveSettingWithInvalidValueAddsFieldErrorInDevMode() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestAction action = new TestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.getContext().put(XWorkConverter.REPORT_CONVERSION_ERRORS, Boolean.TRUE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setDevMode(&amp;quot;true&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.push(action);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;bar&amp;quot;, &amp;quot;3x&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map conversionErrors = (Map) stack.getContext().get(ActionContext.CONVERSION_ERRORS);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertTrue(conversionErrors.containsKey(&amp;quot;bar&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testObjectSettingWithInvalidValueDoesNotCauseSetCalledWithNull() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ChildTestAction obj2 = new ChildTestAction();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setChildTestAction(obj2);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;childTestAction&amp;quot;, &amp;quot;whoa&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getChildTestAction());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertSame(obj2, obj.getChildTestAction());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r833776---in--struts-sandbox-trunk-struts2-uel-plugin-src%3A-main-java-org-apache-struts2-uelplugin--main-java-org-apache-struts2-uelplugin-contextlistener--main-java-org-apache-struts2-uelplugin-elresolvers--main-resources--test-java-org-apa...-tp26249541p26249541.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26247179</id>
	<title>Re: WW-3291. Checkin and moving forward...</title>
	<published>2009-11-07T10:07:00Z</published>
	<updated>2009-11-07T10:07:00Z</updated>
	<author>
		<name>Musachy Barroso</name>
	</author>
	<content type="html">I am sorry, I was to excited about the JUEL plugin and totally forgot
&lt;br&gt;about it. If you have additional changes, create a new patch and I
&lt;br&gt;will merge that one.
&lt;br&gt;&lt;br&gt;musachy
&lt;br&gt;&lt;br&gt;On Fri, Nov 6, 2009 at 9:40 AM, Christian Stone &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26247179&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;xtian@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I was wondering if you had a chance to commit the patch I submitted with
&lt;br&gt;&amp;gt; this bug [WW-3291].  I did more work in the project with another issue
&lt;br&gt;&amp;gt; (using freemarker and velocity templates interchangeably as decorators with
&lt;br&gt;&amp;gt; the same *full* value stack) and wish to push that.  Since both bugs take
&lt;br&gt;&amp;gt; place in the same codebase, I am wondering if I should just send you a
&lt;br&gt;&amp;gt; single patch for both, or wait until the one is closed before creating a
&lt;br&gt;&amp;gt; patch for the other issue.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On a side note, I moved the changes I made into several production clients.
&lt;br&gt;&amp;gt;  I have websites with more than a dozen decorators and hundreds of view
&lt;br&gt;&amp;gt; files.  I am _finally_ able to start the migration to Freemarker from
&lt;br&gt;&amp;gt; Velocity that I wasn't able to do before.  I converted 4 of the files to
&lt;br&gt;&amp;gt; Freemarker without having the overhead of needing to convert all of them in
&lt;br&gt;&amp;gt; one sitting.  It is glorious.  Also, I am able to access all the statics and
&lt;br&gt;&amp;gt; whatnot that I couldn't before, so using static keys is a huge blessing for
&lt;br&gt;&amp;gt; readability.  Also, the enhanced error reporting has already helped me
&lt;br&gt;&amp;gt; several times diagnose issues on the server.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Anyways, congrats on the work you just accomplished.  Two of the biggest
&lt;br&gt;&amp;gt; complaints on Struts 2 are speed and error reporting.  Any steps to mitigate
&lt;br&gt;&amp;gt; either of these issues is a huge win!
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -- Christian Stone
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26247179&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26247179&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26247179&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26247179&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26247179.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26246359</id>
	<title>svn commit: r833708 - /struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java</title>
	<published>2009-11-07T08:34:04Z</published>
	<updated>2009-11-07T08:34:04Z</updated>
	<author>
		<name>rgielen-2</name>
	</author>
	<content type="html">Author: rgielen
&lt;br&gt;Date: Sat Nov &amp;nbsp;7 16:34:04 2009
&lt;br&gt;New Revision: 833708
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=833708&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=833708&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;Documentation updates
&lt;br&gt;&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java?rev=833708&amp;r1=833707&amp;r2=833708&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java?rev=833708&amp;r1=833707&amp;r2=833708&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java Sat Nov &amp;nbsp;7 16:34:04 2009
&lt;br&gt;@@ -11,7 +11,8 @@
&lt;br&gt;&amp;nbsp;public class PortletResultHelperJSR286 implements PortletResultHelper {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Set a render parameter, abstracted from the used Portlet API version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a render parameter, abstracted from the used Portlet API version. This implementation assumes that the given
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * response is a {@link javax.portlet.StateAwareResponse}, as JSR286 implies.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param response The response to set the parameter on.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param key &amp;nbsp; &amp;nbsp; &amp;nbsp;The parameter key to set.
&lt;br&gt;@@ -22,7 +23,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Set a portlet mode, abstracted from the used Portlet API version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a portlet mode, abstracted from the used Portlet API version. This implementation assumes that the given
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * response is a {@link javax.portlet.StateAwareResponse}, as JSR286 implies.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to set the portlet mode on.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param portletMode The portlet mode to set.
&lt;br&gt;@@ -32,7 +34,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * Call a dispatcher's include method, abstracted from the used Portlet API version.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Call a dispatcher's include method, abstracted from the used Portlet API version. This implementation assumes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * that the response is a {@link javax.portlet.MimeResponse}, as JSR286 implies.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param dispatcher &amp;nbsp;The dispatcher to call the include method on.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param contentType The content type to set for the response.
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r833708----struts-sandbox-trunk-struts2-portlet2-plugin-src-main-java-org-apache-struts2-portlet-result-PortletResultHelperJSR286.java-tp26246359p26246359.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26246074</id>
	<title>svn commit: r833701 - in /struts/sandbox/trunk/struts2-portlet2-plugin/src: main/java/org/apache/struts2/components/ main/java/org/apache/struts2/portlet/context/ main/java/org/apache/struts2/portlet/dispatcher/ main/java/org/apache/struts2/portlet/res...</title>
	<published>2009-11-07T07:58:34Z</published>
	<updated>2009-11-07T07:58:34Z</updated>
	<author>
		<name>rgielen-2</name>
	</author>
	<content type="html">Author: rgielen
&lt;br&gt;Date: Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;New Revision: 833701
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=833701&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=833701&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;SB-110:
&lt;br&gt;Seperated pure JSR168 functionality from additional JSR286 stuff, using different Dispatcher portlet and automatic API level detection to support both Portlet 1.0 and 2.0 applications from the same plugin
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -22,10 +22,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionInvocation;
&lt;br&gt;+import com.opensymphony.xwork2.util.logging.Logger;
&lt;br&gt;+import com.opensymphony.xwork2.util.logging.LoggerFactory;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.Inject;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.StrutsException;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.dispatcher.mapper.ActionMapper;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.portlet.util.PortletUrlHelper;
&lt;br&gt;+import org.apache.struts2.portlet.util.PortletUrlHelperJSR286;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.portlet.context.PortletActionContext;
&lt;br&gt;&amp;nbsp;import org.apache.commons.lang.xwork.StringUtils;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -40,13 +43,22 @@
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;public class PortletUrlRenderer implements UrlRenderer {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private static final Logger LOG = LoggerFactory.getLogger(PortletUrlRenderer.class);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * The servlet renderer used when not executing in a portlet context.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private UrlRenderer servletRenderer = null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private PortletUrlHelper portletUrlHelper = null;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public PortletUrlRenderer() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.servletRenderer = new ServletUrlRenderer();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (PortletActionContext.isJSR268Supported()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.portletUrlHelper = new PortletUrlHelperJSR286();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.portletUrlHelper = new PortletUrlHelper();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;@Inject
&lt;br&gt;@@ -66,9 +78,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String result;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (onlyActionSpecified(urlComponent)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = PortletUrlHelper.buildUrl(urlComponent.getAction(), urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = portletUrlHelper.buildUrl(urlComponent.getAction(), urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(), urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if(onlyValueSpecified(urlComponent)){
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = PortletUrlHelper.buildResourceUrl(urlComponent.getValue(), urlComponent.getParameters());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = portletUrlHelper.buildResourceUrl(urlComponent.getValue(), urlComponent.getParameters());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	result = createDefaultUrl(urlComponent);
&lt;br&gt;@@ -99,7 +111,7 @@
&lt;br&gt;&amp;nbsp;		ActionInvocation ai = (ActionInvocation)urlComponent.getStack().getContext().get(
&lt;br&gt;&amp;nbsp;				ActionContext.ACTION_INVOCATION);
&lt;br&gt;&amp;nbsp;		String action = ai.getProxy().getActionName();
&lt;br&gt;-		result = PortletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(),
&lt;br&gt;+		result = portletUrlHelper.buildUrl(action, urlComponent.getNamespace(), urlComponent.getMethod(), urlComponent.getParameters(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;urlComponent.getPortletUrlType(), urlComponent.getPortletMode(), urlComponent.getWindowState());
&lt;br&gt;&amp;nbsp;		return result;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -138,7 +150,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (action != null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String result = PortletUrlHelper.buildUrl(action, namespace, null,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String result = portletUrlHelper.buildUrl(action, namespace, null,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;formComponent.getParameters(), type, formComponent.portletMode, formComponent.windowState);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;formComponent.addParameter(&amp;quot;action&amp;quot;, result);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/context/PortletActionContext.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -216,4 +216,13 @@
&lt;br&gt;&amp;nbsp;		return EVENT_PHASE.equals(getPhase());
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Whether JSR286 features are supported.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if {@link javax.portlet.PortletContext#getMajorVersion()} returns a value greater than 1
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public static boolean isJSR268Supported() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return getPortletContext().getMajorVersion() &amp;gt; 1;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -412,7 +412,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ServletContext servletContext = new PortletServletContext(getPortletContext());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HttpServletRequest servletRequest = new PortletServletRequest(request, getPortletContext());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HttpServletResponse servletResponse = new PortletServletResponse(response);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HttpServletResponse servletResponse = createPortletServletResponse(response);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(EVENT_PHASE.equals(phase)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	servletRequest = dispatcherUtils.wrapRequest(servletRequest, servletContext);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		if(servletRequest instanceof MultiPartRequestWrapper) {
&lt;br&gt;@@ -448,7 +448,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Returns a Map of all application attributes. Copies all attributes from
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * the {@link PortletActionContext}into an {@link ApplicationMap}.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;@@ -613,4 +613,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.actionMapper = actionMapper;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Method to create a PortletServletResponse matching the used Portlet API, to be overridden for JSR286 Dispatcher.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response The Response used for building the wrapper.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @return The wrapper response for Servlet bound usage.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected PortletServletResponse createPortletServletResponse( PortletResponse response ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new PortletServletResponse(response);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr286Dispatcher.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -4,6 +4,8 @@
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.logging.Logger;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.logging.LoggerFactory;
&lt;br&gt;&amp;nbsp;import static org.apache.struts2.portlet.PortletContstants.SERVE_RESOURCE_PHASE;
&lt;br&gt;+import org.apache.struts2.portlet.servlet.PortletServletResponse;
&lt;br&gt;+import org.apache.struts2.portlet.servlet.PortletServletResponseJSR286;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.portlet.*;
&lt;br&gt;&amp;nbsp;import java.io.IOException;
&lt;br&gt;@@ -54,4 +56,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return super.getDefaultActionPath(portletRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;@Override
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected PortletServletResponse createPortletServletResponse( PortletResponse response ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new PortletServletResponseJSR286(response);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResult.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -24,14 +24,7 @@
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.StringTokenizer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.portlet.PortletContext;
&lt;br&gt;-import javax.portlet.PortletException;
&lt;br&gt;-import javax.portlet.PortletMode;
&lt;br&gt;-import javax.portlet.PortletRequestDispatcher;
&lt;br&gt;-import javax.portlet.PortletRequest;
&lt;br&gt;-import javax.portlet.MimeResponse;
&lt;br&gt;-import javax.portlet.RenderResponse;
&lt;br&gt;-import javax.portlet.StateAwareResponse;
&lt;br&gt;+import javax.portlet.*;
&lt;br&gt;&amp;nbsp;import javax.servlet.ServletContext;
&lt;br&gt;&amp;nbsp;import javax.servlet.ServletException;
&lt;br&gt;&amp;nbsp;import javax.servlet.http.HttpServletRequest;
&lt;br&gt;@@ -71,14 +64,26 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	protected PortletMode portletMode;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PortletResultHelper resultHelper;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	public PortletResult() {
&lt;br&gt;&amp;nbsp;		super();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;determineResultHelper();
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	public PortletResult(String location) {
&lt;br&gt;&amp;nbsp;		super(location);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;determineResultHelper();
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private void determineResultHelper() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (PortletActionContext.isJSR268Supported()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.resultHelper = new PortletResultHelperJSR286();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.resultHelper = new PortletResultHelperJSR168();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	/**
&lt;br&gt;&amp;nbsp;	 * Execute the result. Obtains the
&lt;br&gt;&amp;nbsp;	 * {@link javax.portlet.PortletRequestDispatcher}from the
&lt;br&gt;@@ -128,28 +133,28 @@
&lt;br&gt;&amp;nbsp;	protected void executeActionResult(String finalLocation, ActionInvocation invocation) throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String phase = (PortletActionContext.isEvent()) ? &amp;quot;Event&amp;quot; : &amp;quot;Action&amp;quot;;
&lt;br&gt;&amp;nbsp;		if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Executing result in &amp;quot;+phase+&amp;quot; phase&amp;quot;);
&lt;br&gt;-		StateAwareResponse res = (StateAwareResponse)PortletActionContext.getResponse();
&lt;br&gt;&amp;nbsp;		Map sessionMap = invocation.getInvocationContext().getSession();
&lt;br&gt;&amp;nbsp;		if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Setting event render parameter: &amp;quot; + finalLocation);
&lt;br&gt;&amp;nbsp;		if (finalLocation.indexOf('?') != -1) {
&lt;br&gt;-			convertQueryParamsToRenderParams(res, finalLocation.substring(finalLocation.indexOf('?') + 1));
&lt;br&gt;+			convertQueryParamsToRenderParams(finalLocation.substring(finalLocation.indexOf('?') + 1));
&lt;br&gt;&amp;nbsp;			finalLocation = finalLocation.substring(0, finalLocation.indexOf('?'));
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletResponse response = PortletActionContext.getResponse();
&lt;br&gt;&amp;nbsp;		if (finalLocation.endsWith(&amp;quot;.action&amp;quot;)) {
&lt;br&gt;&amp;nbsp;			// View is rendered with a view action...luckily...
&lt;br&gt;&amp;nbsp;			finalLocation = finalLocation.substring(0, finalLocation.lastIndexOf(&amp;quot;.&amp;quot;));
&lt;br&gt;-			res.setRenderParameter(ACTION_PARAM, finalLocation);
&lt;br&gt;+			resultHelper.setRenderParameter(response, ACTION_PARAM, finalLocation);
&lt;br&gt;&amp;nbsp;		} else {
&lt;br&gt;&amp;nbsp;			// View is rendered outside an action...uh oh...
&lt;br&gt;-			res.setRenderParameter(ACTION_PARAM, &amp;quot;renderDirect&amp;quot;);
&lt;br&gt;+			resultHelper.setRenderParameter(response, ACTION_PARAM, &amp;quot;renderDirect&amp;quot;);
&lt;br&gt;&amp;nbsp;			sessionMap.put(RENDER_DIRECT_LOCATION, finalLocation);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		if(portletMode != null) {
&lt;br&gt;-			res.setPortletMode(portletMode);
&lt;br&gt;-			res.setRenderParameter(PortletActionConstants.MODE_PARAM, portletMode.toString());
&lt;br&gt;+			resultHelper.setPortletMode(response, portletMode);
&lt;br&gt;+			resultHelper.setRenderParameter(response, PortletActionConstants.MODE_PARAM, portletMode.toString());
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		else {
&lt;br&gt;-			res.setRenderParameter(PortletActionConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode()
&lt;br&gt;+			resultHelper.setRenderParameter(response, PortletActionConstants.MODE_PARAM, PortletActionContext.getRequest().getPortletMode()
&lt;br&gt;&amp;nbsp;					.toString());
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -160,13 +165,13 @@
&lt;br&gt;&amp;nbsp;	 * @param response
&lt;br&gt;&amp;nbsp;	 * @param queryParams
&lt;br&gt;&amp;nbsp;	 */
&lt;br&gt;-	protected static void convertQueryParamsToRenderParams(StateAwareResponse response, String queryParams) {
&lt;br&gt;+	protected void convertQueryParamsToRenderParams(String queryParams) {
&lt;br&gt;&amp;nbsp;		StringTokenizer tok = new StringTokenizer(queryParams, &amp;quot;&amp;&amp;quot;);
&lt;br&gt;&amp;nbsp;		while (tok.hasMoreTokens()) {
&lt;br&gt;&amp;nbsp;			String token = tok.nextToken();
&lt;br&gt;&amp;nbsp;			String key = token.substring(0, token.indexOf('='));
&lt;br&gt;&amp;nbsp;			String value = token.substring(token.indexOf('=') + 1);
&lt;br&gt;-			response.setRenderParameter(key, value);
&lt;br&gt;+			resultHelper.setRenderParameter(PortletActionContext.getResponse(), key, value);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -181,26 +186,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Executing mime result&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletContext ctx = PortletActionContext.getPortletContext();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletRequest req = PortletActionContext.getRequest();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MimeResponse res = (MimeResponse)PortletActionContext.getResponse();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.setContentType(contentType);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletResponse res = PortletActionContext.getResponse();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		if (StringUtils.isNotEmpty(title) &amp;&amp; res instanceof RenderResponse) {
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;((RenderResponse)res).setTitle(title);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Location: &amp;quot; + finalLocation);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletRequestDispatcher dispatcher;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (useDispatcherServlet) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;req.setAttribute(DISPATCH_TO, finalLocation);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletRequestDispatcher dispatcher = ctx.getNamedDispatcher(dispatcherServletName);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatcher = ctx.getNamedDispatcher(dispatcherServletName);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(dispatcher == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new PortletException(&amp;quot;Could not locate dispatcher servlet \&amp;quot;&amp;quot; + dispatcherServletName + &amp;quot;\&amp;quot;. Please configure it in your web.xml file&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatcher.include(req, res);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletRequestDispatcher dispatcher = ctx.getRequestDispatcher(finalLocation);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatcher = ctx.getRequestDispatcher(finalLocation);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (dispatcher == null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new PortletException(&amp;quot;Could not locate dispatcher for '&amp;quot; + finalLocation + &amp;quot;'&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatcher.include(req, res);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resultHelper.include( dispatcher, contentType, req, res );
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	/**
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java?rev=833701&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java?rev=833701&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelper.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -0,0 +1,41 @@
&lt;br&gt;+package org.apache.struts2.portlet.result;
&lt;br&gt;+
&lt;br&gt;+import javax.portlet.*;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * PortletResultHelper abstracts Portlet API result functions specific to the used API spec version.
&lt;br&gt;+ *
&lt;br&gt;+ * @author Rene Gielen
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+public interface PortletResultHelper {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a render parameter, abstracted from the used Portlet API version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response The response to set the parameter on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param key &amp;nbsp; &amp;nbsp; &amp;nbsp;The parameter key to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value &amp;nbsp; &amp;nbsp;The parameter value to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void setRenderParameter( PortletResponse response, String key, String value );
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a portlet mode, abstracted from the used Portlet API version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to set the portlet mode on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param portletMode The portlet mode to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void setPortletMode( PortletResponse response, PortletMode portletMode ) throws PortletModeException;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Call a dispatcher's include method, abstracted from the used Portlet API version.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dispatcher &amp;nbsp;The dispatcher to call the include method on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param contentType The content type to set for the response.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param request &amp;nbsp; &amp;nbsp; The request to use for including
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to use for including
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletResponse response ) throws IOException, PortletException;
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java?rev=833701&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java?rev=833701&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR168.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -0,0 +1,54 @@
&lt;br&gt;+package org.apache.struts2.portlet.result;
&lt;br&gt;+
&lt;br&gt;+import javax.portlet.*;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * PortletResultHelperJSR168 implements PortletResultHelper for Portlet 1.0 API (JSR168).
&lt;br&gt;+ *
&lt;br&gt;+ * @author Rene Gielen
&lt;br&gt;+ */
&lt;br&gt;+public class PortletResultHelperJSR168 implements PortletResultHelper {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a render parameter, abstracted from the used Portlet API version. This implementation assumes that the given
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * response must be a {@link javax.portlet.ActionResponse}, as JSR168 implies.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response The response to set the parameter on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param key &amp;nbsp; &amp;nbsp; &amp;nbsp;The parameter key to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value &amp;nbsp; &amp;nbsp;The parameter value to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setRenderParameter( PortletResponse response, String key, String value ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((ActionResponse) response).setRenderParameter(key, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a portlet mode, abstracted from the used Portlet API version. This implementation assumes that the given
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * response must be a {@link javax.portlet.ActionResponse}, as JSR168 implies.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to set the portlet mode on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param portletMode The portlet mode to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setPortletMode( PortletResponse response, PortletMode portletMode ) throws PortletModeException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((ActionResponse) response).setPortletMode(portletMode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Call a dispatcher's include method, abstracted from the used Portlet API version. This implementation assumes
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * that the given the request must be a {@link javax.portlet.RenderRequest} and the response must be a {@link
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * javax.portlet.RenderResponse}, as JSR168 implies.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dispatcher &amp;nbsp;The dispatcher to call the include method on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param contentType The content type to set for the response.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param request &amp;nbsp; &amp;nbsp; The request to use for including
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to use for including
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PortletResponse response ) throws IOException, PortletException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RenderRequest req = (RenderRequest) request;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RenderResponse res = (RenderResponse) response;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.setContentType(contentType);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatcher.include(req, res);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;\ No newline at end of file
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java?rev=833701&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java?rev=833701&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/result/PortletResultHelperJSR286.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -0,0 +1,49 @@
&lt;br&gt;+package org.apache.struts2.portlet.result;
&lt;br&gt;+
&lt;br&gt;+import javax.portlet.*;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * PortletResultHelperJSR286 implements PortletResultHelper for Portlet 2.0 API (JSR286).
&lt;br&gt;+ *
&lt;br&gt;+ * @author Rene Gielen
&lt;br&gt;+ */
&lt;br&gt;+public class PortletResultHelperJSR286 implements PortletResultHelper {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a render parameter, abstracted from the used Portlet API version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response The response to set the parameter on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param key &amp;nbsp; &amp;nbsp; &amp;nbsp;The parameter key to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param value &amp;nbsp; &amp;nbsp;The parameter value to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setRenderParameter( PortletResponse response, String key, String value ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((StateAwareResponse) response).setRenderParameter(key, value);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Set a portlet mode, abstracted from the used Portlet API version
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to set the portlet mode on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param portletMode The portlet mode to set.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setPortletMode( PortletResponse response, PortletMode portletMode ) throws PortletModeException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((StateAwareResponse) response).setPortletMode(portletMode);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * Call a dispatcher's include method, abstracted from the used Portlet API version.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; *
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param dispatcher &amp;nbsp;The dispatcher to call the include method on.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param contentType The content type to set for the response.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param request &amp;nbsp; &amp;nbsp; The request to use for including
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @param response &amp;nbsp; &amp;nbsp;The response to use for including
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; */
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void include( PortletRequestDispatcher dispatcher, String contentType, PortletRequest request,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PortletResponse response ) throws IOException, PortletException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MimeResponse res = (MimeResponse) response;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.setContentType(contentType);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dispatcher.include(request, res);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponse.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -24,17 +24,15 @@
&lt;br&gt;&amp;nbsp;import java.io.PrintWriter;
&lt;br&gt;&amp;nbsp;import java.util.Locale;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.portlet.MimeResponse;
&lt;br&gt;&amp;nbsp;import javax.portlet.PortletResponse;
&lt;br&gt;&amp;nbsp;import javax.portlet.RenderResponse;
&lt;br&gt;-import javax.portlet.ResourceResponse;
&lt;br&gt;&amp;nbsp;import javax.servlet.ServletOutputStream;
&lt;br&gt;&amp;nbsp;import javax.servlet.http.Cookie;
&lt;br&gt;&amp;nbsp;import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class PortletServletResponse implements HttpServletResponse {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	private PortletResponse portletResponse;
&lt;br&gt;+	protected PortletResponse portletResponse;
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;	public PortletServletResponse(PortletResponse portletResponse) {
&lt;br&gt;&amp;nbsp;		this.portletResponse = portletResponse;
&lt;br&gt;@@ -108,134 +106,125 @@
&lt;br&gt;&amp;nbsp;		throw new IllegalStateException(&amp;quot;Not allowed in a portlet&amp;quot;);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	public void flushBuffer() throws IOException {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			((MimeResponse)portletResponse).flushBuffer();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public int getBufferSize() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return ((MimeResponse)portletResponse).getBufferSize();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public String getCharacterEncoding() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return ((MimeResponse)portletResponse).getCharacterEncoding();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public String getContentType() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return ((MimeResponse)portletResponse).getContentType();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public Locale getLocale() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return ((MimeResponse)portletResponse).getLocale();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public ServletOutputStream getOutputStream() throws IOException {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return new PortletServletOutputStream(((MimeResponse)portletResponse).getPortletOutputStream());
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public PrintWriter getWriter() throws IOException {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return ((MimeResponse)portletResponse).getWriter();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public boolean isCommitted() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			return ((MimeResponse)portletResponse).isCommitted();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void reset() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			((MimeResponse)portletResponse).reset();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void resetBuffer() {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			((MimeResponse)portletResponse).resetBuffer();
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setBufferSize(int size) {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			((MimeResponse)portletResponse).setBufferSize(size);
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setCharacterEncoding(String charset) {
&lt;br&gt;-		if(portletResponse instanceof ResourceResponse) {
&lt;br&gt;-			((ResourceResponse)portletResponse).setCharacterEncoding(charset);
&lt;br&gt;-		}
&lt;br&gt;-		throw new IllegalStateException(&amp;quot;Only allowed in resource phase&amp;quot;);
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setContentLength(int len) {
&lt;br&gt;-		if(portletResponse instanceof ResourceResponse) {
&lt;br&gt;-			((ResourceResponse)portletResponse).setContentLength(len);
&lt;br&gt;-		}
&lt;br&gt;-		throw new IllegalStateException(&amp;quot;Only allowed in resource phase&amp;quot;);
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setContentType(String type) {
&lt;br&gt;-		if(portletResponse instanceof MimeResponse) {
&lt;br&gt;-			((MimeResponse)portletResponse).setContentType(type);
&lt;br&gt;-		}
&lt;br&gt;-		else {
&lt;br&gt;-			throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	public void setLocale(Locale loc) {
&lt;br&gt;-		if(portletResponse instanceof ResourceResponse) {
&lt;br&gt;-			((ResourceResponse)portletResponse).setLocale(loc);
&lt;br&gt;-		}
&lt;br&gt;-		throw new IllegalStateException(&amp;quot;Only allowed in resource phase&amp;quot;);
&lt;br&gt;-	}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void flushBuffer() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((RenderResponse)portletResponse).flushBuffer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getBufferSize() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((RenderResponse)portletResponse).getBufferSize();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getCharacterEncoding() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((RenderResponse)portletResponse).getCharacterEncoding();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getContentType() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((RenderResponse)portletResponse).getContentType();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Locale getLocale() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((RenderResponse)portletResponse).getLocale();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ServletOutputStream getOutputStream() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new PortletServletOutputStream(((RenderResponse)portletResponse).getPortletOutputStream());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public PrintWriter getWriter() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((RenderResponse)portletResponse).getWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isCommitted() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((RenderResponse)portletResponse).isCommitted();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void reset() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((RenderResponse)portletResponse).reset();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void resetBuffer() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((RenderResponse)portletResponse).resetBuffer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBufferSize(int size) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((RenderResponse)portletResponse).setBufferSize(size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setCharacterEncoding(String charset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in a portlet&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setContentLength(int len) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in a portlet&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setContentType(String type) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof RenderResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((RenderResponse)portletResponse).setContentType(type);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in event phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setLocale(Locale loc) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Not allowed in a portlet&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	public PortletResponse getPortletResponse() {
&lt;br&gt;&amp;nbsp;		return portletResponse;
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java?rev=833701&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java?rev=833701&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/servlet/PortletServletResponseJSR286.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -0,0 +1,152 @@
&lt;br&gt;+package org.apache.struts2.portlet.servlet;
&lt;br&gt;+
&lt;br&gt;+import javax.servlet.ServletOutputStream;
&lt;br&gt;+import java.io.IOException;
&lt;br&gt;+import java.io.PrintWriter;
&lt;br&gt;+import java.util.Locale;
&lt;br&gt;+import javax.portlet.ResourceResponse;
&lt;br&gt;+import javax.portlet.MimeResponse;
&lt;br&gt;+import javax.portlet.PortletResponse;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * PortletServletResponseJSR286.
&lt;br&gt;+ *
&lt;br&gt;+ * @author Rene Gielen
&lt;br&gt;+ */
&lt;br&gt;+public class PortletServletResponseJSR286 extends PortletServletResponse {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public PortletServletResponseJSR286( PortletResponse portletResponse ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(portletResponse);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void flushBuffer() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((MimeResponse)portletResponse).flushBuffer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int getBufferSize() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((MimeResponse)portletResponse).getBufferSize();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getCharacterEncoding() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((MimeResponse)portletResponse).getCharacterEncoding();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String getContentType() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((MimeResponse)portletResponse).getContentType();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Locale getLocale() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((MimeResponse)portletResponse).getLocale();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public ServletOutputStream getOutputStream() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new PortletServletOutputStream(((MimeResponse)portletResponse).getPortletOutputStream());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public PrintWriter getWriter() throws IOException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((MimeResponse)portletResponse).getWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean isCommitted() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return ((MimeResponse)portletResponse).isCommitted();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void reset() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((MimeResponse)portletResponse).reset();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void resetBuffer() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((MimeResponse)portletResponse).resetBuffer();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setBufferSize(int size) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((MimeResponse)portletResponse).setBufferSize(size);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setCharacterEncoding(String charset) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof ResourceResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((ResourceResponse)portletResponse).setCharacterEncoding(charset);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setContentLength(int len) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof ResourceResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((ResourceResponse)portletResponse).setContentLength(len);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setContentType(String type) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof MimeResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((MimeResponse)portletResponse).setContentType(type);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in render or resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setLocale(Locale loc) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(portletResponse instanceof ResourceResponse) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;((ResourceResponse)portletResponse).setLocale(loc);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new IllegalStateException(&amp;quot;Only allowed in resource phase&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -29,13 +29,7 @@
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.StringTokenizer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.portlet.BaseURL;
&lt;br&gt;-import javax.portlet.PortletMode;
&lt;br&gt;-import javax.portlet.PortletSecurityException;
&lt;br&gt;-import javax.portlet.PortletURL;
&lt;br&gt;-import javax.portlet.PortletRequest;
&lt;br&gt;-import javax.portlet.MimeResponse;
&lt;br&gt;-import javax.portlet.WindowState;
&lt;br&gt;+import javax.portlet.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.StrutsException;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.portlet.context.PortletActionContext;
&lt;br&gt;@@ -43,6 +37,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.logging.Logger;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.logging.LoggerFactory;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/**
&lt;br&gt;&amp;nbsp; * Helper class for creating Portlet URLs. Portlet URLs are fundamentally different from regular
&lt;br&gt;&amp;nbsp; * servlet URLs since they never target the application itself; all requests go through the portlet
&lt;br&gt;@@ -68,7 +63,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param state The WindowState of the URL.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return The URL String.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public static String buildUrl(String action, String namespace, String method, Map&amp;lt;String, Object&amp;gt; params,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String buildUrl(String action, String namespace, String method, Map&amp;lt;String, Object&amp;gt; params,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String type, String mode, String state) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return buildUrl(action, namespace, method, params, null, type, mode, state,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;true, true);
&lt;br&gt;@@ -77,21 +72,19 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Create a portlet URL with for the specified action and namespace.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;- &amp;nbsp; &amp;nbsp; * @see #buildUrl(String, String, Map, String, String, String)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; * @see #buildUrl(String, String, String, java.util.Map, String, String, String)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public static String buildUrl(String action, String namespace, String method, Map&amp;lt;String, Object&amp;gt; params,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String buildUrl(String action, String namespace, String method, Map&amp;lt;String, Object&amp;gt; params,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String scheme, String type, String portletMode, String windowState,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boolean includeContext, boolean encodeResult) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	StringBuffer resultingAction = new StringBuffer();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletRequest request = PortletActionContext.getRequest();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MimeResponse response = (MimeResponse)PortletActionContext.getResponse();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.debug(&amp;quot;Creating url. Action = &amp;quot; + action + &amp;quot;, Namespace = &amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;+ namespace + &amp;quot;, Type = &amp;quot; + type);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;namespace = prependNamespace(namespace, portletMode);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (StringUtils.isEmpty(portletMode)) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;portletMode = PortletActionContext.getRequest().getPortletMode().toString();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String result = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int paramStartIndex = action.indexOf('?');
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (paramStartIndex &amp;gt; 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String value = action;
&lt;br&gt;@@ -117,31 +110,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Resulting actionPath: &amp;quot; + resultingAction);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(ACTION_PARAM, new String[] { resultingAction.toString() });
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BaseURL url = null;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;action&amp;quot;.equalsIgnoreCase(type)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating action url&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = response.createActionURL();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else if(&amp;quot;resource&amp;quot;.equalsIgnoreCase(type)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating resource url&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	url = response.createResourceURL();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating render url&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = response.createRenderURL();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params.put(MODE_PARAM, new String[]{portletMode});
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url.setParameters(ensureParamsAreStringArrays(params));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final Map&amp;lt;String, String[]&amp;gt; portletParams = ensureParamsAreStringArrays(params);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;HTTPS&amp;quot;.equalsIgnoreCase(scheme)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url.setSecure(true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (PortletSecurityException e) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Cannot set scheme to https&amp;quot;, e);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object url = createUrl(scheme, type, portletParams);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(url instanceof PortletURL) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	try {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;final PortletURL portletUrl = (PortletURL) url;
&lt;br&gt;@@ -151,7 +123,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;		LOG.error(&amp;quot;Unable to set mode or state:&amp;quot; + e.getMessage(), e);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = url.toString();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String result = url.toString();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// TEMP BUG-WORKAROUND FOR DOUBLE ESCAPING OF AMPERSAND
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(result.indexOf(&amp;quot;&amp;amp;&amp;quot;) &amp;gt;= 0) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = result.replace(&amp;quot;&amp;amp;&amp;quot;, &amp;quot;&amp;&amp;quot;);
&lt;br&gt;@@ -160,6 +133,30 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected Object createUrl( String scheme, String type, Map&amp;lt;String, String[]&amp;gt; portletParams ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RenderResponse response = PortletActionContext.getRenderResponse();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletURL url;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;action&amp;quot;.equalsIgnoreCase(type)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating action url&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = response.createActionURL();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating render url&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = response.createRenderURL();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url.setParameters(portletParams);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;HTTPS&amp;quot;.equalsIgnoreCase(scheme)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url.setSecure(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch ( PortletSecurityException e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Cannot set scheme to https&amp;quot;, e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return url;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;/**
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * Prepend the namespace configuration for the specified namespace and PortletMode.
&lt;br&gt;@@ -169,7 +166,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; *
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return prepended namespace.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static String prependNamespace(String namespace, String portletMode) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private String prependNamespace(String namespace, String portletMode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringBuffer sb = new StringBuffer();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletMode mode = PortletActionContext.getRequest().getPortletMode();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(StringUtils.isNotEmpty(portletMode)) {
&lt;br&gt;@@ -204,7 +201,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @param value
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return encoded url to non Struts action resources.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public static String buildResourceUrl(String value, Map params) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public String buildResourceUrl(String value, Map params) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;StringBuffer sb = new StringBuffer();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Relative URLs are not allowed in a portlet
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!value.startsWith(&amp;quot;/&amp;quot;)) {
&lt;br&gt;@@ -229,8 +226,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new StrutsException(&amp;quot;Encoding &amp;quot;+ENCODING+&amp;quot; not found&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MimeResponse resp = (MimeResponse)PortletActionContext.getResponse();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletRequest req = PortletActionContext.getRequest();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return encodeUrl(sb, req);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String encodeUrl( StringBuffer sb, PortletRequest req ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RenderResponse resp = PortletActionContext.getRenderResponse();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return resp.encodeURL(req.getContextPath() + sb.toString());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -245,14 +246,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, String[]&amp;gt; result = null;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (params != null) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = new LinkedHashMap&amp;lt;String, String[]&amp;gt;(params.size());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Iterator&amp;lt;String&amp;gt; it = params.keySet().iterator();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (it.hasNext()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String key = it.next();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for ( String key : params.keySet() ) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object val = params.get(key);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (val instanceof String[]) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result.put(key, (String[])val);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result.put(key, (String[]) val);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result.put(key, new String[] { val.toString() });
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result.put(key, new String[]{val.toString()});
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;@@ -267,7 +266,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return The WindowState that mathces the &amp;lt;tt&amp;gt;windowState&amp;lt;/tt&amp;gt; String, or if
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * the String is blank, the current WindowState.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static WindowState getWindowState(PortletRequest portletReq,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private WindowState getWindowState(PortletRequest portletReq,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String windowState) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WindowState state = portletReq.getWindowState();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (StringUtils.isNotEmpty(windowState)) {
&lt;br&gt;@@ -293,7 +292,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * @return The PortletMode that mathces the &amp;lt;tt&amp;gt;portletMode&amp;lt;/tt&amp;gt; String, or if
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; * the String is blank, the current PortletMode.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */
&lt;br&gt;- &amp;nbsp; &amp;nbsp;private static PortletMode getPortletMode(PortletRequest portletReq,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private PortletMode getPortletMode(PortletRequest portletReq,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String portletMode) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletMode mode = portletReq.getPortletMode();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java?rev=833701&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java?rev=833701&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelperJSR286.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -0,0 +1,55 @@
&lt;br&gt;+package org.apache.struts2.portlet.util;
&lt;br&gt;+
&lt;br&gt;+import org.apache.struts2.portlet.context.PortletActionContext;
&lt;br&gt;+import javax.portlet.PortletRequest;
&lt;br&gt;+import javax.portlet.MimeResponse;
&lt;br&gt;+import javax.portlet.BaseURL;
&lt;br&gt;+import javax.portlet.PortletSecurityException;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.util.logging.Logger;
&lt;br&gt;+import com.opensymphony.xwork2.util.logging.LoggerFactory;
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * PortletUrlJSR286Helper.
&lt;br&gt;+ *
&lt;br&gt;+ * @author Rene Gielen
&lt;br&gt;+ */
&lt;br&gt;+public class PortletUrlHelperJSR286 extends PortletUrlHelper {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private static final Logger LOG = LoggerFactory.getLogger(PortletUrlHelperJSR286.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected String encodeUrl( StringBuffer sb, PortletRequest req ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MimeResponse resp = (MimeResponse) PortletActionContext.getResponse();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return resp.encodeURL(req.getContextPath() + sb.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;protected Object createUrl( String scheme, String type, Map&amp;lt;String, String[]&amp;gt; portletParams ) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MimeResponse response = (MimeResponse) PortletActionContext.getResponse();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BaseURL url;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;action&amp;quot;.equalsIgnoreCase(type)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating action url&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = response.createActionURL();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else if(&amp;quot;resource&amp;quot;.equalsIgnoreCase(type)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating resource url&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;	url = response.createResourceURL();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (LOG.isDebugEnabled()) LOG.debug(&amp;quot;Creating render url&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url = response.createRenderURL();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url.setParameters(portletParams);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (&amp;quot;HTTPS&amp;quot;.equalsIgnoreCase(scheme)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;url.setSecure(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch ( PortletSecurityException e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LOG.error(&amp;quot;Cannot set scheme to https&amp;quot;, e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return url;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/result/PortletResultTest.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -87,6 +87,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Constraint[] params = new Constraint[]{same(req), same(res)};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRd.expects(once()).method(&amp;quot;include&amp;quot;).with(params);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(once()).method(&amp;quot;getRequestDispatcher&amp;quot;).with(eq(&amp;quot;/WEB-INF/pages/testPage.jsp&amp;quot;)).will(returnValue(rd));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockResponse.expects(once()).method(&amp;quot;setContentType&amp;quot;).with(eq(&amp;quot;text/html&amp;quot;));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRequest.stubs().method(&amp;quot;getPortletMode&amp;quot;).will(returnValue(PortletMode.VIEW));
&lt;br&gt;@@ -118,6 +119,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockResponse.expects(once()).method(&amp;quot;setRenderParameter&amp;quot;).with(params);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRequest.stubs().method(&amp;quot;getPortletMode&amp;quot;).will(returnValue(PortletMode.VIEW));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActionContext ctx = ActionContext.getContext();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx.put(REQUEST, mockRequest.proxy());
&lt;br&gt;@@ -144,7 +146,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockResponse.expects(once()).method(&amp;quot;setRenderParameter&amp;quot;).with(params);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRequest.stubs().method(&amp;quot;getPortletMode&amp;quot;).will(returnValue(PortletMode.VIEW));
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;+ 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActionContext ctx = ActionContext.getContext();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map session = new HashMap();
&lt;br&gt;@@ -178,6 +181,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;params = new Constraint[]{eq(MODE_PARAM), eq(PortletMode.VIEW.toString())};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockResponse.expects(once()).method(&amp;quot;setRenderParameter&amp;quot;).with(params);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRequest.stubs().method(&amp;quot;getPortletMode&amp;quot;).will(returnValue(PortletMode.VIEW));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActionContext ctx = ActionContext.getContext();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -208,6 +212,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Constraint[] params = new Constraint[]{same(req), same(res)};
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRd.expects(once()).method(&amp;quot;include&amp;quot;).with(params);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(once()).method(&amp;quot;getRequestDispatcher&amp;quot;).with(eq(&amp;quot;/WEB-INF/pages/testPage.jsp&amp;quot;)).will(returnValue(rd));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockRequest.stubs().method(&amp;quot;getPortletMode&amp;quot;).will(returnValue(PortletMode.VIEW));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -83,7 +83,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderResponse);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletUrlHelper.buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(new PortletUrlHelper()).buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new HashMap(), null, null, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(PortletMode.VIEW, url.getPortletMode());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(WindowState.NORMAL, url.getWindowState());
&lt;br&gt;@@ -97,7 +97,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderResponse);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletUrlHelper.buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(new PortletUrlHelper()).buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new HashMap(), null, &amp;quot;edit&amp;quot;, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(PortletMode.EDIT, url.getPortletMode());
&lt;br&gt;@@ -112,7 +112,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderResponse);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletUrlHelper.buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(new PortletUrlHelper()).buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new HashMap(), null, null, &amp;quot;maximized&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(PortletMode.VIEW, url.getPortletMode());
&lt;br&gt;@@ -127,7 +127,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderResponse);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EasyMock.replay(renderRequest);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PortletUrlHelper.buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(new PortletUrlHelper()).buildUrl(&amp;quot;testAction&amp;quot;, null, null,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new HashMap(), &amp;quot;action&amp;quot;, null, null);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(PortletMode.VIEW, url.getPortletMode());
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java?rev=833701&amp;r1=833700&amp;r2=833701&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-portlet2-plugin/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Sat Nov &amp;nbsp;7 15:58:33 2009
&lt;br&gt;@@ -25,13 +25,7 @@
&lt;br&gt;&amp;nbsp;import java.util.Iterator;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.portlet.PortletMode;
&lt;br&gt;-import javax.portlet.PortletRequest;
&lt;br&gt;-import javax.portlet.PortletResponse;
&lt;br&gt;-import javax.portlet.PortletURL;
&lt;br&gt;-import javax.portlet.RenderRequest;
&lt;br&gt;-import javax.portlet.RenderResponse;
&lt;br&gt;-import javax.portlet.WindowState;
&lt;br&gt;+import javax.portlet.*;
&lt;br&gt;&amp;nbsp;import javax.servlet.http.HttpServletRequest;
&lt;br&gt;&amp;nbsp;import javax.servlet.http.HttpServletResponse;
&lt;br&gt;&amp;nbsp;import javax.servlet.jsp.PageContext;
&lt;br&gt;@@ -41,6 +35,8 @@
&lt;br&gt;&amp;nbsp;import org.apache.struts2.dispatcher.Dispatcher;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.portlet.PortletActionConstants;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.portlet.util.PortletUrlHelper;
&lt;br&gt;+import org.apache.struts2.StrutsStatics;
&lt;br&gt;+import static org.apache.struts2.StrutsStatics.*;
&lt;br&gt;&amp;nbsp;import org.jmock.Mock;
&lt;br&gt;&amp;nbsp;import org.jmock.cglib.MockObjectTestCase;
&lt;br&gt;&amp;nbsp;import org.jmock.core.Constraint;
&lt;br&gt;@@ -49,6 +45,8 @@
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionContext;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionInvocation;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.ActionProxy;
&lt;br&gt;+import static com.opensymphony.xwork2.ActionContext.SESSION;
&lt;br&gt;+import static com.opensymphony.xwork2.ActionContext.PARAMETERS;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStack;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.util.ValueStackFactory;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -73,12 +71,15 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;MockJspWriter mockJspWriter = null;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Mock mockCtx = null;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ValueStack stack = null;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static void main(String[] args) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestRunner.run(PortletUrlTagTest.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void setUp() throws Exception {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super.setUp();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -99,6 +100,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPageCtx = mock(PageContext.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletUrl = mock(PortletURL.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockJspWriter = new MockJspWriter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx = mock(PortletContext.class);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPageCtx.stubs().method(&amp;quot;getRequest&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((HttpServletRequest) mockHttpReq.proxy()));
&lt;br&gt;@@ -133,6 +135,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contextMap.put(PortletActionConstants.RESPONSE, mockPortletRes.proxy());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contextMap.put(PortletActionConstants.PHASE, PortletActionConstants.RENDER_PHASE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contextMap.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;contextMap.put(STRUTS_PORTLET_CONTEXT, mockCtx.proxy());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActionContext ctx = new ActionContext(contextMap);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ctx.setValueStack(stack);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ActionContext.setContext(ctx);
&lt;br&gt;@@ -156,6 +159,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;createRenderURL&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((PortletURL) mockPortletUrl.proxy()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map paramMap = new HashMap();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{&amp;quot;/view/testAction&amp;quot;});
&lt;br&gt;@@ -180,6 +184,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;createRenderURL&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((PortletURL) mockPortletUrl.proxy()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map paramMap = new HashMap();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{&amp;quot;/help/testAction&amp;quot;});
&lt;br&gt;@@ -203,6 +208,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;createRenderURL&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((PortletURL) mockPortletUrl.proxy()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map paramMap = new HashMap();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{&amp;quot;/view/testAction&amp;quot;});
&lt;br&gt;@@ -226,6 +232,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;createActionURL&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((PortletURL) mockPortletUrl.proxy()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map paramMap = new HashMap();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{&amp;quot;/view/testAction&amp;quot;});
&lt;br&gt;@@ -245,6 +252,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockHttpReq.stubs().method(&amp;quot;getQueryString&amp;quot;).will(returnValue(&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;encodeURL&amp;quot;).will(returnValue(&amp;quot;/contextPath/image.gif&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockJspWriter.setExpectedData(&amp;quot;/contextPath/image.gif&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tag.setValue(&amp;quot;image.gif&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tag.doStartTag();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tag.doEndTag();
&lt;br&gt;@@ -255,6 +263,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockHttpReq.stubs().method(&amp;quot;getQueryString&amp;quot;).will(returnValue(&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;encodeURL&amp;quot;).with(eq(&amp;quot;/contextPath/image.gif?testParam1=testValue1&amp;quot;)).will(returnValue(&amp;quot;/contextPath/image.gif?testParam1=testValue1&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockJspWriter.setExpectedData(&amp;quot;/contextPath/image.gif?testParam1=testValue1&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ParamTag paramTag = new ParamTag();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramTag.setPageContext((PageContext)mockPageCtx.proxy());
&lt;br&gt;@@ -273,6 +282,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockHttpReq.stubs().method(&amp;quot;getQueryString&amp;quot;).will(returnValue(&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;encodeURL&amp;quot;).with(eq(&amp;quot;/contextPath/image.gif?testParam1=testValue1&amp;testParam2=testValue2&amp;quot;)).will(returnValue(&amp;quot;/contextPath/image.gif?testParam1=testValue1&amp;testParam2=testValue2&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockJspWriter.setExpectedData(&amp;quot;/contextPath/image.gif?testParam1=testValue1&amp;testParam2=testValue2&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ParamTag paramTag = new ParamTag();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramTag.setPageContext((PageContext)mockPageCtx.proxy());
&lt;br&gt;@@ -299,6 +309,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	mockHttpReq.stubs().method(&amp;quot;getQueryString&amp;quot;).will(returnValue(&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;createRenderURL&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((PortletURL) mockPortletUrl.proxy()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	tag.setAction(&amp;quot;testAction&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	Map paramMap = new HashMap();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paramMap.put(PortletActionConstants.ACTION_PARAM, new String[]{&amp;quot;/view/testAction!input&amp;quot;});
&lt;br&gt;@@ -316,6 +327,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	mockHttpReq.stubs().method(&amp;quot;getQueryString&amp;quot;).will(returnValue(&amp;quot;&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockPortletRes.expects(once()).method(&amp;quot;createRenderURL&amp;quot;).will(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;returnValue((PortletURL) mockPortletUrl.proxy()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mockCtx.expects(atLeastOnce()).method(&amp;quot;getMajorVersion&amp;quot;).will(returnValue(1));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	Map paramMap = new HashMap();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;	Mock mockActionProxy = mock(ActionProxy.class);
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r833701---in--struts-sandbox-trunk-struts2-portlet2-plugin-src%3A-main-java-org-apache-struts2-components--main-java-org-apache-struts2-portlet-context--main-java-org-apache-struts2-portlet-dispatcher--main-java-org-apache-struts2-portlet-res...-tp26246074p26246074.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26246065</id>
	<title>[jira] Created: (SB-110) Refactor Portlet 2.0 Plugin to seperate JSR286 functionionality, in order  to both serve JSR168 and JSR286 portlets depending on container API provided</title>
	<published>2009-11-07T07:57:14Z</published>
	<updated>2009-11-07T07:57:14Z</updated>
	<author>
		<name>JIRA jira@apache.org</name>
	</author>
	<content type="html">Refactor Portlet 2.0 Plugin to seperate JSR286 functionionality, in order &amp;nbsp;to both serve JSR168 and JSR286 portlets depending on container API provided
&lt;br&gt;-------------------------------------------------------------------------------------------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key: SB-110
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL: &lt;a href=&quot;https://issues.apache.org/struts/browse/SB-110&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://issues.apache.org/struts/browse/SB-110&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Project: Struts Sandbox
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Issue Type: Improvement
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Reporter: Rene Gielen
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Assignee: Rene Gielen
&lt;br&gt;&lt;br&gt;&lt;br&gt;Seperate pure JSR168 functionality from additional JSR286 stuff, using different Dispatcher portlet and automatic API level detection to support both Portlet 1.0 and 2.0 applications from the same plugin
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;This message is automatically generated by JIRA.
&lt;br&gt;-
&lt;br&gt;You can reply to this email to add a comment to the issue online.
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-jira--Created%3A-%28SB-110%29-Refactor-Portlet-2.0-Plugin-to-seperate-JSR286-functionionality%2C-in-order--to-both-serve-JSR168-and-JSR286-portlets-depending-on-container-API-provided-tp26246065p26246065.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26243176</id>
	<title>[OSS Bamboo] Struts 2 SVN - Main Build (Java 6) build 1007 has FAILED (1 tests failed, no failures were new)</title>
	<published>2009-11-07T01:21:48Z</published>
	<updated>2009-11-07T01:21:48Z</updated>
	<author>
		<name>Atlassian Open Source Bamboo</name>
	</author>
	<content type="html">&lt;div&gt;

&lt;font size=&quot;2&quot; color=&quot;black&quot; face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;font-family: Arial, sans-serif;font-size: 13px;color:#000&quot;&gt;
&lt;table align=&quot;center&quot; border=&quot;0&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;
&lt;tr&gt;
	&lt;td style=&quot;vertical-align:top&quot;&gt;
                &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ffe6e7;border-top:1px solid #eec0c0;border-bottom:1px solid #eec0c0;color:#d62829;&quot;&gt;
        &lt;tr&gt;
        &lt;td width=&quot;20&quot; style=&quot;vertical-align:top;padding:5px 0 5px 10px&quot;&gt;
            &lt;img src=&quot;http://opensource.bamboo.atlassian.com/images/jt/icn_plan_failed.gif&quot; width=&quot;15&quot; height=&quot;15&quot;&gt;
        &lt;/td&gt;
        &lt;td width=&quot;100%&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#d62829;padding:5px 10px&quot;&gt;
            &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/&quot; style=&quot;font-family: Arial, sans-serif; font-size: 15px; font-weight:bold; color:#d62829&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;STRUTS-MAINJ6-1007&lt;/a&gt;
            &lt;span class=&quot;failed&quot; style=&quot;font-family: Arial, sans-serif; font-size: 14px;&quot;&gt;failed.&lt;/span&gt;
            &lt;span class=&quot;failed&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;&quot;&gt;
            &lt;br /&gt;    This build occured because it is a dependant of &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/XWORK-MAIN-436&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;XWORK-MAIN-436&lt;/a&gt;.
                &lt;br /&gt;&lt;strong&gt;1/1133&lt;/strong&gt; tests failed.
            &lt;/span&gt;
        &lt;/td&gt;
        &lt;/tr&gt;
        &lt;/table&gt;
        &lt;br&gt;

       &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ecf1f7;border-top:1px solid #bbd0e5;border-bottom:1px solid #bbd0e5;color:#036;&quot;&gt;
            &lt;tr&gt;
                &lt;td width=&quot;60%&quot; style=&quot;font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036;padding:5px 10px&quot;&gt;
                    &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/commit&quot; style=&quot;text-decoration: none; font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Code Changes&lt;/a&gt;
                &lt;/td&gt;
                &lt;td width=&quot;40%&quot; style=&quot;font-family: Arial, sans-serif;text-align:right;font-size:13px;color:#036;padding:5px 10px&quot;&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
       &lt;/table&gt;
       &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
             &lt;tr&gt;&lt;td width=&quot;100%&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#000;vertical-align:top;padding:10px 10px 0px 10px&quot;&gt;
                     This build does not have any commits.
             &lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;&lt;br&gt;
            &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ecf1f7;border-top:1px solid #bbd0e5;border-bottom:1px solid #bbd0e5;color:#036;&quot;&gt;
                &lt;tr&gt;
                    &lt;td width=&quot;60%&quot; style=&quot;font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036;vertical-align:top;padding:5px 10px&quot;&gt;
                        &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/test&quot; style=&quot;text-decoration: none; font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Tests&lt;/a&gt;
                    &lt;/td&gt;
                    &lt;td width=&quot;40%&quot; style=&quot;font-family: Arial, sans-serif;text-align:right;font-size:13px;color:#036;padding:5px 10px&quot;&gt;
                        &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/test&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;See full test details&lt;/a&gt;&lt;img src=&quot;http://opensource.bamboo.atlassian.com/images/icons/more.gif&quot; width=&quot;15&quot; height=&quot;15&quot; style=&quot;vertical-align:middle;padding:2px&quot;&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
            &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;


                    &lt;tr&gt;
                        &lt;td colspan=&quot;2&quot; width=&quot;100%&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; font-weight:bold; color:#000;vertical-align:top;padding:10px 0 0 10px&quot;&gt;
                            Failed Tests (1)
                        &lt;/td&gt;
                    &lt;/tr&gt;
&lt;tr&gt;
&lt;td width=&quot;20&quot; style=&quot;vertical-align:top;padding:5px 0 5px 10px&quot;&gt;
&lt;img src=&quot;http://opensource.bamboo.atlassian.com/images/jt/icn_plan_failed.gif&quot; width=&quot;15&quot; height=&quot;15&quot;&gt;
&lt;/td&gt;
&lt;td width=&quot;100%&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#000;vertical-align:top;padding:5px 10px&quot;&gt;
&lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/test/org.apache.struts2.EmbeddedJSPResultTest&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;color:#000&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;EmbeddedJSPResultTest&lt;/a&gt; :
&lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/test/org.apache.struts2.EmbeddedJSPResultTest:testKeyInContext&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;color:#000&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Key in context&lt;/a&gt;
&lt;span style=&quot;color:#999&quot;&gt;(Existing)&lt;/span&gt;
&lt;/td&gt;
&lt;/tr&gt;            &lt;/table&gt;&lt;br&gt;


            &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ecf1f7;border-top:1px solid #bbd0e5;border-bottom:1px solid #bbd0e5;color:#036;&quot;&gt;
                &lt;tr&gt;
                    &lt;td width=&quot;60%&quot; style=&quot;font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036;padding:5px 10px&quot;&gt;
                        &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/log&quot; style=&quot;text-decoration: none; font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Error Summary&lt;/a&gt;
                    &lt;/td&gt;
                    &lt;td width=&quot;40%&quot; style=&quot;font-family: Arial, sans-serif;text-align:right;font-size:13px;color:#036;padding:5px 10px&quot;&gt;
                        &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/log&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;See full build log&lt;/a&gt;
                        &lt;img src=&quot;http://opensource.bamboo.atlassian.com/images/icons/more.gif&quot; width=&quot;15&quot; height=&quot;15&quot; style=&quot;vertical-align:middle;padding:2px&quot;&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;

            &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#f2f2f2;border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;color:#000;margin-top:5px;padding:10px&quot;&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    [INFO] ------------------------------------------------------------------------&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    [ERROR] BUILD FAILURE&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    [INFO] ------------------------------------------------------------------------&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    [INFO] Compilation failure&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    Failure executing javac, but could not parse the error:&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    The system is out of resources.&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    Consult the following stack trace for details.&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    java.lang.OutOfMemoryError: PermGen space&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.lang.ClassLoader.defineClass1(Native Method)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.lang.ClassLoader.defineClass(ClassLoader.java:621)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.net.URLClassLoader.access$000(URLClassLoader.java:56)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.net.URLClassLoader$1.run(URLClassLoader.java:195)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.net.URLClassLoader.findClass(URLClassLoader.java:188)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.codehaus.plexus.compiler.javac.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:56)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at com.sun.tools.javac.main.JavaCompiler.&amp;lt;init&amp;gt;(JavaCompiler.java:314)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:72)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at com.sun.tools.javac.main.Main.compile(Main.java:340)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at com.sun.tools.javac.main.Main.compile(Main.java:279)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at com.sun.tools.javac.main.Main.compile(Main.java:270)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at com.sun.tools.javac.Main.compile(Main.java:87)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at java.lang.reflect.Method.invoke(Method.java:597)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.plugin.TestCompilerMojo.execute(TestCompilerMojo.java:102)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:483)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:540)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:519)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:332)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:181)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356)&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    &lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    [INFO] ------------------------------------------------------------------------&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
               &lt;tr&gt;
                &lt;td width=&quot;100%&quot; style=&quot;font-family:'Courier New', Courier, monospace; font-size: 12px; color:#000;vertical-align:top&quot;&gt;
                    [INFO] For more information, run Maven with the -e switch&lt;br /&gt;
                &lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
            &lt;br /&gt;

        &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot; align=&quot;center&quot; style=&quot;font-family: Arial, sans-serif;text-align:center;font-size:11px;font-weight:bold;color:#999;vertical-align:top;padding:20px;padding-bottom:10px&quot;&gt;
                Email generated by &lt;a href=&quot;http://opensource.bamboo.atlassian.com&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11px; color:#999&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Atlassian Bamboo&lt;/a&gt; - if you wish to stop receiving these emails edit your  &lt;a href=&quot;http://opensource.bamboo.atlassian.com/profile/userNotifications.action&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11px; color:#999&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;user profile&lt;/a&gt; or &lt;a href=&quot;http://opensource.bamboo.atlassian.com/viewAdministrators.action&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11px; color:#999&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;notify your administrator&lt;/a&gt;
            &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;&lt;td colspan=&quot;2&quot; align=&quot;center&quot; style=&quot;font-family: Arial, sans-serif;text-align:center;font-size:11px;font-weight:bold;color:#999;vertical-align:top&quot;&gt;
                &lt;a href=&quot;http://www.atlassian.com/software/ideconnector/&quot; style=&quot;font-family: Arial, sans-serif; font-size: 11px; color:#999&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Want this information in your IDE?&lt;/a&gt;
            &lt;/td&gt;&lt;/tr&gt;
        &lt;/table&gt;
    &lt;/td&gt;
    &lt;td width=&quot;150&quot; style=&quot;vertical-align:top&quot;&gt;
        &lt;table width=&quot;150&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ecf1f7;border-top:1px solid #bbd0e5;border-bottom:1px solid #bbd0e5;color:#036;&quot;&gt;
            &lt;tr&gt;
                &lt;td style=&quot;font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036;vertical-align:top;padding:5px 10px&quot;&gt;
                    Actions
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
        &lt;table width=&quot;150&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#f5f9fc;border-bottom:1px solid #bbd0e5;&quot;&gt;
            &lt;tr&gt;
                &lt;td style=&quot;font-family: Ariel, sans-serif; font-size: 13px; color:#036;vertical-align:top;padding:5px 10px;line-height:1.7&quot;&gt;
                    &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;View Online&lt;/a&gt;
                    &lt;br&gt;
                    &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/comment&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Add Comments&lt;/a&gt;
                    &lt;br&gt;
                    &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1007/artifact&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;View Artifacts&lt;/a&gt;
                    &lt;br&gt;
                    &lt;a href=&quot;http://opensource.bamboo.atlassian.com/download/STRUTS-MAINJ6/build_logs/STRUTS-MAINJ6-1007.log&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Download Logs&lt;/a&gt;
                    &lt;br&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
    &lt;/td&gt;
&lt;tr&gt;
&lt;/table&gt;
&lt;/font&gt;
&lt;/div&gt;

</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-OSS-Bamboo--Struts-2-SVN---Main-Build-%28Java-6%29-build-1007-has-FAILED-%281-tests-failed%2C-no-failures-were-new%29-tp26243176p26243176.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26242770</id>
	<title>Re: ognl 2.7.3 performance</title>
	<published>2009-11-06T23:54:00Z</published>
	<updated>2009-11-06T23:54:00Z</updated>
	<author>
		<name>Musachy Barroso</name>
	</author>
	<content type="html">in 2.1.6 I think.
&lt;br&gt;&lt;br&gt;On Fri, Nov 6, 2009 at 11:47 PM, Chris Pratt &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242770&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thechrispratt@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Good to know, thanks.  When was that changed?  I use 2.1.6 in my personal
&lt;br&gt;&amp;gt; project, but we're still stuck on 2.0.14 at work.
&lt;br&gt;&amp;gt;  (*Chris*)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Fri, Nov 6, 2009 at 11:33 PM, Dale Newfield &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242770&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dale@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Chris Pratt wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; In the struts.xml file you can use ${} to run an OGNL expression and
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; access
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; things from the Action (actually the value stack, but we're trying to keep
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; it simple here)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; JSYK, %{} now works as expected in struts.xml.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; -Dale
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242770&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242770&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242770&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242770&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26242770.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26242751</id>
	<title>Re: ognl 2.7.3 performance</title>
	<published>2009-11-06T23:47:58Z</published>
	<updated>2009-11-06T23:47:58Z</updated>
	<author>
		<name>Chris Pratt</name>
	</author>
	<content type="html">Good to know, thanks. &amp;nbsp;When was that changed? &amp;nbsp;I use 2.1.6 in my personal
&lt;br&gt;project, but we're still stuck on 2.0.14 at work.
&lt;br&gt;&amp;nbsp; (*Chris*)
&lt;br&gt;&lt;br&gt;On Fri, Nov 6, 2009 at 11:33 PM, Dale Newfield &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242751&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dale@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Chris Pratt wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; In the struts.xml file you can use ${} to run an OGNL expression and
&lt;br&gt;&amp;gt;&amp;gt; access
&lt;br&gt;&amp;gt;&amp;gt; things from the Action (actually the value stack, but we're trying to keep
&lt;br&gt;&amp;gt;&amp;gt; it simple here)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; JSYK, %{} now works as expected in struts.xml.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; -Dale
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242751&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242751&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26242751.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26242684</id>
	<title>Re: ognl 2.7.3 performance</title>
	<published>2009-11-06T23:33:19Z</published>
	<updated>2009-11-06T23:33:19Z</updated>
	<author>
		<name>DNewfield</name>
	</author>
	<content type="html">Chris Pratt wrote:
&lt;br&gt;&amp;gt; In the struts.xml file you can use ${} to run an OGNL expression and access
&lt;br&gt;&amp;gt; things from the Action (actually the value stack, but we're trying to keep
&lt;br&gt;&amp;gt; it simple here)
&lt;br&gt;&lt;br&gt;JSYK, %{} now works as expected in struts.xml.
&lt;br&gt;&lt;br&gt;-Dale
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242684&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242684&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26242684.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26242115</id>
	<title>Re: ognl 2.7.3 performance</title>
	<published>2009-11-06T20:51:31Z</published>
	<updated>2009-11-06T20:51:31Z</updated>
	<author>
		<name>Musachy Barroso</name>
	</author>
	<content type="html">What Chris said. Plus, adopting a standard is a good idea, UEL could
&lt;br&gt;even be the default EL for Struts 3, and OGNL a plugin by that time :)
&lt;br&gt;&lt;br&gt;musachy
&lt;br&gt;&lt;br&gt;On Fri, Nov 6, 2009 at 6:25 PM, Chris Pratt &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;thechrispratt@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; It's slow and confusing.  The slow part is pretty self explanatory, but the
&lt;br&gt;&amp;gt; confusing part might take more explanation.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is what I have to try to get across to my junior developers that are
&lt;br&gt;&amp;gt; trying to grasp not only Struts, but Spring, Tiles and our own code as well.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; In the struts.xml file you can use ${} to run an OGNL expression and access
&lt;br&gt;&amp;gt; things from the Action (actually the value stack, but we're trying to keep
&lt;br&gt;&amp;gt; it simple here)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If you see ${} in a .jsp file, that's no longer OGNL, it's JSTL EL and that
&lt;br&gt;&amp;gt; can be used anywhere in JSP, except within the Struts tags.  For them, and
&lt;br&gt;&amp;gt; them only, you have to use %{} to execute the same OGNL you saw in the
&lt;br&gt;&amp;gt; struts.xml (I know you don't always have to, but it's easier then explaining
&lt;br&gt;&amp;gt; when you do and when you don't).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; And then it gets more confusing when you try to describe how to format
&lt;br&gt;&amp;gt; values like dates and currencies, and on and on...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; For me, I've never needed anything that good old JSTL EL didn't provide.  In
&lt;br&gt;&amp;gt; fact, I LIKE the fact that JSTL EL prevents me from accessing anything but
&lt;br&gt;&amp;gt; bean properties.  I think it opens up a whole world of security hurt when
&lt;br&gt;&amp;gt; you have an interpreted language that potentially allows accessing any Java
&lt;br&gt;&amp;gt; method remotely.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; That's just my 2 cents, but I'm very glad to see Musachy take up this
&lt;br&gt;&amp;gt; mantle!
&lt;br&gt;&amp;gt;  (*Chris*)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Fri, Nov 6, 2009 at 6:14 PM, Alex Siman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksandr.siman@...&lt;/a&gt;&amp;gt;wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; What was the reason(s) to get rid of OGNL? Just interesting.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Musachy Barroso wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; Cool news. So I have been playing with the JUEL plugin (JUEL is pretty
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; nice, we can talk about that later.), and here are a few things I got
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; working so far:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; 1. Value stack operations (get/set)
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; 2. I18n (there is a custom 'getText()' that works like it does now)
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; 3. Parameter population
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; 4. Most of Showcase
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; 5. Method invocation in expressions
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; yeah, you read #3 right. My new parameter binder stuff is useless(3
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; days in trunk and already getting deleted whoa) and I will remove it
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; from xwork. I handled to implement the parameter binding with the JUEL
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; plugin, and it seems to be working nicely, population of null elements
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; and type conversion. On top of that I extended JUEL to support a &amp;quot;#&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; operator, so an OGNL expression like
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; ${#obj.x} or #{#obj.x}
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; does what you would expect it to do(no standard compliant but handy).
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; This enables us to run a rather large number of existing OGNL
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; expressions without changes. I gave it a try on showcase and it seems
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; to run most of it. I will be adding more test and cleanup the code and
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; commit it. I also &amp;quot;implemented&amp;quot; (more like &amp;quot;copied&amp;quot;, merging code from
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; xwork and OGNL) a ReflectionProvider which does not need OGNL.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; //all hail our new UEL overlord
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; musachy
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; On Sat, Jul 18, 2009 at 3:06 PM, Musachy Barroso &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;musachy@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Due to this fix: &lt;a href=&quot;http://jira.opensymphony.com/browse/OGNL-141&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.opensymphony.com/browse/OGNL-141&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Ognl 2.7.3 performance is a lot better than 2.6.11, on my rough test,
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the avg time spent in OgnlRuntime.invokeMethod(...) dropped from
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 630,726 ms (2.6.11) to 117,108 (2.7.3) ms, (100 threads, 2s ramp-up
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; period, 100 iterations) . If we are not going to use the new bycode
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; stuff, then the upgrade doesn't seem that risky. Should we upgrade, do
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; some testing, and release 2.1.8 (delay release a bit), or leave that
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; for 2.1.9? With the bytecode stuff out the way I am inclined to just
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; upgrade to 2.7.3 at once, and upgrade freemarker also.
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; musachy
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;quot;Hey you! Would you help me to carry the stone?&amp;quot; Pink Floyd
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt;&amp;gt; View this message in context:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26234947.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26234947.html&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Sent from the Struts - Dev mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26242115&amp;i=8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26242115.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26241558</id>
	<title>Re: ognl 2.7.3 performance</title>
	<published>2009-11-06T18:25:08Z</published>
	<updated>2009-11-06T18:25:08Z</updated>
	<author>
		<name>Chris Pratt</name>
	</author>
	<content type="html">It's slow and confusing. &amp;nbsp;The slow part is pretty self explanatory, but the
&lt;br&gt;confusing part might take more explanation.
&lt;br&gt;&lt;br&gt;This is what I have to try to get across to my junior developers that are
&lt;br&gt;trying to grasp not only Struts, but Spring, Tiles and our own code as well.
&lt;br&gt;&lt;br&gt;In the struts.xml file you can use ${} to run an OGNL expression and access
&lt;br&gt;things from the Action (actually the value stack, but we're trying to keep
&lt;br&gt;it simple here)
&lt;br&gt;&lt;br&gt;If you see ${} in a .jsp file, that's no longer OGNL, it's JSTL EL and that
&lt;br&gt;can be used anywhere in JSP, except within the Struts tags. &amp;nbsp;For them, and
&lt;br&gt;them only, you have to use %{} to execute the same OGNL you saw in the
&lt;br&gt;struts.xml (I know you don't always have to, but it's easier then explaining
&lt;br&gt;when you do and when you don't).
&lt;br&gt;&lt;br&gt;And then it gets more confusing when you try to describe how to format
&lt;br&gt;values like dates and currencies, and on and on...
&lt;br&gt;&lt;br&gt;For me, I've never needed anything that good old JSTL EL didn't provide. &amp;nbsp;In
&lt;br&gt;fact, I LIKE the fact that JSTL EL prevents me from accessing anything but
&lt;br&gt;bean properties. &amp;nbsp;I think it opens up a whole world of security hurt when
&lt;br&gt;you have an interpreted language that potentially allows accessing any Java
&lt;br&gt;method remotely.
&lt;br&gt;&lt;br&gt;That's just my 2 cents, but I'm very glad to see Musachy take up this
&lt;br&gt;mantle!
&lt;br&gt;&amp;nbsp; (*Chris*)
&lt;br&gt;&lt;br&gt;On Fri, Nov 6, 2009 at 6:14 PM, Alex Siman &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26241558&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aleksandr.siman@...&lt;/a&gt;&amp;gt;wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; What was the reason(s) to get rid of OGNL? Just interesting.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Musachy Barroso wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Cool news. So I have been playing with the JUEL plugin (JUEL is pretty
&lt;br&gt;&amp;gt; &amp;gt; nice, we can talk about that later.), and here are a few things I got
&lt;br&gt;&amp;gt; &amp;gt; working so far:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; 1. Value stack operations (get/set)
&lt;br&gt;&amp;gt; &amp;gt; 2. I18n (there is a custom 'getText()' that works like it does now)
&lt;br&gt;&amp;gt; &amp;gt; 3. Parameter population
&lt;br&gt;&amp;gt; &amp;gt; 4. Most of Showcase
&lt;br&gt;&amp;gt; &amp;gt; 5. Method invocation in expressions
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; yeah, you read #3 right. My new parameter binder stuff is useless(3
&lt;br&gt;&amp;gt; &amp;gt; days in trunk and already getting deleted whoa) and I will remove it
&lt;br&gt;&amp;gt; &amp;gt; from xwork. I handled to implement the parameter binding with the JUEL
&lt;br&gt;&amp;gt; &amp;gt; plugin, and it seems to be working nicely, population of null elements
&lt;br&gt;&amp;gt; &amp;gt; and type conversion. On top of that I extended JUEL to support a &amp;quot;#&amp;quot;
&lt;br&gt;&amp;gt; &amp;gt; operator, so an OGNL expression like
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ${#obj.x} or #{#obj.x}
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; does what you would expect it to do(no standard compliant but handy).
&lt;br&gt;&amp;gt; &amp;gt; This enables us to run a rather large number of existing OGNL
&lt;br&gt;&amp;gt; &amp;gt; expressions without changes. I gave it a try on showcase and it seems
&lt;br&gt;&amp;gt; &amp;gt; to run most of it. I will be adding more test and cleanup the code and
&lt;br&gt;&amp;gt; &amp;gt; commit it. I also &amp;quot;implemented&amp;quot; (more like &amp;quot;copied&amp;quot;, merging code from
&lt;br&gt;&amp;gt; &amp;gt; xwork and OGNL) a ReflectionProvider which does not need OGNL.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; //all hail our new UEL overlord
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; musachy
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Sat, Jul 18, 2009 at 3:06 PM, Musachy Barroso &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26241558&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;musachy@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Due to this fix: &lt;a href=&quot;http://jira.opensymphony.com/browse/OGNL-141&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.opensymphony.com/browse/OGNL-141&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Ognl 2.7.3 performance is a lot better than 2.6.11, on my rough test,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; the avg time spent in OgnlRuntime.invokeMethod(...) dropped from
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; 630,726 ms (2.6.11) to 117,108 (2.7.3) ms, (100 threads, 2s ramp-up
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; period, 100 iterations) . If we are not going to use the new bycode
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; stuff, then the upgrade doesn't seem that risky. Should we upgrade, do
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; some testing, and release 2.1.8 (delay release a bit), or leave that
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; for 2.1.9? With the bytecode stuff out the way I am inclined to just
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; upgrade to 2.7.3 at once, and upgrade freemarker also.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; musachy
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; &amp;quot;Hey you! Would you help me to carry the stone?&amp;quot; Pink Floyd
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; &amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26241558&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26241558&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; View this message in context:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26234947.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26234947.html&lt;/a&gt;&lt;br&gt;&amp;gt; Sent from the Struts - Dev mailing list archive at Nabble.com.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ---------------------------------------------------------------------
&lt;br&gt;&amp;gt; To unsubscribe, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26241558&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-unsubscribe@...&lt;/a&gt;
&lt;br&gt;&amp;gt; For additional commands, e-mail: &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26241558&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dev-help@...&lt;/a&gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26241558.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26234947</id>
	<title>Re: ognl 2.7.3 performance</title>
	<published>2009-11-06T18:14:13Z</published>
	<updated>2009-11-06T18:14:13Z</updated>
	<author>
		<name>Alex Siman</name>
	</author>
	<content type="html">What was the reason(s) to get rid of OGNL? Just interesting.
&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Musachy Barroso wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;Cool news. So I have been playing with the JUEL plugin (JUEL is pretty
&lt;br&gt;nice, we can talk about that later.), and here are a few things I got
&lt;br&gt;working so far:
&lt;br&gt;&lt;br&gt;1. Value stack operations (get/set)
&lt;br&gt;2. I18n (there is a custom 'getText()' that works like it does now)
&lt;br&gt;3. Parameter population
&lt;br&gt;4. Most of Showcase
&lt;br&gt;5. Method invocation in expressions
&lt;br&gt;&lt;br&gt;yeah, you read #3 right. My new parameter binder stuff is useless(3
&lt;br&gt;days in trunk and already getting deleted whoa) and I will remove it
&lt;br&gt;from xwork. I handled to implement the parameter binding with the JUEL
&lt;br&gt;plugin, and it seems to be working nicely, population of null elements
&lt;br&gt;and type conversion. On top of that I extended JUEL to support a &amp;quot;#&amp;quot;
&lt;br&gt;operator, so an OGNL expression like
&lt;br&gt;&lt;br&gt;${#obj.x} or #{#obj.x}
&lt;br&gt;&lt;br&gt;does what you would expect it to do(no standard compliant but handy).
&lt;br&gt;This enables us to run a rather large number of existing OGNL
&lt;br&gt;expressions without changes. I gave it a try on showcase and it seems
&lt;br&gt;to run most of it. I will be adding more test and cleanup the code and
&lt;br&gt;commit it. I also &amp;quot;implemented&amp;quot; (more like &amp;quot;copied&amp;quot;, merging code from
&lt;br&gt;xwork and OGNL) a ReflectionProvider which does not need OGNL.
&lt;br&gt;&lt;br&gt;//all hail our new UEL overlord
&lt;br&gt;&lt;br&gt;musachy
&lt;br&gt;&lt;br&gt;On Sat, Jul 18, 2009 at 3:06 PM, Musachy Barroso &amp;lt;musachy@gmail.com&amp;gt; wrote:
&lt;br&gt;&amp;gt; Due to this fix: &lt;a href=&quot;http://jira.opensymphony.com/browse/OGNL-141&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://jira.opensymphony.com/browse/OGNL-141&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Ognl 2.7.3 performance is a lot better than 2.6.11, on my rough test,
&lt;br&gt;&amp;gt; the avg time spent in OgnlRuntime.invokeMethod(...) dropped from
&lt;br&gt;&amp;gt; 630,726 ms (2.6.11) to 117,108 (2.7.3) ms, (100 threads, 2s ramp-up
&lt;br&gt;&amp;gt; period, 100 iterations) . If we are not going to use the new bycode
&lt;br&gt;&amp;gt; stuff, then the upgrade doesn't seem that risky. Should we upgrade, do
&lt;br&gt;&amp;gt; some testing, and release 2.1.8 (delay release a bit), or leave that
&lt;br&gt;&amp;gt; for 2.1.9? With the bytecode stuff out the way I am inclined to just
&lt;br&gt;&amp;gt; upgrade to 2.7.3 at once, and upgrade freemarker also.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; musachy
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --
&lt;br&gt;&amp;gt; &amp;quot;Hey you! Would you help me to carry the stone?&amp;quot; Pink Floyd
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
&lt;br&gt;For additional commands, e-mail: dev-help@struts.apache.org
&lt;br&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ognl-2.7.3-performance-tp24552642p26234947.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26241226</id>
	<title>svn commit: r833625 - in /struts/sandbox/trunk/struts2-uel-plugin/src: main/java/org/apache/struts2/uelplugin/ main/java/org/apache/struts2/uelplugin/elresolvers/ test/java/org/apache/struts2/uelplugin/</title>
	<published>2009-11-06T17:18:16Z</published>
	<updated>2009-11-06T17:18:16Z</updated>
	<author>
		<name>musachy-2</name>
	</author>
	<content type="html">Author: musachy
&lt;br&gt;Date: Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;New Revision: 833625
&lt;br&gt;&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc?rev=833625&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc?rev=833625&amp;view=rev&lt;/a&gt;&lt;br&gt;Log:
&lt;br&gt;add tests, and array el resolver
&lt;br&gt;&lt;br&gt;Added:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
&lt;br&gt;Removed:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/DummyTypeConverter.java
&lt;br&gt;Modified:
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
&lt;br&gt;&amp;nbsp; &amp;nbsp; struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/CompoundRootELContext.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -2,10 +2,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;&amp;nbsp;import de.odysseus.el.util.SimpleContext;
&lt;br&gt;-import org.apache.struts2.uelplugin.elresolvers.CompoundRootELResolver;
&lt;br&gt;-import org.apache.struts2.uelplugin.elresolvers.ValueStackContextResolver;
&lt;br&gt;-import org.apache.struts2.uelplugin.elresolvers.XWorkBeanELResolver;
&lt;br&gt;-import org.apache.struts2.uelplugin.elresolvers.XWorkListELResolver;
&lt;br&gt;+import org.apache.struts2.uelplugin.elresolvers.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import javax.el.*;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -19,13 +16,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public CompoundRootELContext(final Container container) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(new CompositeELResolver() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new ValueStackContextResolver());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkListELResolver(container));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new CompoundRootELResolver(container));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new ArrayELResolver(false));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new MapELResolver(false));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new ResourceBundleELResolver());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new ValueStackContextResolver());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkBeanELResolver(container));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkListELResolver(container));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkMapELResolver(container));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new XWorkArrayELResolver(container));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;add(new BeanELResolver());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}});
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833625&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java?rev=833625&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkArrayELResolver.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -0,0 +1,119 @@
&lt;br&gt;+package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;+
&lt;br&gt;+import javax.el.ELContext;
&lt;br&gt;+import javax.el.ELException;
&lt;br&gt;+import java.util.List;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+import java.lang.reflect.Array;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+public class XWorkArrayELResolver extends AbstractResolver {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public XWorkArrayELResolver(Container container) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target.getClass().isArray()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Integer index = null;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (property instanceof Number)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;index = ((Number) property).intValue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;index = Integer.valueOf(property.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (NumberFormatException e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ignore
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ReflectionContextState.isCreatingNullObjects(context) &amp;&amp; objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class clazz = target.getClass().getComponentType();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index &amp;lt; 0 || index &amp;gt;= Array.getLength(target)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//nothing to do here, as we cannot set a new array
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new ELException(&amp;quot;Index [&amp;quot; + index + &amp;quot;] is out of bounds&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//valid index
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object obj = Array.get(target, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (obj == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj = objectFactory.buildBean(clazz, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Array.set(target, index, obj);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new ELException(&amp;quot;unable to instantiate a new object for property [&amp;quot; + lastProperty + &amp;quot;]&amp;quot;, e);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return obj;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//try normal list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index &amp;lt; Array.getLength(target)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return Array.get(target, index);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setValue(ELContext elContext, Object target, Object property, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target.getClass().isArray()) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Integer index = null;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (property instanceof Number)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;index = ((Number) property).intValue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;index = Integer.valueOf(property.toString());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (NumberFormatException e) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ignore
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class clazz = target.getClass().getComponentType();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ReflectionContextState.isCreatingNullObjects(context) &amp;&amp; objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index &amp;lt; 0 || index &amp;gt;= Array.getLength(target)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//nothing to do here, as we cannot set a new array
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new ELException(&amp;quot;Index [&amp;quot; + index + &amp;quot;] is out of bounds&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//valid index
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object convertedValue = xworkConverter.convertValue(context, value, clazz);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Array.set(target, index, convertedValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//try normal list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (index &amp;lt; Array.getLength(target)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object convertedValue = xworkConverter.convertValue(context, value, clazz);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Array.set(target, index, convertedValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkBeanELResolver.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -1,16 +1,12 @@
&lt;br&gt;&amp;nbsp;package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;-import com.opensymphony.xwork2.parameters.accessor.ParametersPropertyAccessor;
&lt;br&gt;-import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
&lt;br&gt;-import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;&amp;nbsp;import org.apache.commons.beanutils.PropertyUtils;
&lt;br&gt;&amp;nbsp;import org.apache.struts2.StrutsException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-import javax.el.BeanELResolver;
&lt;br&gt;&amp;nbsp;import javax.el.ELContext;
&lt;br&gt;-import java.lang.reflect.InvocationTargetException;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class XWorkBeanELResolver extends AbstractResolver {
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkListELResolver.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -16,9 +16,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof List) {
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;List list = (List) target;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;@@ -31,49 +31,49 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ignore
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (numericValue != null
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; ReflectionContextState.isCreatingNullObjects(context)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int index = numericValue.intValue();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int listSize = list.size();
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*if (lastClass == null || lastProperty == null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return super.getProperty(context, target, name);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}*/
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (listSize &amp;lt;= index) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = listSize; i &amp;lt; index; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (numericValue != null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (ReflectionContextState.isCreatingNullObjects(context) &amp;&amp; objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, true)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int index = numericValue.intValue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int listSize = list.size();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/*if (lastClass == null || lastProperty == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return super.getProperty(context, target, name);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}*/
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class beanClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, property);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (listSize &amp;lt;= index) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for (int i = listSize; i &amp;lt; index; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(index, result = objectFactory.buildBean(beanClass, context));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception exc) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new XWorkException(exc);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (list.get(index) == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.set(index, result = objectFactory.buildBean(beanClass, context));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception exc) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new XWorkException(exc);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return list.get(index);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.add(index, result = objectFactory.buildBean(beanClass, context));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception exc) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new XWorkException(exc);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else if (list.get(index) == null) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list.set(index, result = objectFactory.buildBean(beanClass, context));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception exc) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;throw new XWorkException(exc);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return list.get(index);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//try normal list
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (numericValue &amp;lt; list.size()) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return list.get(numericValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//try normal list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (numericValue &amp;lt; list.size()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return list.get(numericValue);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&lt;br&gt;Added: struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833625&amp;view=auto&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java?rev=833625&amp;view=auto&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java (added)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/main/java/org/apache/struts2/uelplugin/elresolvers/XWorkMapELResolver.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -0,0 +1,137 @@
&lt;br&gt;+package org.apache.struts2.uelplugin.elresolvers;
&lt;br&gt;+
&lt;br&gt;+import com.opensymphony.xwork2.util.reflection.ReflectionContextState;
&lt;br&gt;+import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
&lt;br&gt;+import com.opensymphony.xwork2.inject.Container;
&lt;br&gt;+
&lt;br&gt;+import javax.el.ELContext;
&lt;br&gt;+import java.util.Map;
&lt;br&gt;+import java.util.List;
&lt;br&gt;+import java.util.WeakHashMap;
&lt;br&gt;+
&lt;br&gt;+public class XWorkMapELResolver extends AbstractResolver {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private final Map&amp;lt;Key, Class&amp;gt; keyClassCache = new WeakHashMap&amp;lt;Key, Class&amp;gt;();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public XWorkMapELResolver(Container container) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;super(container);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object getValue(ELContext elContext, Object target, Object property) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof Map) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object result = null;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//find the key class and convert the name to that class
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (keyClass == null)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;keyClass = String.class;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object key = getKey(context, property);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map map = (Map) target;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = map.get(key);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (result == null &amp;&amp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;context.get(ReflectionContextState.CREATE_NULL_OBJECTS) != null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;&amp; objectTypeDeterminer.shouldCreateIfNew(lastClass, lastProperty, target, null, false)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class valueClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, key);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = objectFactory.buildBean(valueClass, context);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(key, result);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} catch (Exception exc) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elContext.setPropertyResolved(true);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Object getKey(Map context, Object name) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lastClass == null || lastProperty == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// return java.lang.String.class;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// commented out the above -- it makes absolutely no sense for when setting basic maps!
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return name;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key key = new Key(lastClass, lastProperty);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//lookup in the cache first
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class keyClass = keyClassCache.get(key);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (keyClass == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;keyClass = objectTypeDeterminer.getKeyClass(lastClass, lastProperty);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (keyClass != null)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;keyClassCache.put(key, keyClass);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (keyClass == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;keyClass = String.class;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;keyClassCache.put(key, String.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return xworkConverter.convertValue(context, name, keyClass);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setValue(ELContext elContext, Object target, Object property, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map&amp;lt;String, Object&amp;gt; context = (Map) elContext.getContext(AccessorsContextKey.class);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (target != null &amp;&amp; property != null &amp;&amp; target instanceof Map) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object key = getKey(context, property);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map map = (Map) target;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(key, getValue(context, value));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Object getValue(Map context, Object value) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class lastClass = (Class) context.get(XWorkConverter.LAST_BEAN_CLASS_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String lastProperty = (String) context.get(XWorkConverter.LAST_BEAN_PROPERTY_ACCESSED);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (lastClass == null || lastProperty == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return value;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Class elementClass = objectTypeDeterminer.getElementClass(lastClass, lastProperty, null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (elementClass == null) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return value; // nothing is specified, we assume it will be the value passed in.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return xworkConverter.convertValue(context, value, elementClass);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+class Key {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Class clazz;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;String property;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Key(Class clazz, String property) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.clazz = clazz;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.property = property;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public boolean equals(Object o) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (this == o) return true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (o == null || getClass() != o.getClass()) return false;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Key key = (Key) o;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (clazz != null ? !clazz.equals(key.clazz) : key.clazz != null) return false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (property != null ? !property.equals(key.property) : key.property != null) return false;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public int hashCode() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int result = clazz != null ? clazz.hashCode() : 0;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = 31 * result + (property != null ? property.hashCode() : 0);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/AbstractUelBaseTest.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -66,6 +66,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ValueStack.class, UelValueStack.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ValueStackFactory.class, UelValueStackFactory.class);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder.factory(ReflectionProvider.class, GenericReflectionProvider.class);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//builder.factory(StrutsTypeConverter)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/ParametersTest.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -8,6 +8,7 @@
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.List;
&lt;br&gt;&amp;nbsp;import java.util.ArrayList;
&lt;br&gt;+import java.util.HashMap;
&lt;br&gt;&amp;nbsp;import java.lang.reflect.InvocationTargetException;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -44,15 +45,43 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getTypedList().get(1).getValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void testAnnotatedTypeConverter() {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestAction action = new TestAction();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(action.getConverted());
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(action);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; public void testWriteArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//not null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Object[] array = new Object[2];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//obj.setObjectArray(array);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//assertNotNull(obj.getObjectArray());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;converted&amp;quot;, &amp;quot;someval&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;converted&amp;quot;, action.getConverted());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;objectArray[0].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, ((TestObject)array[0]).getValue());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testWriteMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//not null
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Map map = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setMap(map);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getMap());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;map['str']&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, map.size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, map.get(&amp;quot;str&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//null list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setMap(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNull(obj.getMap());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;map['str']&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertNotNull(obj.getMap());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, stack.findValue(&amp;quot;map['str']&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//test type determiner
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedMap(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack.setValue(&amp;quot;typedMap[1].value&amp;quot;, &amp;quot;val&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(1, obj.getTypedMap().size());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;val&amp;quot;, obj.getTypedMap().get(1).getValue());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testSetPropertiesOnNestedNullObject() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/TestObject.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -3,6 +3,7 @@
&lt;br&gt;&amp;nbsp;import java.util.Date;
&lt;br&gt;&amp;nbsp;import java.util.Map;
&lt;br&gt;&amp;nbsp;import java.util.List;
&lt;br&gt;+import java.util.Set;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;public class TestObject {
&lt;br&gt;@@ -14,6 +15,51 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private Object object;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private List list;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;private List&amp;lt;TestObject&amp;gt; typedList;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Map map;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Map&amp;lt;Integer, TestObject&amp;gt; typedMap;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Object[] objectArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Integer[] typedArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;private Set set;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Set getSet() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return set;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setSet(Set set) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.set = set;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Object[] getObjectArray() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return objectArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setObjectArray(Object[] objectArray) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.objectArray = objectArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Integer[] getTypedArray() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return typedArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setTypedArray(Integer[] typedArray) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.typedArray = typedArray;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Map getMap() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return map;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setMap(Map map) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.map = map;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public Map&amp;lt;Integer, TestObject&amp;gt; getTypedMap() {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return typedMap;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void setTypedMap(Map&amp;lt;Integer, TestObject&amp;gt; typedMap) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.typedMap = typedMap;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public List&amp;lt;TestObject&amp;gt; getTypedList() {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return typedList;
&lt;br&gt;&lt;br&gt;Modified: struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java
&lt;br&gt;URL: &lt;a href=&quot;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java?rev=833625&amp;r1=833624&amp;r2=833625&amp;view=diff&lt;/a&gt;&lt;br&gt;==============================================================================
&lt;br&gt;--- struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java (original)
&lt;br&gt;+++ struts/sandbox/trunk/struts2-uel-plugin/src/test/java/org/apache/struts2/uelplugin/UelTest.java Sat Nov &amp;nbsp;7 01:18:15 2009
&lt;br&gt;@@ -43,6 +43,28 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(10, stack.findValue(&amp;quot;object[0]&amp;quot;));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testReadArray() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Integer[] ints = {10, 20};
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setTypedArray(ints);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.push(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//list
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(20, stack.findValue(&amp;quot;typedArray[1]&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;public void testMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HashMap map = new HashMap();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(&amp;quot;nameValue&amp;quot;, &amp;quot;Lex&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setParameters(map);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex&amp;quot;, stack.findValue(&amp;quot;parameters.nameValue&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex&amp;quot;, stack.findValue(&amp;quot;parameters['nameValue']&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void testContextReferencesWithSameObjectInStack() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//if there as object in the stack with the property &amp;quot;X&amp;quot; and there is an object in the
&lt;br&gt;@@ -189,17 +211,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(stack.findString(&amp;quot;#{date}&amp;quot;), format.format(obj.getDate()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;public void testMap() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HashMap map = new HashMap();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;map.put(&amp;quot;nameValue&amp;quot;, &amp;quot;Lex&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;obj.setParameters(map);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;root.add(obj);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String value = (String) stack.findValue(&amp;quot;parameters.nameValue&amp;quot;, String.class);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;assertEquals(&amp;quot;Lex&amp;quot;, value);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public void test2LevelSet() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject obj = new TestObject();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TestObject nestedObj = new TestObject();
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/svn-commit%3A-r833625---in--struts-sandbox-trunk-struts2-uel-plugin-src%3A-main-java-org-apache-struts2-uelplugin--main-java-org-apache-struts2-uelplugin-elresolvers--test-java-org-apache-struts2-uelplugin--tp26241226p26241226.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26240551</id>
	<title>[CONF] Confluence Changes in the last 24 hours</title>
	<published>2009-11-06T16:01:02Z</published>
	<updated>2009-11-06T16:01:02Z</updated>
	<author>
		<name>confluence-2</name>
	</author>
	<content type="html">This is a daily summary of all recent changes in Confluence.
&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Updated Spaces:
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Aries (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ARIES&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/ARIES&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Tutorials edited by &amp;nbsp;zoe &amp;nbsp;(08:13 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/ARIES/Tutorials&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/ARIES/Tutorials&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Camel (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/CAMEL&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/CAMEL&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Camel Transport for CXF edited by &amp;nbsp;njiang &amp;nbsp;(12:28 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/CAMEL/Camel+Transport+for+CXF&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/CAMEL/Camel+Transport+for+CXF&lt;/a&gt;&lt;br&gt;&lt;br&gt;Log edited by &amp;nbsp;davsclaus &amp;nbsp;(11:48 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/CAMEL/Log&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/CAMEL/Log&lt;/a&gt;&lt;br&gt;&lt;br&gt;HTTP edited by &amp;nbsp;davsclaus &amp;nbsp;(09:39 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/CAMEL/HTTP&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/CAMEL/HTTP&lt;/a&gt;&lt;br&gt;&lt;br&gt;Camel 2.1.0 Release edited by &amp;nbsp;davsclaus &amp;nbsp;(05:14 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/CAMEL/Camel+2.1.0+Release&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/CAMEL/Camel+2.1.0+Release&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Directory Server v1.0 (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSRVx10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSRVx10&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Downloads edited by &amp;nbsp;pamarcelot &amp;nbsp;(09:10 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/DIRxSRVx10/Downloads&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/DIRxSRVx10/Downloads&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Empire DB (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/empiredb&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/empiredb&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Index edited by &amp;nbsp;francisdb &amp;nbsp;(07:30 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/empiredb/Index&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/empiredb/Index&lt;/a&gt;&lt;br&gt;&lt;br&gt;Similar Projects created by francisdb (07:22 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/empiredb/Similar+Projects&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/empiredb/Similar+Projects&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Felix (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/FELIX&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/FELIX&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;news edited by &amp;nbsp;fmeschbe &amp;nbsp;(01:06 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/FELIX/news&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/FELIX/news&lt;/a&gt;&lt;br&gt;&lt;br&gt;downloads edited by &amp;nbsp;fmeschbe &amp;nbsp;(01:04 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/FELIX/downloads&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/FELIX/downloads&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Geronimo v2.2 (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/GMOxDOC22&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/GMOxDOC22&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Building Geronimo with Maven edited by &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26240551&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;chirunhua@...&lt;/a&gt; &amp;nbsp;(09:58 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/GMOxDOC22/Building+Geronimo+with+Maven&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/GMOxDOC22/Building+Geronimo+with+Maven&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Ivy (Apache Ant subproject) &amp;nbsp;(&lt;a href=&quot;http://cwiki.apache.org/confluence/display/IVY&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/IVY&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Ivy Resources edited by &amp;nbsp;dszuksztul &amp;nbsp;(02:12 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/IVY/Ivy+Resources&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/IVY/Ivy+Resources&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Maven (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAVEN&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAVEN&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Maven 3.x Compatibility Notes edited by &amp;nbsp;bentmann &amp;nbsp;(03:47 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Qpid (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/qpid&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/qpid&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Download edited by &amp;nbsp;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26240551&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;jonathan.robie@...&lt;/a&gt; &amp;nbsp;(07:59 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/qpid/Download&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/qpid/Download&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Struts 2 Plugin Registry (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/S2PLUGINS&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/S2PLUGINS&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;viewpage.action?spaceKey=S2PLUGINS&amp;title=jQuery%20plugin created by leandrodias.silva (11:47 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=5963932&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=5963932&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache ServiceMix NMR (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/SMX4NMR&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/SMX4NMR&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;10. Events edited by &amp;nbsp;slewis &amp;nbsp;(03:13 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/SMX4NMR/10.+Events&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/SMX4NMR/10.+Events&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache Stonehenge (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/STONEHENGE&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/STONEHENGE&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;November 2009 Report created by nickh (07:08 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/STONEHENGE/November+2009+Report&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/STONEHENGE/November+2009+Report&lt;/a&gt;&lt;br&gt;&lt;br&gt;Index edited by &amp;nbsp;nickh &amp;nbsp;(07:09 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/STONEHENGE/Index&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/STONEHENGE/Index&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Tuscany Wiki (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TUSCANYWIKI&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TUSCANYWIKI&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Conformance Testing edited by &amp;nbsp;ramkumar.rj &amp;nbsp;(11:42 AM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Conformance+Testing&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Conformance+Testing&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Apache VCL (&lt;a href=&quot;http://cwiki.apache.org/confluence/display/VCL&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/VCL&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Pages
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Management Node Installation edited by &amp;nbsp;arkurth &amp;nbsp;(08:51 PM)
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/VCL/Management+Node+Installation&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/VCL/Management+Node+Installation&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;Users
&lt;br&gt;---------------------------------------------------------------------
&lt;br&gt;&lt;br&gt;gbpanchal
&lt;br&gt;&lt;a href=&quot;http://cwiki.apache.org/confluence/display/~gbpanchal&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/display/~gbpanchal&lt;/a&gt;&lt;br&gt;&lt;br&gt;Change your notification preferences: &lt;a href=&quot;http://cwiki.apache.org/confluence/users/viewnotifications.action&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cwiki.apache.org/confluence/users/viewnotifications.action&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/-CONF--Confluence-Changes-in-the-last-24-hours-tp26240551p26240551.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26239520</id>
	<title>[OSS Bamboo] Struts 2 SVN - Main Build (Java 6) build 1006 has FAILED (1 tests failed, no failures were new)</title>
	<published>2009-11-06T14:21:17Z</published>
	<updated>2009-11-06T14:21:17Z</updated>
	<author>
		<name>Atlassian Open Source Bamboo</name>
	</author>
	<content type="html">&lt;div&gt;

&lt;font size=&quot;2&quot; color=&quot;black&quot; face=&quot;Arial, Helvetica, sans-serif&quot; style=&quot;font-family: Arial, sans-serif;font-size: 13px;color:#000&quot;&gt;
&lt;table align=&quot;center&quot; border=&quot;0&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; width=&quot;98%&quot;&gt;
&lt;tr&gt;
	&lt;td style=&quot;vertical-align:top&quot;&gt;
                &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ffe6e7;border-top:1px solid #eec0c0;border-bottom:1px solid #eec0c0;color:#d62829;&quot;&gt;
        &lt;tr&gt;
        &lt;td width=&quot;20&quot; style=&quot;vertical-align:top;padding:5px 0 5px 10px&quot;&gt;
            &lt;img src=&quot;http://opensource.bamboo.atlassian.com/images/jt/icn_plan_failed.gif&quot; width=&quot;15&quot; height=&quot;15&quot;&gt;
        &lt;/td&gt;
        &lt;td width=&quot;100%&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#d62829;padding:5px 10px&quot;&gt;
            &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1006/&quot; style=&quot;font-family: Arial, sans-serif; font-size: 15px; font-weight:bold; color:#d62829&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;STRUTS-MAINJ6-1006&lt;/a&gt;
            &lt;span class=&quot;failed&quot; style=&quot;font-family: Arial, sans-serif; font-size: 14px;&quot;&gt;failed.&lt;/span&gt;
            &lt;span class=&quot;failed&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;&quot;&gt;
            &lt;br /&gt;    This build occured because it is a dependant of &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/XWORK-MAIN-435&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;XWORK-MAIN-435&lt;/a&gt;.
                &lt;br /&gt;&lt;strong&gt;1/1135&lt;/strong&gt; tests failed.
            &lt;/span&gt;
        &lt;/td&gt;
        &lt;/tr&gt;
        &lt;/table&gt;
        &lt;br&gt;

       &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ecf1f7;border-top:1px solid #bbd0e5;border-bottom:1px solid #bbd0e5;color:#036;&quot;&gt;
            &lt;tr&gt;
                &lt;td width=&quot;60%&quot; style=&quot;font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036;padding:5px 10px&quot;&gt;
                    &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1006/commit&quot; style=&quot;text-decoration: none; font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Code Changes&lt;/a&gt;
                &lt;/td&gt;
                &lt;td width=&quot;40%&quot; style=&quot;font-family: Arial, sans-serif;text-align:right;font-size:13px;color:#036;padding:5px 10px&quot;&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
       &lt;/table&gt;
       &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
             &lt;tr&gt;&lt;td width=&quot;100%&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px; color:#000;vertical-align:top;padding:10px 10px 0px 10px&quot;&gt;
                     This build does not have any commits.
             &lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;&lt;br&gt;
            &lt;table width=&quot;100%&quot; border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-color:#ecf1f7;border-top:1px solid #bbd0e5;border-bottom:1px solid #bbd0e5;color:#036;&quot;&gt;
                &lt;tr&gt;
                    &lt;td width=&quot;60%&quot; style=&quot;font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036;vertical-align:top;padding:5px 10px&quot;&gt;
                        &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1006/test&quot; style=&quot;text-decoration: none; font-family: Arial, sans-serif;text-align:left;font-size:16px;font-weight:bold;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Tests&lt;/a&gt;
                    &lt;/td&gt;
                    &lt;td width=&quot;40%&quot; style=&quot;font-family: Arial, sans-serif;text-align:right;font-size:13px;color:#036;padding:5px 10px&quot;&gt;
                        &lt;a href=&quot;http://opensource.bamboo.atlassian.com/browse/STRUTS-MAINJ6-1006/test&quot; style=&quot;font-family: Arial, sans-serif; font-size: 13px;color:#036&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;See full test details&lt;/a&gt;&lt;i