You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/11/07 10:35:49 UTC

svn commit: r592670 - in /struts/sandbox/trunk/struts2-rest-plugin: ./ showcase/ showcase/src/main/java/org/apache/struts2/rest/example/ showcase/src/main/resources/ showcase/src/main/webapp/ src/main/java/org/apache/struts2/rest/ src/main/resources/ s...

Author: mrdon
Date: Wed Nov  7 01:35:48 2007
New Revision: 592670

URL: http://svn.apache.org/viewvc?rev=592670&view=rev
Log:
Fixing a caching issue (disable cache wasn't stopping a 304 from being returned), cleaned up the example, updated to struts 2 trunk

Modified:
    struts/sandbox/trunk/struts2-rest-plugin/pom.xml
    struts/sandbox/trunk/struts2-rest-plugin/showcase/pom.xml
    struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java
    struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java
    struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/resources/struts.properties
    struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-edit.jsp
    struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-editNew.jsp
    struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java
    struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestWorkflowInterceptor.java
    struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml
    struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java

Modified: struts/sandbox/trunk/struts2-rest-plugin/pom.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/pom.xml?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/pom.xml (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/pom.xml Wed Nov  7 01:35:48 2007
@@ -5,11 +5,11 @@
 	<parent>
         <groupId>org.apache.struts</groupId>
         <artifactId>struts2-plugins</artifactId>
-        <version>2.1.0-SNAPSHOT</version>
+        <version>2.1.1-SNAPSHOT</version>
     </parent>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-rest-plugin</artifactId>
-   <version>2.1.0-SNAPSHOT</version>
+   <version>2.1.1-SNAPSHOT</version>
    <name>Struts 2 Plugin</name>
 
     <dependencies>

Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/pom.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/pom.xml?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/showcase/pom.xml (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/showcase/pom.xml Wed Nov  7 01:35:48 2007
@@ -5,13 +5,13 @@
     <parent>
         <groupId>org.apache.struts</groupId>
         <artifactId>struts2-apps</artifactId>
-        <version>2.1.0-SNAPSHOT</version>
+        <version>2.1.1-SNAPSHOT</version>
     </parent>
 
 	<groupId>org.apache.struts</groupId>
 	<artifactId>struts2-rest-showcase</artifactId>
 	<packaging>war</packaging>
-	<version>2.1.0-SNAPSHOT</version>
+	<version>2.1.1-SNAPSHOT</version>
 	<name>Struts 2 Rest Showcase Example</name>
 	<description>Struts 2 Rest Showcase Example</description>
 	
@@ -19,7 +19,7 @@
         <dependency>
             <groupId>org.apache.struts</groupId>
             <artifactId>struts2-rest-plugin</artifactId>
-            <version>2.1.0-SNAPSHOT</version>
+            <version>2.1.1-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>junit</groupId>

Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/Order.java Wed Nov  7 01:35:48 2007
@@ -2,7 +2,7 @@
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 
-public class Order {
+public class Order implements Cloneable {
     String id;
     String clientName;
     int amount;
@@ -32,12 +32,6 @@
     }
     public void setId(String id) {
         this.id = id;
-    }
-    
-    public void copyTo(Order order) {
-        order.setId(getId());
-        order.setAmount(getAmount());
-        order.setClientName(getClientName());
     }
 
     @Override

Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/java/org/apache/struts2/rest/example/OrdersController.java Wed Nov  7 01:35:48 2007
@@ -20,10 +20,12 @@
 @Results({
     @Result(name="success", type=ServletActionRedirectResult.class, value="orders") 
 })
-public class OrdersController extends ValidationAwareSupport implements ModelDriven<Object>, ParameterAware, Validateable{
+public class OrdersController extends ValidationAwareSupport implements ModelDriven<Object>, Validateable{
     
     private Order model = new Order();
     private static Map<String,Order> orders = new HashMap<String,Order>();
+    private static int nextId = 6;
+    private String id;
     
     static {
         orders.put("3", new Order("3", "Bob", 33));
@@ -31,10 +33,17 @@
         orders.put("5", new Order("5", "Jim", 66));
     }
     private Collection<Order> list;
+
+    public void setId(String id) {
+        if (id != null && orders.containsKey(id)) {
+            this.model = orders.get(id);
+        }
+        this.id = id;
+    }
     
     public void validate() {
-        if (model.getId() == null || model.getId().length() ==0) {
-            addFieldError("id", "ID is wrong");
+        if (model.getClientName() == null || model.getClientName().length() ==0) {
+            addFieldError("clientName", "The client name is empty");
         }
     }
     
@@ -47,6 +56,7 @@
     }
     
     public String editNew() {
+        model = new Order();
         return "editNew";
     }
     
@@ -57,11 +67,11 @@
     }
     
     public HttpHeaders create() {
+        model.setId(String.valueOf(nextId++));
         orders.put(model.getId(), model);
         addActionMessage("New order created successfully");
-        return new DefaultHttpHeaders()
-            .setLocationId(model.getId())
-            .renderResult("success");
+        return new DefaultHttpHeaders("success")
+            .setLocationId(model.getId());
     }
     
     public String update() {
@@ -81,12 +91,4 @@
         return (list != null ? list : model);
     }
 
-    // Silly workaround since modeldriven doesn't work right in xwork 2.1.0
-    public void setParameters(Map<String,String[]> parameters) {
-        if (parameters.get("id") != null && orders.get(parameters.get("id")[0]) != null) {
-            orders.get(parameters.get("id")[0]).copyTo(model);
-        }
-    }
-    
-    
 }

Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/resources/struts.properties
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/resources/struts.properties?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/resources/struts.properties (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/resources/struts.properties Wed Nov  7 01:35:48 2007
@@ -1,4 +1,4 @@
 
-struts.action.extension=,,xhtml,xml,json
+struts.action.extension=xhtml,xml,json
 
 struts.devMode = true

Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-edit.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-edit.jsp?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-edit.jsp (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-edit.jsp Wed Nov  7 01:35:48 2007
@@ -8,19 +8,19 @@
 <head>
 	<title>Order <s:property value="id" /></title>
 </head>
-<body>
-    <s:form method="post" action="%{#request.contextPath}/orders/%{id}.xhtml">
-    <s:hidden name="_method" value="put" />
-    <table>
-        <s:textfield name="id" label="ID" />
-        <s:textfield name="clientName" label="Client"/>
-        <s:textfield name="amount" label="Amount" />
-        <tr>
-            <td colspan="2">
-                <s:submit />
-            </td>
-    </table>
-    </s:form>    	
+<body>
+    <s:form method="post" action="%{#request.contextPath}/orders/%{id}.xhtml">
+    <s:hidden name="_method" value="put" />
+    <table>
+        <s:textfield name="id" label="ID" disabled="true"/>
+        <s:textfield name="clientName" label="Client"/>
+        <s:textfield name="amount" label="Amount" />
+        <tr>
+            <td colspan="2">
+                <s:submit />
+            </td>
+    </table>
+    </s:form>    	
     <a href="<%=request.getContextPath() %>/orders.xhtml">Back to Orders</a>
 </body>
 </html>

Modified: struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-editNew.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-editNew.jsp?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-editNew.jsp (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/showcase/src/main/webapp/orders-editNew.jsp Wed Nov  7 01:35:48 2007
@@ -8,18 +8,17 @@
 <head>
 	<title>New Order</title>
 </head>
-<body>
-    <s:form method="post" action="%{#request.contextPath}/orders.xhtml">
-    <table>
-        <s:textfield name="id" label="ID" />
-        <s:textfield name="clientName" label="Client"/>
-        <s:textfield name="amount" label="Amount" />
-        <tr>
-            <td colspan="2">
-                <s:submit />
-            </td>
-    </table>
-    </s:form>    	
+<body>
+    <s:form method="post" action="%{#request.contextPath}/orders.xhtml">
+    <table>
+        <s:textfield name="clientName" label="Client"/>
+        <s:textfield name="amount" label="Amount" />
+        <tr>
+            <td colspan="2">
+                <s:submit />
+            </td>
+    </table>
+    </s:form>    	
     <a href="<%=request.getContextPath() %>/orders.xhtml">Back to Orders</a>
 </body>
 </html>

Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/DefaultHttpHeaders.java Wed Nov  7 01:35:48 2007
@@ -117,7 +117,7 @@
             response.setHeader("Location", location);
         }
 
-        if (status == SC_OK) {
+        if (status == SC_OK && !disableCaching) {
             boolean etagNotChanged = false;
             boolean lastModifiedNotChanged = false;
             String reqETag = request.getHeader("If-None-Match");

Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestWorkflowInterceptor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestWorkflowInterceptor.java?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestWorkflowInterceptor.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/RestWorkflowInterceptor.java Wed Nov  7 01:35:48 2007
@@ -164,7 +164,7 @@
 	 */
     protected String doIntercept(ActionInvocation invocation) throws Exception {
         Object action = invocation.getAction();
-        
+
         if (action instanceof ValidationAware) {
             ValidationAware validationAwareAction = (ValidationAware) action;
 

Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/src/main/resources/struts-plugin.xml Wed Nov  7 01:35:48 2007
@@ -25,6 +25,15 @@
     <constant name="struts.configuration.classpath.defaultParentPackage" value="rest-default" />
     
     <package name="rest-default" extends="struts-default">
+        <result-types>
+            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult">
+                <param name="statusCode">303</param>
+            </result-type>
+            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult">
+                <param name="statusCode">303</param>
+            </result-type>
+        </result-types>
+
         <interceptors>
             <interceptor name="rest" class="org.apache.struts2.rest.ContentTypeInterceptor"/>
             <interceptor name="restWorkflow" class="org.apache.struts2.rest.RestWorkflowInterceptor"/>
@@ -53,8 +62,11 @@
                 <interceptor-ref name="chain"/>
                 <interceptor-ref name="debugging"/>
                 <interceptor-ref name="profiling"/>
+                <interceptor-ref name="actionMappingParams"/>
                 <interceptor-ref name="scopedModelDriven"/>
-                <interceptor-ref name="modelDriven"/>
+                <interceptor-ref name="modelDriven">
+                    <param name="refreshModelBeforeResult">true</param>
+                </interceptor-ref>
                 <interceptor-ref name="fileUpload"/>
                 <interceptor-ref name="checkbox"/>
                 <interceptor-ref name="staticParams"/>
@@ -73,16 +85,6 @@
     
         </interceptors>
 
-        <result-types>
-            <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult">
-                <param name="statusCode">303</param>
-            </result-type>
-            <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult">
-                <param name="statusCode">303</param>
-            </result-type>
-        </result-types>
-    
-    
         <default-interceptor-ref name="restDefaultStack"/>
     </package>
 

Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java?rev=592670&r1=592669&r2=592670&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/DefaultHttpHeadersTest.java Wed Nov  7 01:35:48 2007
@@ -154,6 +154,19 @@
         assertEquals(SC_NOT_MODIFIED, mockResponse.getStatus());
     }
 
+    public void testConditionalGetForLastModifiedAndETagButNoCache() {
+        Date now = new Date();
+        DefaultHttpHeaders headers = new DefaultHttpHeaders()
+                .lastModified(now)
+                .withETag("asdf")
+                .disableCaching();
+        mockRequest.addHeader("If-None-Match", "asdf");
+        mockRequest.addHeader("If-Modified-Since", String.valueOf(now.getTime()));
+        headers.apply(mockRequest, mockResponse, new Object());
+
+        assertEquals(SC_OK, mockResponse.getStatus());
+    }
+
     public void testConditionalGetForLastModifiedAndETagWithBadETag() {
         Date now = new Date();
         DefaultHttpHeaders headers = new DefaultHttpHeaders()