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:46:25 UTC

svn commit: r735759 - in /ode/branches/restful: bpel-api/src/main/java/org/apache/ode/bpel/iapi/ engine/src/main/java/org/apache/ode/bpel/engine/ runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/

Author: mriou
Date: Mon Jan 19 09:46:25 2009
New Revision: 735759

URL: http://svn.apache.org/viewvc?rev=735759&view=rev
Log:
A few fixes to handle HTTP requests with empty responses (204).

Modified:
    ode/branches/restful/bpel-api/src/main/java/org/apache/ode/bpel/iapi/RESTOutMessageExchange.java
    ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
    ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/RESTOutMessageExchangeImpl.java
    ode/branches/restful/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/INVOKE.java

Modified: ode/branches/restful/bpel-api/src/main/java/org/apache/ode/bpel/iapi/RESTOutMessageExchange.java
URL: http://svn.apache.org/viewvc/ode/branches/restful/bpel-api/src/main/java/org/apache/ode/bpel/iapi/RESTOutMessageExchange.java?rev=735759&r1=735758&r2=735759&view=diff
==============================================================================
--- ode/branches/restful/bpel-api/src/main/java/org/apache/ode/bpel/iapi/RESTOutMessageExchange.java (original)
+++ ode/branches/restful/bpel-api/src/main/java/org/apache/ode/bpel/iapi/RESTOutMessageExchange.java Mon Jan 19 09:46:25 2009
@@ -16,4 +16,5 @@
 
     void replyWithFailure(MessageExchange.FailureType type, String description, Element details) throws BpelEngineException;
 
+    void replyOneWayOk();
 }

Modified: ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=735759&r1=735758&r2=735759&view=diff
==============================================================================
--- ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Mon Jan 19 09:46:25 2009
@@ -611,10 +611,12 @@
         mexDao.setPattern(MessageExchangePattern.REQUEST_RESPONSE);
         mexDao.setChannel(requestId);
 
-        MessageDAO message = mexDao.createMessage(null);
-        mexDao.setRequest(message);
-        mexDao.setTimeout(30000);
-        message.setData(outgoingMessage);
+        if (outgoingMessage != null) {
+            MessageDAO message = mexDao.createMessage(null);
+            mexDao.setRequest(message);
+            mexDao.setTimeout(30000);
+            message.setData(outgoingMessage);
+        }
 
         // prepare event
         ProcessMessageExchangeEvent evt = new ProcessMessageExchangeEvent();
@@ -800,6 +802,12 @@
             irt = OdeRTInstance.InvokeResponseType.FAILURE;
             evt.setAspect(ProcessMessageExchangeEvent.PARTNER_FAILURE);
             break;
+        case ONEWAY:
+            // A ws-style one-way invoke won't even go there as there's no response channel, only used
+            // for rest style where you get a 204 after the fact.
+            irt = OdeRTInstance.InvokeResponseType.REPLY;
+            evt.setAspect(ProcessMessageExchangeEvent.PARTNER_OUTPUT);
+            break;
         default:
             String msg = "Invalid response state for mex " + mexid + ": " + status;
             __log.error(msg);

Modified: ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/RESTOutMessageExchangeImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/RESTOutMessageExchangeImpl.java?rev=735759&r1=735758&r2=735759&view=diff
==============================================================================
--- ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/RESTOutMessageExchangeImpl.java (original)
+++ ode/branches/restful/engine/src/main/java/org/apache/ode/bpel/engine/RESTOutMessageExchangeImpl.java Mon Jan 19 09:46:25 2009
@@ -30,10 +30,6 @@
         return _resource;
     }
 
-    public Message getRequest() {
-        return _request;
-    }
-
     public void reply(Message response) throws BpelEngineException {
         _response = (MessageImpl) response;
         _fault = null;
@@ -51,6 +47,11 @@
         save();
     }
 
+    public void replyOneWayOk() {
+        ack(AckType.ONEWAY);
+        save();
+    }
+
     @Override
     void load(MessageExchangeDAO dao) {
         super.load(dao);

Modified: ode/branches/restful/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/INVOKE.java
URL: http://svn.apache.org/viewvc/ode/branches/restful/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/INVOKE.java?rev=735759&r1=735758&r2=735759&view=diff
==============================================================================
--- ode/branches/restful/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/INVOKE.java (original)
+++ ode/branches/restful/runtimes/src/main/java/org/apache/ode/bpel/rtrep/v2/INVOKE.java Mon Jan 19 09:46:25 2009
@@ -73,7 +73,8 @@
     }
 
     private void restInvoke(Element outboundMsg) {
-        VariableInstance outputVar = _scopeFrame.resolve(_oinvoke.outputVar);
+        VariableInstance outputVar = null;
+        if (_oinvoke.outputVar != null) outputVar = _scopeFrame.resolve(_oinvoke.outputVar);
         InvokeResponseChannel invokeResponseChannel = newChannel(InvokeResponseChannel.class);
         try {
             String path = getBpelRuntime().getExpLangRuntime()
@@ -126,17 +127,24 @@
                 // happened in the nativeAPI impl
                 FaultData fault = null;
 
-                Element response;
+                Element response = null;
                 try {
                     response = getBpelRuntime().getPartnerResponse(mexId);
                 } catch (Exception e) {
-                    __log.error(e);
-                    // TODO: Better error handling
-                    throw new RuntimeException(e);
+                    // In RESTful invokes, we discover an empty response after the fact (204), so we could
+                    // very well have no response here.
+                    __log.debug(e);
                 }
 
+                if (outputVar != null && response ==null) {
+                    String msg = "The process is expected to set an output variable after an invocation but " +
+                            "there's no response provided by the partner. The process is going to be failed.";
+                    __log.info(msg);
+                    _self.parent.failure(msg, null);
+                }                    
+
                 try {
-                    initializeVariable(outputVar, response);
+                    if (outputVar != null) initializeVariable(outputVar, response);
                 } catch (ExternalVariableModuleException e) {
                     __log.error("Exception while initializing external variable", e);
                     _self.parent.failure(e.toString(), null);
@@ -144,11 +152,13 @@
                 }
 
                 // Generating event
-                VariableModificationEvent se = new VariableModificationEvent(outputVar.declaration.name);
-                se.setNewValue(response);
-                if (_oinvoke.debugInfo != null)
-                    se.setLineNo(_oinvoke.debugInfo.startLine);
-                sendEvent(se);
+                if (outputVar != null) {
+                    VariableModificationEvent se = new VariableModificationEvent(outputVar.declaration.name);
+                    se.setNewValue(response);
+                    if (_oinvoke.debugInfo != null)
+                        se.setLineNo(_oinvoke.debugInfo.startLine);
+                    sendEvent(se);
+                }
 
                 try {
                     for (OScope.CorrelationSet anInitCorrelationsOutput : _oinvoke.initCorrelationsOutput) {