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) {