You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2008/04/18 23:41:13 UTC
svn commit: r649701 -
/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java
Author: lresende
Date: Fri Apr 18 14:41:11 2008
New Revision: 649701
URL: http://svn.apache.org/viewvc?rev=649701&view=rev
Log:
Better handling message invocation. Now considering additional information from wsdl interface
Modified:
incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java
Modified: incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java?rev=649701&r1=649700&r2=649701&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-bpel/src/main/java/org/apache/tuscany/sca/implementation/bpel/ode/ODEExternalService.java Fri Apr 18 14:41:11 2008
@@ -20,6 +20,8 @@
import java.util.concurrent.Callable;
+import javax.wsdl.Part;
+import javax.wsdl.Service;
import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
@@ -29,7 +31,9 @@
import org.apache.ode.bpel.iapi.PartnerRoleMessageExchange;
import org.apache.ode.bpel.iapi.Scheduler;
import org.apache.ode.utils.DOMUtils;
+import org.apache.tuscany.sca.interfacedef.Interface;
import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.tuscany.sca.runtime.RuntimeWire;
@@ -86,22 +90,26 @@
Operation operation =
findOperation(partnerRoleMessageExchange.getOperation().getName(), runtimeComponentReference);
+
/*
- * This is how a request looks like (payload is
- * wrapped with extra info) <?xml version="1.0"
- * encoding="UTF-8"?> <message> <parameters>
- * <getGreetings xmlns="http://greetings">
- * <message xmlns="http://helloworld">Luciano</message>
- * </getGreetings> </parameters> </message>
+ This is how a request looks like (payload is wrapped with extra info)
+ <?xml version="1.0" encoding="UTF-8"?>
+ <message>
+ <parameters>
+ <getGreetings xmlns="http://greetings">
+ <message xmlns="http://helloworld">Luciano</message>
+ </getGreetings>
+ </parameters>
+ </message>
*/
Element msg = partnerRoleMessageExchange.getRequest().getMessage();
if (msg != null) {
String xml = DOMUtils.domToString(msg);
- System.out.println(">>> " + xml);
+ System.out.println(">>> Original message: " + xml);
String payload =
DOMUtils.domToString(getPayload(partnerRoleMessageExchange.getRequest()));
- System.out.println(">>> " + payload);
+ System.out.println(">>> Payload: " + payload);
Object[] args = new Object[] {getPayload(partnerRoleMessageExchange.getRequest())};
@@ -118,6 +126,7 @@
}
// partnerRoleMessageExchange.getResponse().setMessage(null);
+
System.out.println(">>> Result : " + DOMUtils.domToString((Element)result));
if (!success) {
@@ -132,7 +141,8 @@
// createResponseMessage(partnerRoleMessageExchange,
// (Element) result);
// partnerRoleMessageExchange.reply(response);
- replyTwoWayInvocation(partnerRoleMessageExchange.getMessageExchangeId(),
+ replyTwoWayInvocation(partnerRoleMessageExchange.getMessageExchangeId(),
+ operation,
(Element)result);
}
@@ -193,51 +203,58 @@
* @return
*/
private Element getPayload(Message odeMessage) {
- Element payload = null;
- Element parameters = odeMessage.getPart("parameters");
-
- if( parameters != null && parameters.hasChildNodes()) {
- payload = (Element) parameters.getFirstChild().getFirstChild();
- }
-
- return payload;
+ Element payload = null;
+ Element parameters = odeMessage.getPart("parameters");
+
+ if (parameters != null && parameters.hasChildNodes()) {
+ // payload = (Element) parameters.getFirstChild().getFirstChild();
+ payload = (Element)parameters.getFirstChild();
+ }
+
+ return payload;
}
- private void replyTwoWayInvocation(final String odeMexId, final Element result) {
- try {
- _server.getScheduler().execIsolatedTransaction( new Callable<Void>() {
- public Void call() throws Exception {
- PartnerRoleMessageExchange odeMex = null;
- try {
- odeMex = (PartnerRoleMessageExchange) _server.getBpelServer().getEngine().getMessageExchange(odeMexId);
- if (odeMex != null) {
- Message response = createResponseMessage(odeMex, (Element) result);
- odeMex.reply(response);
- }
- } catch (Exception ex) {
- String errmsg = "Unable to process response: " + ex.getMessage();
- if (odeMex != null) {
- odeMex.replyWithFailure(MessageExchange.FailureType.OTHER, errmsg, null);
- }
- }
-
- return null;
- }
- });
- } catch(Exception ex) {
- ex.printStackTrace();
- }
+ private void replyTwoWayInvocation(final String odeMexId, final Operation operation, final Element result) {
+ // ODE MEX needs to be invoked in a TX.
+ try {
+ _server.getScheduler().execIsolatedTransaction(new Callable<Void>() {
+ public Void call() throws Exception {
+ PartnerRoleMessageExchange odeMex = null;
+ try {
+ odeMex = (PartnerRoleMessageExchange)_server.getBpelServer().getEngine().getMessageExchange(odeMexId);
+ if (odeMex != null) {
+ Message response = createResponseMessage(odeMex, operation, (Element)result);
+ odeMex.reply(response);
+ }
+ } catch (Exception ex) {
+ String errmsg = "Unable to process response: " + ex.getMessage();
+ if (odeMex != null) {
+ odeMex.replyWithFailure(MessageExchange.FailureType.OTHER, errmsg, null);
+ }
+ }
+
+ return null;
+ }
+ });
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
}
- private Message createResponseMessage(PartnerRoleMessageExchange partnerRoleMessageExchange, Element invocationResult) {
+ private Message createResponseMessage(PartnerRoleMessageExchange partnerRoleMessageExchange, Operation operation, Element invocationResult) {
Document dom = DOMUtils.newDocument();
-
+
+ String operationName = operation.getName();
+ Part bpelOperationOutputPart = (Part) ((WSDLInterface)operation.getInterface()).getPortType().getOperation(operationName,null,null).getOutput().getMessage().getParts().values().iterator().next();
+
Element contentMessage = dom.createElement("message");
- Element contentPart = dom.createElement(partnerRoleMessageExchange.getOperation().getOutput().getName());
+ Element contentPart = dom.createElement(bpelOperationOutputPart.getName());
+ //Element contentPart2 = dom.createElement(partnerRoleMessageExchange.getOperation().getOutput().getName());
contentPart.appendChild(dom.importNode(invocationResult, true));
+ //contentPart.appendChild(dom.importNode(contentPart2, true));
contentMessage.appendChild(contentPart);
dom.appendChild(contentMessage);
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org