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" +