You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2009/01/19 18:45:20 UTC

svn commit: r735757 - in /ode/sandbox/simpel/src: main/antlr/org/apache/ode/simpel/antlr/ main/java/org/apache/ode/embed/messaging/ main/java/org/apache/ode/simpel/omodel/ test/java/org/apache/ode/rest/ test/java/org/apache/ode/simpel/

Author: mriou
Date: Mon Jan 19 09:45:19 2009
New Revision: 735757

URL: http://svn.apache.org/viewvc?rev=735757&view=rev
Log:
All classic HTTP methods are supported (get, put, post, delete). They seem to work for very simple use cases.

Added:
    ode/sandbox/simpel/src/test/java/org/apache/ode/rest/TestAllMethodsResource.java
Modified:
    ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g
    ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g
    ode/sandbox/simpel/src/main/java/org/apache/ode/embed/messaging/MessageExchangeContextImpl.java
    ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java
    ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java
    ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java

Modified: ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g?rev=735757&r1=735756&r2=735757&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g (original)
+++ ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPEL.g Mon Jan 19 09:45:19 2009
@@ -9,7 +9,7 @@
     ROOT; PROCESS; PICK; SEQUENCE; FLOW; IF; ELSEIF; ELSE; WHILE; UNTIL; FOREACH; FORALL; INVOKE;
     RECEIVE; REPLY; ASSIGN; THROW; WAIT; EXIT; TIMEOUT; TRY; CATCH; CATCH_ALL; SCOPE; EVENT;
     RESOURCE;
-    REQUEST; ONEVENT; ONALARM; ONRECEIVE; ONUPDATE; ONQUERY; COMPENSATION; COMPENSATE;
+    REQUEST; REQ_BASE; ONEVENT; ONALARM; ONRECEIVE; ONUPDATE; ONQUERY; COMPENSATION; COMPENSATE;
     CORRELATION; CORR_MAP; PARTNERLINK; VARIABLE; BLOCK_PARAM;
     SIGNAL; JOIN; WITH; MAP;
     EXPR; EXT_EXPR; XML_LITERAL; CALL; NAMESPACE; NS; PATH;
@@ -163,7 +163,7 @@
         :	request_base SEMI -> ^(REQUEST request_base)
             | request_base param_block -> ^(REQUEST request_base) param_block;
 request_base
-        :	'request' '(' expr (',' meth=STRING (',' msg=ID)?)? ')' -> ^(expr $meth? $msg?);
+        :	'request' '(' expr (',' meth=STRING (',' msg=ID)?)? ')' -> ^(REQ_BASE expr $meth? $msg?);
 
 assign	:	path_expr '=' rvalue -> ^(ASSIGN path_expr rvalue);
 rvalue

Modified: ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g?rev=735757&r1=735756&r2=735757&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g (original)
+++ ode/sandbox/simpel/src/main/antlr/org/apache/ode/simpel/antlr/SimPELWalker.g Mon Jan 19 09:45:19 2009
@@ -98,7 +98,7 @@
 
 proc_stmt
 	:	pick | flow | if_ex | while_ex | until_ex | foreach | forall | try_ex | scope_ex | with_ex
-		| invoke | receive | reply | assign | throw_ex | wait_ex | exit | signal | join
+		| invoke | receive | request | reply | assign | throw_ex | wait_ex | exit | signal | join
 		| variable | partner_link;
 block
 scope Parent;
@@ -264,7 +264,7 @@
     :	^(REQUEST {
             $ExprContext::expr = new SimPELExpr(builder.getProcess());
         }
-        ^(e=(expr) (meth=STRING msg=ID?)?)) {
+        ^(REQ_BASE e=(expr) (meth=STRING (msg=ID)?)?)) {
             $ExprContext::expr.setExpr(deepText($e));
 
 	        // The request output is the lvalue of the assignment expression in which this request is enclosed (if it is)

Modified: ode/sandbox/simpel/src/main/java/org/apache/ode/embed/messaging/MessageExchangeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/java/org/apache/ode/embed/messaging/MessageExchangeContextImpl.java?rev=735757&r1=735756&r2=735757&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/java/org/apache/ode/embed/messaging/MessageExchangeContextImpl.java (original)
+++ ode/sandbox/simpel/src/main/java/org/apache/ode/embed/messaging/MessageExchangeContextImpl.java Mon Jan 19 09:45:19 2009
@@ -110,6 +110,11 @@
                     DOMUtils.domToString(unwrapToPayload(restOutMessageExchange.getRequest().getMessage())));
         } else resp = wr.method(res.getMethod().toUpperCase(), ClientResponse.class);
 
+        if (resp.getStatus() == 204) {
+            restOutMessageExchange.replyOneWayOk();
+            return;
+        }
+
         // TODO check status
         String response = resp.getEntity(String.class);
         Element responseXML;
@@ -119,6 +124,7 @@
             Document doc = DOMUtils.newDocument();
             Element failureElmt = doc.createElement("requestFailure");
             failureElmt.setTextContent(response);
+            __log.debug("Request to " + res.getUrl() + " failed, response couldn't be parsed: " + response);
             restOutMessageExchange.replyWithFailure(MessageExchange.FailureType.FORMAT_ERROR,
                     "Can't parse the response to " + res.getUrl(), failureElmt);
             return;

Modified: ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java?rev=735757&r1=735756&r2=735757&view=diff
==============================================================================
--- ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java (original)
+++ ode/sandbox/simpel/src/main/java/org/apache/ode/simpel/omodel/OBuilder.java Mon Jan 19 09:45:19 2009
@@ -218,21 +218,16 @@
     }
 
     public SimpleActivity buildRequest(OInvoke invoke, OScope oscope, SimPELExpr expr, String method, String outgoingMsg, SimPELExpr responseMsg) {
-        if (method != null && (!method.equalsIgnoreCase("get") || method.equalsIgnoreCase("put")
-                 || method.equalsIgnoreCase("post") || method.equalsIgnoreCase("delete")))
+        if (method != null && (!method.equalsIgnoreCase("\"get\"") && !method.equalsIgnoreCase("\"put\"")
+                 && !method.equalsIgnoreCase("\"post\"") && !method.equalsIgnoreCase("\"delete\"")))
             throw new RuntimeException("Invalid HTTP method: " + method);
 
-        // TODO hack warning: because of the way deepText works in SimPELWalker, the expr we get is the whole thing
-        // i.e. request(foo+"/order"), the expr should be changed to return its string instead of the following
-        String exprStr = expr.getExpr();
-        int openParens = exprStr.indexOf("(");
-        int closeExpr = Math.max(exprStr.indexOf(")"), exprStr.indexOf(","));
-        expr.setExpr(exprStr.substring(openParens+1, closeExpr));
+        expr.setExpr(expr.getExpr());
         expr.expressionLanguage = _exprLang;
 
         invoke.resource = new OResource(_oprocess);
         invoke.resource.setSubpath(expr);
-        invoke.resource.setMethod(method == null ? "get" : method);
+        invoke.resource.setMethod(method == null ? "get" : method.substring(1, method.length() - 1));
         invoke.resource.setInbound(false);
         invoke.resource.setDeclaringScope(oscope);
         if (outgoingMsg != null)

Added: ode/sandbox/simpel/src/test/java/org/apache/ode/rest/TestAllMethodsResource.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/java/org/apache/ode/rest/TestAllMethodsResource.java?rev=735757&view=auto
==============================================================================
--- ode/sandbox/simpel/src/test/java/org/apache/ode/rest/TestAllMethodsResource.java (added)
+++ ode/sandbox/simpel/src/test/java/org/apache/ode/rest/TestAllMethodsResource.java Mon Jan 19 09:45:19 2009
@@ -0,0 +1,52 @@
+package org.apache.ode.rest;
+
+import org.apache.ode.utils.DOMUtils;
+import org.xml.sax.SAXException;
+import org.w3c.dom.Element;
+
+import javax.ws.rs.*;
+import java.io.IOException;
+
+@Path("/gppd")
+public class TestAllMethodsResource {
+
+    @GET
+    @Produces("application/xml")
+    public String get() {
+        return "<get>GET</get>";
+    }
+
+    @POST
+    @Consumes("application/xml")
+    @Produces("application/xml")
+    public String post(String input) {
+        String out = "";
+        try {
+            Element root = DOMUtils.stringToDOM(input);
+            out = root.getTextContent();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "<post>POST" + out + "</post>";
+    }
+
+    @PUT
+    @Consumes("application/xml")
+    @Produces("application/xml")
+    public String put(String input) {
+        String out = "";
+        try {
+            Element root = DOMUtils.stringToDOM(input);
+            out = root.getTextContent();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "<put>PUT" + out + "</put>";
+    }
+
+    @DELETE
+    public void delete() {
+        System.out.println("*** DELETE ***");
+    }
+
+}

Modified: ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java?rev=735757&r1=735756&r2=735757&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java (original)
+++ ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/RestfulSimPELTest.java Mon Jan 19 09:45:19 2009
@@ -171,14 +171,21 @@
     }
 
     public static final String GET_PUT_POST_DELETE =
-            "var testRoot = \"http://localhost:3434/test/gppd/\"; " +
+            "var testRoot = \"http://localhost:3434/gppd\"; " +
             "process AllMethods {\n" +
             "   receive(self) { |query|\n" +
             "       getRes = request(testRoot);\n" +
             "       res = getRes.text();\n" +
+
             "       postMsg = <foo>foo</foo>;\n" +
             "       postRes = request(testRoot, \"post\", postMsg);\n" +
             "       res = res + postRes.text();\n" +
+
+            "       putMsg = <bar>bar</bar>;\n" +
+            "       putRes = request(testRoot, \"put\", putMsg);\n" +
+            "       res = res + putRes.text();\n" +
+
+            "       request(testRoot, \"delete\");\n" +
             "       reply(res);\n" +
             "   }\n" +
             "}";
@@ -187,16 +194,17 @@
         EmbeddedServer server = new EmbeddedServer();
         server.start();
         Descriptor desc = new Descriptor();
-        desc.setAddress("/gppd");
+        desc.setAddress("/gppdproc");
         server.deploy(GET_PUT_POST_DELETE, desc);
 
         ClientConfig cc = new DefaultClientConfig();
         Client c = Client.create(cc);
 
-        WebResource wr = c.resource("http://localhost:3434/gppd");
+        WebResource wr = c.resource("http://localhost:3434/gppdproc");
         ClientResponse resp = wr.path("/").accept("application/xml").type("application/xml")
-                .post(ClientResponse.class, "<simpelWrapper xmlns=\"http://ode.apache.org/simpel/1.0/definition/AllMethods\"></simpelWrapper>");
+                .post(ClientResponse.class, "<simpelWrapper xmlns=\"http://ode.apache.org/simpel/1.0/definition/AllMethods\">foo</simpelWrapper>");
         String response = resp.getEntity(String.class);
         System.out.println("=> " + response);
+        assertTrue(response.indexOf("GETPOSTfooPUTbar") > 0);
     }
 }

Modified: ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java
URL: http://svn.apache.org/viewvc/ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java?rev=735757&r1=735756&r2=735757&view=diff
==============================================================================
--- ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java (original)
+++ ode/sandbox/simpel/src/test/java/org/apache/ode/simpel/SimPELRuntimeTest.java Mon Jan 19 09:45:19 2009
@@ -208,6 +208,7 @@
 
     private static final String SIMPLE_CORRELATION =
             "function getExchangeId(msg) { return msg.id; }; \n" +
+            "function getExchangeName(msg) { return msg.name; }; \n" +
             "\n" +
             "process SimpleCorrelation { \n" +
             "   var cid unique; \n" +