[jbpm-commits] JBoss JBPM SVN: r1802 - in jbossbpm/spec/trunk/modules: api/src/main/java/org/jboss/bpm/model and 24 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Aug 2 08:51:38 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-08-02 08:51:38 -0400 (Sat, 02 Aug 2008)
New Revision: 1802

Added:
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageRef.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/ProcessMessageTest.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/jbpm-beans.xml
   jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/log4j.xml
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/
   jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java
Modified:
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/DialectHandler.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java
   jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java
   jbossbpm/spec/trunk/modules/dialects/api10/.classpath
   jbossbpm/spec/trunk/modules/dialects/api10/pom.xml
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/DialectHandlerImpl.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessage.java
   jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java
   jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/DialectHandlerImpl.java
   jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/resources/jpdl-3.2.xsd
   jbossbpm/spec/trunk/modules/dialects/stp/pom.xml
   jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/DialectHandlerImpl.java
   jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/DialectHandlerImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java
   jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java
   jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java
   jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java
   jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java
   jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/ProcessMarshallerTest.java
   jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/resources/samples/airticket/airticket-api10.xml
Log:
Add support for msgref

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/DialectHandler.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/DialectHandler.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/DialectHandler.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -38,6 +38,11 @@
 public interface DialectHandler
 {
   /**
+   * Get the the supported namespace from this dialect. 
+   */
+  String getNamespaceURI();
+  
+  /**
    * Create a {@link Process} from a descriptor.
    */
   Process createProcess(String pXML);

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/MessageBuilder.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -23,6 +23,7 @@
 
 import javax.management.ObjectName;
 
+
 //$Id$
 
 /**
@@ -36,9 +37,19 @@
   /**
    * Create a {@link Message} with a given name
    */
-  MessageBuilder newMessage(String messageName, ObjectName targetID);
+  MessageBuilder newMessage(String msgName);
 
   /**
+   * Add a message destination
+   */
+  MessageBuilder addToRef(ObjectName toRef);
+  
+  /**
+   * Add a message source
+   */
+  MessageBuilder addFromRef(ObjectName fromRef);
+  
+  /**
    * Add a message property
    */
   MessageBuilder addProperty(String name, String value);

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/SendTask.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -21,6 +21,7 @@
  */
 package org.jboss.bpm.model;
 
+
 //$Id$
 
 /**

Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/TaskBuilder.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -23,7 +23,6 @@
 
 //$Id$
 
-import javax.management.ObjectName;
 
 /**
  * The TaskBuilder can be used to build a {@link Task} dynamically.
@@ -33,9 +32,9 @@
  */
 public interface TaskBuilder extends ActivityBuilder
 {
-  TaskBuilder addMessageRef(String messageName);
+  MessageBuilder addMessage(String msgName);
+  
+  TaskBuilder addMessageRef(String msgName);
 
-  TaskBuilder addMessageRef(String messageName, ObjectName targetID);
-
   TaskBuilder addExecutionHandler(Class<?> clazz);
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/dialects/api10/.classpath
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/.classpath	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/.classpath	2008-08-02 12:51:38 UTC (rev 1802)
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>

Modified: jbossbpm/spec/trunk/modules/dialects/api10/pom.xml
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/pom.xml	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/pom.xml	2008-08-02 12:51:38 UTC (rev 1802)
@@ -30,14 +30,19 @@
     <dependency>
       <groupId>org.jboss.bpm</groupId>
       <artifactId>bpm-api</artifactId>
-      <version>${version}</version>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>com.sun.xml.bind</groupId>
       <artifactId>jaxb-impl</artifactId>
     </dependency>
+    
+    <!-- Runtime Dependencies -->
     <dependency>
+      <groupId>org.jboss.bpm</groupId>
+      <artifactId>bpm-ri</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
       <groupId>com.sun.xml.bind</groupId>
       <artifactId>jaxb-xjc</artifactId>
       <scope>runtime</scope>

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/DialectHandlerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/DialectHandlerImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/DialectHandlerImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -43,6 +43,13 @@
  */
 public class DialectHandlerImpl implements DialectHandler
 {
+  public static final String NAMESPACE_URI = "urn:bpm.jboss:pdl-0.1";
+
+  public String getNamespaceURI()
+  {
+    return NAMESPACE_URI;
+  }
+
   public Process createProcess(String pXML)
   {
     try

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessMarshaller.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -44,6 +44,7 @@
 import org.jboss.bpm.dialect.api10.model.JAXBInclusiveGateway;
 import org.jboss.bpm.dialect.api10.model.JAXBInputSet;
 import org.jboss.bpm.dialect.api10.model.JAXBMessage;
+import org.jboss.bpm.dialect.api10.model.JAXBMessageRef;
 import org.jboss.bpm.dialect.api10.model.JAXBOutputSet;
 import org.jboss.bpm.dialect.api10.model.JAXBParallelGateway;
 import org.jboss.bpm.dialect.api10.model.JAXBProcess;
@@ -105,6 +106,12 @@
     JAXBProcess jaxbProc = new JAXBProcess();
     jaxbProc.setName(proc.getName());
 
+    for (Message msg : proc.getMessages())
+    {
+      JAXBMessage jaxbMsg = adaptMessage(jaxbProc, msg);
+      jaxbProc.getMessages().add(jaxbMsg);
+    }
+
     for (FlowObject fo : proc.getFlowObjects())
     {
       JAXBFlowObject jaxb;
@@ -250,25 +257,44 @@
     if (msgRef != null)
     {
       String msgName = msgRef.getName();
-      if (jaxbProc.getMessageByName(msgName) == null)
+      JAXBMessage jaxbMsg = jaxbProc.getMessageByName(msgName);
+      if (jaxbMsg != null)
       {
-        JAXBMessage jaxbMsg = new JAXBMessage();
-        jaxbMsg.setName(msgName);
-        for (Property prop : msgRef.getProperties())
-        {
-          JAXBProperty jaxbProp = getJaxbProperty(prop);
-          jaxbMsg.getProperties().add(jaxbProp);
-        }
-        jaxbProc.getMessages().add(jaxbMsg);
+        JAXBMessageRef jaxbMsgRef = new JAXBMessageRef();
+        jaxbMsgRef.setNameRef(msgName);
+        
+        String fromStr = getParticipant(msgRef.getFromRef());
+        if (fromStr != null && fromStr.equals(jaxbMsg.getFromRef()) == false)
+          jaxbMsgRef.setFromRef(fromStr);
+        
+        String toStr = getParticipant(msgRef.getToRef());
+        if (toStr != null && toStr.equals(jaxbMsg.getToRef()) == false)
+          jaxbMsgRef.setToRef(toStr);
+        
+        jaxb.setMessageRef(jaxbMsgRef);
       }
-      JAXBMessage jaxbMsg = new JAXBMessage();
-      jaxbMsg.setRef(msgName);
-      jaxbMsg.setFromRef(getParticipant(msgRef.getFromRef()));
-      jaxbMsg.setToRef(getParticipant(msgRef.getToRef()));
-      jaxb.setMessageRef(jaxbMsg);
+      else
+      {
+        jaxbMsg = adaptMessage(jaxbProc, msgRef);
+        jaxb.setMessageRef(jaxbMsg);
+      }
     }
   }
 
+  private JAXBMessage adaptMessage(JAXBProcess jaxbProc, Message msg)
+  {
+    JAXBMessage jaxbMsg = new JAXBMessage();
+    jaxbMsg.setName(msg.getName());
+    jaxbMsg.setFromRef(getParticipant(msg.getFromRef()));
+    jaxbMsg.setToRef(getParticipant(msg.getToRef()));
+    for (Property prop : msg.getProperties())
+    {
+      JAXBProperty jaxbProp = getJaxbProperty(prop);
+      jaxbMsg.getProperties().add(jaxbProp);
+    }
+    return jaxbMsg;
+  }
+
   private String getParticipant(Participant par)
   {
     String parName = null;
@@ -369,5 +395,3 @@
     return jaxb;
   }
 }
-
-

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -30,6 +30,7 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
 
+import org.jboss.bpm.InvalidProcessException;
 import org.jboss.bpm.NotImplementedException;
 import org.jboss.bpm.client.ObjectNameFactory;
 import org.jboss.bpm.dialect.api10.model.JAXBComplexGateway;
@@ -44,12 +45,14 @@
 import org.jboss.bpm.dialect.api10.model.JAXBInclusiveGateway;
 import org.jboss.bpm.dialect.api10.model.JAXBInputSet;
 import org.jboss.bpm.dialect.api10.model.JAXBMessage;
+import org.jboss.bpm.dialect.api10.model.JAXBMessageRef;
 import org.jboss.bpm.dialect.api10.model.JAXBOutputSet;
 import org.jboss.bpm.dialect.api10.model.JAXBParallelGateway;
 import org.jboss.bpm.dialect.api10.model.JAXBProcess;
 import org.jboss.bpm.dialect.api10.model.JAXBProperty;
 import org.jboss.bpm.dialect.api10.model.JAXBSequenceFlow;
 import org.jboss.bpm.dialect.api10.model.JAXBStartEvent;
+import org.jboss.bpm.dialect.api10.model.JAXBSupportingElement;
 import org.jboss.bpm.dialect.api10.model.JAXBTask;
 import org.jboss.bpm.dialect.api10.model.ObjectFactory;
 import org.jboss.bpm.model.GatewayBuilder;
@@ -84,39 +87,53 @@
   {
     ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
     procBuilder.addProcess(jaxbProc.getName());
+    
+    for(JAXBMessage jaxb : jaxbProc.getMessages())
+    {
+      MessageBuilder msgBuilder = procBuilder.addMessage(jaxb.getName());
+      adaptJAXBMessage(msgBuilder, jaxb);
+    }
+    
     for (JAXBFlowObject jaxb : jaxbProc.getFlowObjects())
     {
       if (jaxb instanceof JAXBEvent)
       {
-        adaptJAXBEvent(procBuilder, (JAXBEvent)jaxb);
+        adaptJAXBEvent(procBuilder, jaxbProc, (JAXBEvent)jaxb);
       }
       else if (jaxb instanceof JAXBTask)
       {
-        adaptTask(procBuilder, (JAXBTask)jaxb);
+        adaptTask(procBuilder, jaxbProc, (JAXBTask)jaxb);
       }
       else if (jaxb instanceof JAXBGateway)
       {
-        adaptJAXBGateway(procBuilder, (JAXBGateway)jaxb);
+        adaptJAXBGateway(procBuilder, jaxbProc, (JAXBGateway)jaxb);
       }
       else
       {
         throw new NotImplementedException(jaxb.toString());
       }
     }
-    for(JAXBMessage jaxb : jaxbProc.getMessages())
-    {
-      MessageBuilder msgBuilder = procBuilder.addMessage(jaxb.getName());
-      for (JAXBProperty jaxbProp : jaxb.getProperties())
-      {
-        msgBuilder.addProperty(jaxbProp.getName(), jaxbProp.getValue(), jaxbProp.isCorrelation());
-      }
-    }
     Process proc = procBuilder.getProcess();
     return proc;
   }
 
-  private void adaptJAXBEvent(ProcessBuilder procBuilder, JAXBEvent jaxb)
+  private void adaptJAXBMessage(MessageBuilder msgBuilder, JAXBMessage jaxbMsg)
   {
+    msgBuilder.addFromRef(getObjectName(jaxbMsg.getFromRef()));
+    msgBuilder.addToRef(getObjectName(jaxbMsg.getToRef()));
+    for (JAXBProperty jaxbProp : jaxbMsg.getProperties())
+    {
+      msgBuilder.addProperty(jaxbProp.getName(), jaxbProp.getValue(), jaxbProp.isCorrelation());
+    }
+  }
+
+  private ObjectName getObjectName(String toStr)
+  {
+    return (toStr != null ? ObjectNameFactory.create(toStr) : null);
+  }
+
+  private void adaptJAXBEvent(ProcessBuilder procBuilder, JAXBProcess jaxbProc, JAXBEvent jaxb)
+  {
     if (jaxb instanceof JAXBStartEvent)
     {
       procBuilder.addStartEvent();
@@ -137,7 +154,7 @@
     procBuilder.addSignalHandler(loadHandler(jaxb.getSignalHandler()));
   }
 
-  private void adaptTask(ProcessBuilder procBuilder, JAXBTask jaxb)
+  private void adaptTask(ProcessBuilder procBuilder, JAXBProcess jaxbProc, JAXBTask jaxb)
   {
     TaskBuilder taskBuilder = procBuilder.addTask(jaxb.getName(), jaxb.getTaskType());
     addOutFlow(taskBuilder, jaxb.getOutFlow());
@@ -153,19 +170,29 @@
       for (JAXBProperty jaxbProp : jaxbSet.getProperties())
         taskBuilder.addPropertyOutput(jaxbProp.getName(), jaxbProp.getValue());
     }
-    JAXBMessage jaxbMessage = jaxb.getMessageRef();
-    if (jaxbMessage != null)
+    JAXBSupportingElement jaxbSE = jaxb.getMessageRef();
+    if (jaxbSE instanceof JAXBMessage)
     {
-      String toStr = jaxbMessage.getToRef();
-      ObjectName toRef = (toStr != null ? ObjectNameFactory.create(toStr) : null);
-      taskBuilder.addMessageRef(jaxbMessage.getRef(), toRef);
+      JAXBMessage jaxbMsg = (JAXBMessage)jaxbSE;
+      MessageBuilder msgBuilder = taskBuilder.addMessage(jaxbMsg.getName());
+      adaptJAXBMessage(msgBuilder, jaxbMsg);
     }
+    else if (jaxbSE instanceof JAXBMessageRef)
+    {
+      JAXBMessageRef jaxbMsgRef = (JAXBMessageRef)jaxbSE;
+      String msgName = jaxbMsgRef.getNameRef();
+      JAXBMessage jaxbMsg = jaxbProc.getMessageByName(msgName);
+      if (jaxbMsg == null)
+        throw new InvalidProcessException("Cannot find message with name: " + msgName);
+      MessageBuilder msgBuilder = taskBuilder.addMessage(msgName);
+      adaptJAXBMessage(msgBuilder, jaxbMsg);
+    }
     procBuilder.addExecutionHandler(loadHandler(jaxb.getExecutionHandler()));
     procBuilder.addFlowHandler(loadHandler(jaxb.getFlowHandler()));
     procBuilder.addSignalHandler(loadHandler(jaxb.getSignalHandler()));
   }
 
-  private void adaptJAXBGateway(ProcessBuilder procBuilder, JAXBGateway jaxb)
+  private void adaptJAXBGateway(ProcessBuilder procBuilder, JAXBProcess jaxbProc, JAXBGateway jaxb)
   {
     GatewayBuilder gwBuilder;
     if (jaxb instanceof JAXBExclusiveGateway)

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessage.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessage.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessage.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -38,26 +38,14 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
- at XmlType(name = "Message", propOrder = {"fromRef", "toRef", "properties"})
+ at XmlType(name = "Message", propOrder = { "fromRef", "toRef", "properties"})
 public class JAXBMessage extends JAXBSupportingElement
 {
-  private String ref;
   private String name;
   private String fromRef;
   private String toRef;
   private List<JAXBProperty> properties = new ArrayList<JAXBProperty>();
 
-  public String getRef()
-  {
-    return ref;
-  }
-
-  @XmlAttribute
-  public void setRef(String ref)
-  {
-    this.ref = ref;
-  }
-
   public String getName()
   {
     return name;

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageRef.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageRef.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageRef.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.dialect.api10.model;
+
+//$Id$
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * A Message, which is used in the definition of attributes for a @{link StartEvent},
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at XmlType(name = "MessageRef")
+public class JAXBMessageRef extends JAXBSupportingElement
+{
+  private String nameRef;
+  private String fromRef;
+  private String toRef;
+
+  public String getNameRef()
+  {
+    return nameRef;
+  }
+
+  @XmlAttribute
+  public void setNameRef(String ref)
+  {
+    this.nameRef = ref;
+  }
+
+
+  public String getFromRef()
+  {
+    return fromRef;
+  }
+
+  @XmlElement(name = "from")
+  public void setFromRef(String fromRef)
+  {
+    this.fromRef = fromRef;
+  }
+
+  public String getToRef()
+  {
+    return toRef;
+  }
+
+  @XmlElement(name = "to")
+  public void setToRef(String toRef)
+  {
+    this.toRef = toRef;
+  }
+}
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBMessageRef.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/model/JAXBTask.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -49,7 +49,6 @@
 public class JAXBTask extends JAXBActivity
 {
   private TaskType taskType;
-  private JAXBMessage messageRef;
   private Implementation implementation;
   private List<JAXBInputSet> inputSets = new ArrayList<JAXBInputSet>();
   private List<JAXBOutputSet> outputSets = new ArrayList<JAXBOutputSet>();
@@ -63,6 +62,11 @@
     @XmlElement(name = "msgflow", type = JAXBMessageFlow.class) })
   private JAXBFlow outFlow;
 
+  @XmlElements( { 
+    @XmlElement(name = "msgref", type = JAXBMessageRef.class),
+    @XmlElement(name = "message", type = JAXBMessage.class) })
+  private JAXBSupportingElement messageRef;
+  
   public JAXBFlow getOutFlow()
   {
     return outFlow;
@@ -95,13 +99,13 @@
     this.implementation = implementation;
   }
 
-  public JAXBMessage getMessageRef()
+  public JAXBSupportingElement getMessageRef()
   {
     return messageRef;
   }
 
-  @XmlElement(name = "message")
-  public void setMessageRef(JAXBMessage messageRef)
+  @XmlTransient
+  public void setMessageRef(JAXBSupportingElement messageRef)
   {
     this.messageRef = messageRef;
   }

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/ProcessMessageTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/ProcessMessageTest.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/ProcessMessageTest.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -0,0 +1,103 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.dialect.api10;
+
+// $Id$
+
+import java.io.StringWriter;
+
+import org.jboss.bpm.client.DialectHandler;
+import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.ProcessBuilder;
+import org.jboss.bpm.model.ProcessBuilderFactory;
+import org.jboss.bpm.model.ReceiveTask;
+import org.jboss.bpm.model.TaskBuilder;
+import org.jboss.bpm.model.Task.TaskType;
+import org.jboss.bpm.test.DefaultEngineTestCase;
+
+/**
+ * Test process messages
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 03-Jul-2008
+ */
+public class ProcessMessageTest extends DefaultEngineTestCase
+{
+  public void testProcessMessage() throws Exception
+  {
+    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+    procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("End").addEndEvent("End");
+    procBuilder.addMessage("FooMsg");
+    Process expProc = procBuilder.getProcess();
+    
+    ProcessManager pm = ProcessManager.locateProcessManager();
+    DialectHandler dh = pm.getDialectHandler(DialectHandlerImpl.NAMESPACE_URI);
+    
+    StringWriter strwr = new StringWriter();
+    dh.marshallProcess(expProc, strwr);
+    
+    Process wasProc = dh.createProcess(strwr.toString());
+    assertNotNull(wasProc.getMessageByName("FooMsg"));
+  }
+  
+  public void testReceiveTaskWithMessage() throws Exception
+  {
+    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+    procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+    TaskBuilder taskBuilder = procBuilder.addTask("A", TaskType.Receive);
+    taskBuilder.addMessage("FooMsg");
+    procBuilder.addSequenceFlow("End").addEndEvent("End");
+    Process expProc = procBuilder.getProcess();
+    
+    ProcessManager pm = ProcessManager.locateProcessManager();
+    DialectHandler dh = pm.getDialectHandler(DialectHandlerImpl.NAMESPACE_URI);
+    
+    StringWriter strwr = new StringWriter();
+    dh.marshallProcess(expProc, strwr);
+    
+    Process wasProc = dh.createProcess(strwr.toString());
+    ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObjectByName("A");
+    assertEquals("FooMsg", recTask.getMessageRef().getName());
+  }
+  
+  public void testReceiveTaskWithMessageRef() throws Exception
+  {
+    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+    procBuilder.addProcess(getName()).addMessage("FooMsg");
+    procBuilder.addStartEvent().addSequenceFlow("A");
+    TaskBuilder taskBuilder = procBuilder.addTask("A", TaskType.Receive);
+    taskBuilder.addMessageRef("FooMsg");
+    procBuilder.addSequenceFlow("End").addEndEvent("End");
+    Process expProc = procBuilder.getProcess();
+    
+    ProcessManager pm = ProcessManager.locateProcessManager();
+    DialectHandler dh = pm.getDialectHandler(DialectHandlerImpl.NAMESPACE_URI);
+    
+    StringWriter strwr = new StringWriter();
+    dh.marshallProcess(expProc, strwr);
+    
+    Process wasProc = dh.createProcess(strwr.toString());
+    ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObjectByName("A");
+    assertEquals("FooMsg", recTask.getMessageRef().getName());
+  }
+}


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/ProcessMessageTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/jbpm-beans.xml
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/jbpm-beans.xml	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/jbpm-beans.xml	2008-08-02 12:51:38 UTC (rev 1802)
@@ -0,0 +1,44 @@
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+ 
+  <!-- The KernelLocator -->
+  <bean name="KernelLocator" class="org.jboss.kernel.plugins.util.KernelLocator"/>
+  
+  <!-- The Builder Factories -->
+  <bean name="jBPMProcessBuilderFactory" class="org.jboss.bpm.model.internal.ProcessBuilderFactoryImpl"/>
+  <bean name="jBPMMessageBuilderFactory" class="org.jboss.bpm.model.internal.MessageBuilderFactoryImpl"/>
+  <bean name="jBPMPropertyBuilderFactory" class="org.jboss.bpm.model.internal.PropertyBuilderFactoryImpl"/>
+  
+  <!-- The ProcessEngine -->
+  <bean name="jBPMProcessEngine" class="org.jboss.bpm.client.internal.ProcessEngineImpl">
+    <property name="processManager"><inject bean="jBPMProcessManager"/></property>
+    <property name="executionManager"><inject bean="jBPMExecutionManager"/></property>
+    <property name="signalManager"><inject bean="jBPMSignalManager"/></property>
+    <property name="messageManager"><inject bean="jBPMMessageManager"/></property>
+  </bean>
+
+  <!-- The Managers -->
+  <bean name="jBPMExecutionManager" class="org.jboss.bpm.client.internal.ExecutionManagerImpl"/>
+  <bean name="jBPMSignalManager" class="org.jboss.bpm.client.internal.SignalManagerImpl"/>
+  <bean name="jBPMMessageManager" class="org.jboss.bpm.client.internal.MessageManagerImpl"/>
+  
+  <!-- The ProcessManager -->
+  <bean name="jBPMProcessManager" class="org.jboss.bpm.client.internal.ProcessManagerImpl">
+    <property name="dialectRegistry"><inject bean="jBPMDialectRegistry"/></property>
+    <property name="dialectHandlers">
+      <map keyClass="java.lang.String" valueClass="org.jboss.bpm.client.DialectHandler">
+        <entry><key>api10</key><value><inject bean="jBPMDialectHandlerAPI10"/></value></entry>
+      </map>
+    </property>
+  </bean>
+  <bean name="jBPMDialectHandlerAPI10" class="org.jboss.bpm.dialect.api10.DialectHandlerImpl"/>
+
+  <!-- The DialectRegistry -->
+  <bean name="jBPMDialectRegistry" class="org.jboss.bpm.client.DialectRegistry">
+    <property name="registry">
+      <map keyClass="java.lang.String" valueClass="java.lang.String">
+        <entry><key>urn:bpm.jboss:pdl-0.1</key><value>api10</value></entry>
+      </map>
+    </property>
+  </bean>
+  
+</deployment>
\ No newline at end of file


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/jbpm-beans.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/log4j.xml
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/log4j.xml	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/log4j.xml	2008-08-02 12:51:38 UTC (rev 1802)
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+  <!-- ================================= -->
+  <!-- Preserve messages in a local file -->
+  <!-- ================================= -->
+
+  <appender name="FILE" class="org.apache.log4j.FileAppender">
+    <param name="File" value="${log4j.output.dir}/test.log"/>
+    <param name="Append" value="false"/>
+    <layout class="org.apache.log4j.PatternLayout">
+      <!-- The default pattern: Date Priority [Category] Message\n -->
+      <param name="ConversionPattern" value="%d %-5p [%c:%L] %m%n"/>
+    </layout>
+  </appender>
+  
+  <!-- ============================== -->
+  <!-- Append messages to the console -->
+  <!-- ============================== -->
+
+  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+    <param name="Target" value="System.out" />
+    <param name="Threshold" value="INFO" />
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n" />
+    </layout>
+  </appender>
+
+  <!-- ================ -->
+  <!-- Limit categories -->
+  <!-- ================ -->
+
+  <category name="org.jbpm">
+    <priority value="DEBUG" />
+  </category>
+
+  <category name="org.hibernate">
+    <priority value="INFO" />
+  </category>
+
+  <!-- hide optimistic locking failures -->
+  <category name="org.hibernate.event.def.AbstractFlushingEventListener">
+    <priority value="FATAL" />
+  </category>
+
+  <!-- ======================= -->
+  <!-- Setup the Root category -->
+  <!-- ======================= -->
+
+  <root>
+    <!--appender-ref ref="CONSOLE"/-->
+    <appender-ref ref="FILE"/>
+  </root>
+
+</log4j:configuration>


Property changes on: jbossbpm/spec/trunk/modules/dialects/api10/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/DialectHandlerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/DialectHandlerImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/DialectHandlerImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -45,7 +45,13 @@
  */
 public class DialectHandlerImpl implements DialectHandler
 {
-  
+  public static final String NAMESPACE_URI = "urn:jbpm.org:jpdl-3.2";
+
+  public String getNamespaceURI()
+  {
+    return NAMESPACE_URI;
+  }
+
   public Process createProcess(String pXML)
   {
     try

Modified: jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/resources/jpdl-3.2.xsd
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/resources/jpdl-3.2.xsd	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/resources/jpdl-3.2.xsd	2008-08-02 12:51:38 UTC (rev 1802)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns="urn:jbpm.org:jpdl-3.2" targetNamespace="urn:jbpm.org:jpdl-3.2" xmlns:xs="http://www.w3.org/2001/XMLSchema"
+  elementFormDefault="qualified">
 
-<xs:schema xmlns=          "urn:jbpm.org:jpdl-3.2" 
-           targetNamespace="urn:jbpm.org:jpdl-3.2" 
-           xmlns:xs="http://www.w3.org/2001/XMLSchema"
-           elementFormDefault="qualified">
-
   <!--  PROCESS-DEFINITION -->
   <!--  ################## -->
   <xs:element name="process-definition">
@@ -13,8 +10,8 @@
         <xs:element ref="description" />
         <xs:element ref="swimlane" />
         <xs:element ref="start-state" />
-        <xs:group   ref="node-elements"/>
-        <xs:group   ref="action-elements" />
+        <xs:group ref="node-elements" />
+        <xs:group ref="action-elements" />
         <xs:element ref="event" />
         <xs:element ref="exception-handler" />
         <xs:element ref="task" />
@@ -28,7 +25,7 @@
   <xs:element name="swimlane">
     <xs:complexType>
       <xs:sequence minOccurs="0" maxOccurs="1">
-        <xs:element ref="assignment"/>
+        <xs:element ref="assignment" />
       </xs:sequence>
       <xs:attribute name="name" type="xs:string" use="required" />
     </xs:complexType>
@@ -40,63 +37,58 @@
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="description" />
-        <xs:element ref="task"/>
-        <xs:element ref="transition"/>
-        <xs:element ref="event"/>
-        <xs:element ref="exception-handler"/>
+        <xs:element ref="task" />
+        <xs:element ref="transition" />
+        <xs:element ref="event" />
+        <xs:element ref="exception-handler" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string"/>
+      <xs:attribute name="name" type="xs:string" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="end-state">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="description" />
-        <xs:element ref="event"/>
-        <xs:element ref="exception-handler"/>
+        <xs:element ref="event" />
+        <xs:element ref="exception-handler" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
-      <xs:attribute name="end-complete-process" type="booleanType" use="optional" default="false"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
+      <xs:attribute name="end-complete-process" type="booleanType" use="optional" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="decision">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="description" />
         <xs:element name="handler" type="delegation" />
-        <xs:element ref="event"/>
-        <xs:element ref="exception-handler"/>
-        <xs:element ref="transition"/>
+        <xs:element ref="event" />
+        <xs:element ref="exception-handler" />
+        <xs:element ref="transition" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="expression" type="xs:string" />
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="fork">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="script" />
         <xs:group ref="node-content-elements" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-  
   <xs:element name="join">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:group ref="node-content-elements" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="node">
     <xs:complexType>
       <xs:sequence>
@@ -107,91 +99,85 @@
           <xs:group ref="node-content-elements" />
         </xs:choice>
       </xs:sequence>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="process-state">
     <xs:complexType>
-    	<xs:choice minOccurs="0" maxOccurs="unbounded">
-    		<xs:element name="sub-process">
-    			<xs:complexType>
-    				<xs:attribute name="name" type="xs:string"
-    					use="required" />
-    				<xs:attribute name="version" type="xs:integer" />
-    				<xs:attribute name="binding" type="xs:string" />
-    			</xs:complexType>
-    		</xs:element>
-    		<xs:element ref="variable" />
-    		<xs:group ref="node-content-elements" />
-    	</xs:choice>
-    	<xs:attribute name="name" type="xs:string" use="required" />
-    	<xs:attribute name="async" type="xs:string" default="false" />
-    	<xs:attribute name="binding" type="bindingType"></xs:attribute>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element name="sub-process">
+          <xs:complexType>
+            <xs:attribute name="name" type="xs:string" use="required" />
+            <xs:attribute name="version" type="xs:integer" />
+            <xs:attribute name="binding" type="xs:string" />
+          </xs:complexType>
+        </xs:element>
+        <xs:element ref="variable" />
+        <xs:group ref="node-content-elements" />
+      </xs:choice>
+      <xs:attribute name="name" type="xs:string" use="required" />
+      <xs:attribute name="async" type="xs:string" default="false" />
+      <xs:attribute name="binding" type="bindingType"></xs:attribute>
     </xs:complexType>
   </xs:element>
-
   <xs:element name="state">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
-        <xs:group ref="node-content-elements"/>
+        <xs:group ref="node-content-elements" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="super-state">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
-        <xs:group ref="node-elements"/>
-        <xs:group ref="node-content-elements"/>
+        <xs:group ref="node-elements" />
+        <xs:group ref="node-content-elements" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="task-node">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="task" />
         <xs:group ref="node-content-elements" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="create-tasks" type="booleanType" default="true" />
       <xs:attribute name="end-tasks" type="booleanType" default="false" />
       <xs:attribute name="signal" default="last">
         <xs:simpleType>
           <xs:restriction base="xs:string">
-            <xs:enumeration value="unsynchronized"/>
-            <xs:enumeration value="never"/>
-            <xs:enumeration value="first"/>
-            <xs:enumeration value="first-wait"/>
-            <xs:enumeration value="last"/>
-            <xs:enumeration value="last-wait"/>
+            <xs:enumeration value="unsynchronized" />
+            <xs:enumeration value="never" />
+            <xs:enumeration value="first" />
+            <xs:enumeration value="first-wait" />
+            <xs:enumeration value="last" />
+            <xs:enumeration value="last-wait" />
           </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="async" type="xs:string" default="false" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="mail-node">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="subject" />
         <xs:element ref="text" />
-        <xs:group ref="node-content-elements"/>
+        <xs:group ref="node-content-elements" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
-      <xs:attribute name="template" type="xs:string"/>
-      <xs:attribute name="actors" type="xs:string"/>
-      <xs:attribute name="to" type="xs:string"/>
-      <xs:attribute name="subject" type="xs:string"/>
-      <xs:attribute name="text" type="xs:string"/>
+      <xs:attribute name="template" type="xs:string" />
+      <xs:attribute name="actors" type="xs:string" />
+      <xs:attribute name="to" type="xs:string" />
+      <xs:attribute name="subject" type="xs:string" />
+      <xs:attribute name="text" type="xs:string" />
     </xs:complexType>
   </xs:element>
 
@@ -201,16 +187,16 @@
   <xs:element name="transition">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
-         <xs:element ref="description" />
-         <xs:element name="condition">
-           <xs:complexType mixed="true">
-             <xs:sequence minOccurs="0" maxOccurs="unbounded">
-               <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
-             </xs:sequence>
-             <xs:attribute name="expression" type="xs:string" />
-           </xs:complexType>
-         </xs:element>
-        <xs:group ref="action-elements"/>
+        <xs:element ref="description" />
+        <xs:element name="condition">
+          <xs:complexType mixed="true">
+            <xs:sequence minOccurs="0" maxOccurs="unbounded">
+              <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+            </xs:sequence>
+            <xs:attribute name="expression" type="xs:string" />
+          </xs:complexType>
+        </xs:element>
+        <xs:group ref="action-elements" />
         <xs:element ref="exception-handler" />
       </xs:choice>
       <xs:attribute name="to" type="xs:string" use="required" />
@@ -234,18 +220,16 @@
       <xs:attribute name="async" type="xs:string" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="cancel-timer">
     <xs:complexType>
       <xs:attribute name="name" type="xs:string" use="required" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="create-timer">
     <xs:complexType>
-      <xs:choice  minOccurs="0">
-        <xs:element ref="action"/>
-        <xs:element ref="script"/>
+      <xs:choice minOccurs="0">
+        <xs:element ref="action" />
+        <xs:element ref="script" />
       </xs:choice>
       <xs:attribute name="duedate" type="xs:string" use="required" />
       <xs:attribute name="name" type="xs:string" />
@@ -253,9 +237,8 @@
       <xs:attribute name="transition" type="xs:string" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="script">
-    <xs:complexType  mixed="true">
+    <xs:complexType mixed="true">
       <xs:sequence>
         <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
@@ -263,20 +246,19 @@
       <xs:attribute name="accept-propagated-events" type="booleanType" default="true" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="mail">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="subject" />
         <xs:element ref="text" />
       </xs:choice>
-      <xs:attribute name="name" type="xs:string" use="required"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
       <xs:attribute name="async" type="xs:string" default="false" />
-      <xs:attribute name="template" type="xs:string"/>
-      <xs:attribute name="actors" type="xs:string"/>
-      <xs:attribute name="to" type="xs:string"/>
-      <xs:attribute name="subject" type="xs:string"/>
-      <xs:attribute name="text" type="xs:string"/>
+      <xs:attribute name="template" type="xs:string" />
+      <xs:attribute name="actors" type="xs:string" />
+      <xs:attribute name="to" type="xs:string" />
+      <xs:attribute name="subject" type="xs:string" />
+      <xs:attribute name="text" type="xs:string" />
     </xs:complexType>
   </xs:element>
 
@@ -285,31 +267,31 @@
   <xs:element name="event">
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
-        <xs:group ref="action-elements"/>
+        <xs:group ref="action-elements" />
       </xs:choice>
       <xs:attribute name="type" use="required">
         <xs:simpleType>
           <xs:union>
             <xs:simpleType>
-              <xs:restriction base="xs:string"/>
+              <xs:restriction base="xs:string" />
             </xs:simpleType>
             <xs:simpleType>
               <xs:restriction base="xs:string">
-                <xs:enumeration value="node-enter"/>
-                <xs:enumeration value="node-leave"/>
-                <xs:enumeration value="process-start"/>
-                <xs:enumeration value="process-end"/>
-                <xs:enumeration value="task-create"/>
-                <xs:enumeration value="task-assign"/>
-                <xs:enumeration value="task-start"/>
-                <xs:enumeration value="task-end"/>
-                <xs:enumeration value="before-signal"/>
-                <xs:enumeration value="after-signal"/>
-                <xs:enumeration value="superstate-enter"/>
-                <xs:enumeration value="superstate-leave"/>
-                <xs:enumeration value="timer-create"/>
-                <xs:enumeration value="subprocess-created"/>
-                <xs:enumeration value="subprocess-end"/>
+                <xs:enumeration value="node-enter" />
+                <xs:enumeration value="node-leave" />
+                <xs:enumeration value="process-start" />
+                <xs:enumeration value="process-end" />
+                <xs:enumeration value="task-create" />
+                <xs:enumeration value="task-assign" />
+                <xs:enumeration value="task-start" />
+                <xs:enumeration value="task-end" />
+                <xs:enumeration value="before-signal" />
+                <xs:enumeration value="after-signal" />
+                <xs:enumeration value="superstate-enter" />
+                <xs:enumeration value="superstate-leave" />
+                <xs:enumeration value="timer-create" />
+                <xs:enumeration value="subprocess-created" />
+                <xs:enumeration value="subprocess-end" />
               </xs:restriction>
             </xs:simpleType>
           </xs:union>
@@ -323,10 +305,10 @@
   <xs:element name="exception-handler">
     <xs:complexType>
       <xs:choice minOccurs="1" maxOccurs="unbounded">
-        <xs:element ref="action"/>
-        <xs:element ref="script"/>
+        <xs:element ref="action" />
+        <xs:element ref="script" />
       </xs:choice>
-      <xs:attribute name="exception-class" type="xs:string"/>
+      <xs:attribute name="exception-class" type="xs:string" />
     </xs:complexType>
   </xs:element>
 
@@ -336,10 +318,10 @@
     <xs:complexType>
       <xs:choice minOccurs="0" maxOccurs="unbounded">
         <xs:element ref="description" />
-        <xs:element ref="assignment"/>
-        <xs:element ref="controller"/>
-        <xs:element ref="event"/>
-        <xs:element ref="timer"/>
+        <xs:element ref="assignment" />
+        <xs:element ref="controller" />
+        <xs:element ref="event" />
+        <xs:element ref="timer" />
         <xs:element name="reminder">
           <xs:complexType>
             <xs:attribute name="duedate" type="xs:string" use="required" />
@@ -348,18 +330,16 @@
         </xs:element>
       </xs:choice>
       <xs:attribute name="name" type="xs:string" />
-      <xs:attribute name="blocking" type="booleanType" default="false"/>
-      <xs:attribute name="signalling" type="booleanType" default="true"/>
+      <xs:attribute name="blocking" type="booleanType" default="false" />
+      <xs:attribute name="signalling" type="booleanType" default="true" />
       <xs:attribute name="description" type="xs:string" />
       <xs:attribute name="duedate" type="xs:string" />
       <xs:attribute name="swimlane" type="xs:string" />
       <xs:attribute name="priority" type="priorityType" default="normal" />
-      <xs:attribute name="notify" type="booleanType" default="false"/>
+      <xs:attribute name="notify" type="booleanType" default="false" />
     </xs:complexType>
   </xs:element>
-  
   <xs:element name="controller" type="delegation" />
-
   <xs:element name="assignment">
     <xs:complexType>
       <xs:complexContent>
@@ -385,31 +365,28 @@
       <xs:attribute name="transition" type="xs:string" />
     </xs:complexType>
   </xs:element>
-
   <xs:element name="variable">
     <xs:complexType>
       <xs:sequence>
         <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
-      <xs:attribute name="name" type="xs:string" use="required"/>
-      <xs:attribute name="access" type="xs:string" default="read,write"/>
+      <xs:attribute name="name" type="xs:string" use="required" />
+      <xs:attribute name="access" type="xs:string" default="read,write" />
       <xs:attribute name="mapped-name" type="xs:string" />
     </xs:complexType>
   </xs:element>
 
   <!--  MAIL  -->
   <!--  #### -->
-  <xs:element name="to" type="xs:string"/>
-  <xs:element name="recipients" type="xs:string"/>
-  <xs:element name="subject" type="xs:string"/>
-  <xs:element name="text" type="xs:string"/>
-  <xs:element name="template" type="xs:string"/>
+  <xs:element name="to" type="xs:string" />
+  <xs:element name="recipients" type="xs:string" />
+  <xs:element name="subject" type="xs:string" />
+  <xs:element name="text" type="xs:string" />
+  <xs:element name="template" type="xs:string" />
 
   <!-- TYPES AND GROUPS -->
   <!-- ################ -->
-
   <xs:element name="description" type="xs:string" />
-
   <xs:complexType name="delegation" mixed="true">
     <xs:sequence>
       <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
@@ -417,83 +394,76 @@
     <xs:attribute name="class" type="xs:string" />
     <xs:attribute name="config-type" default="field" type="xs:string" />
   </xs:complexType>
-
   <xs:simpleType name="configType">
     <xs:restriction base="xs:string">
-      <xs:enumeration value="field"/>
-      <xs:enumeration value="bean"/>
-      <xs:enumeration value="constructor"/>
-      <xs:enumeration value="configuration-property"/>
+      <xs:enumeration value="field" />
+      <xs:enumeration value="bean" />
+      <xs:enumeration value="constructor" />
+      <xs:enumeration value="configuration-property" />
     </xs:restriction>
   </xs:simpleType>
-
   <xs:simpleType name="booleanType">
     <xs:restriction base="xs:string">
-      <xs:enumeration value="yes"/>
-      <xs:enumeration value="no"/>
-      <xs:enumeration value="true"/>
-      <xs:enumeration value="false"/>
-      <xs:enumeration value="on"/>
-      <xs:enumeration value="off"/>
+      <xs:enumeration value="yes" />
+      <xs:enumeration value="no" />
+      <xs:enumeration value="true" />
+      <xs:enumeration value="false" />
+      <xs:enumeration value="on" />
+      <xs:enumeration value="off" />
     </xs:restriction>
   </xs:simpleType>
-  
   <xs:simpleType name="priorityType">
     <xs:union>
       <xs:simpleType>
         <xs:restriction base="xs:string">
-          <xs:enumeration value="highest"/>
-          <xs:enumeration value="high"/>
-          <xs:enumeration value="normal"/>
-          <xs:enumeration value="low"/>
-          <xs:enumeration value="lowest"/>
+          <xs:enumeration value="highest" />
+          <xs:enumeration value="high" />
+          <xs:enumeration value="normal" />
+          <xs:enumeration value="low" />
+          <xs:enumeration value="lowest" />
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
-        <xs:restriction base="xs:int"/>
+        <xs:restriction base="xs:int" />
       </xs:simpleType>
     </xs:union>
   </xs:simpleType>
-
   <xs:group name="node-elements">
     <xs:choice>
-      <xs:element ref="node"/>
-      <xs:element ref="state"/>
-      <xs:element ref="task-node"/>
-      <xs:element ref="super-state"/>
-      <xs:element ref="process-state"/>
-      <xs:element ref="fork"/>
-      <xs:element ref="join"/>
-      <xs:element ref="decision"/>
-      <xs:element ref="end-state"/>
-      <xs:element ref="mail-node"/>
+      <xs:element ref="node" />
+      <xs:element ref="state" />
+      <xs:element ref="task-node" />
+      <xs:element ref="super-state" />
+      <xs:element ref="process-state" />
+      <xs:element ref="fork" />
+      <xs:element ref="join" />
+      <xs:element ref="decision" />
+      <xs:element ref="end-state" />
+      <xs:element ref="mail-node" />
     </xs:choice>
   </xs:group>
-  
   <xs:group name="action-elements">
     <xs:choice>
-      <xs:element ref="action"/>
-      <xs:element ref="script"/>
-      <xs:element ref="create-timer"/>
-      <xs:element ref="cancel-timer"/>
-      <xs:element ref="mail"/>
+      <xs:element ref="action" />
+      <xs:element ref="script" />
+      <xs:element ref="create-timer" />
+      <xs:element ref="cancel-timer" />
+      <xs:element ref="mail" />
     </xs:choice>
   </xs:group>
-  
   <xs:group name="node-content-elements">
     <xs:choice>
       <xs:element ref="description" />
-      <xs:element ref="event"/>
-      <xs:element ref="exception-handler"/>
-      <xs:element ref="timer"/>
-      <xs:element ref="transition"/>
+      <xs:element ref="event" />
+      <xs:element ref="exception-handler" />
+      <xs:element ref="timer" />
+      <xs:element ref="transition" />
     </xs:choice>
   </xs:group>
-
   <xs:simpleType name="bindingType">
-  	<xs:restriction base="xs:string">
-  		<xs:enumeration value="late"></xs:enumeration>
-  		<xs:enumeration value="early"></xs:enumeration>
-  	</xs:restriction>
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="late"></xs:enumeration>
+      <xs:enumeration value="early"></xs:enumeration>
+    </xs:restriction>
   </xs:simpleType>
-</xs:schema>
+</xs:schema>
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/dialects/stp/pom.xml
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/stp/pom.xml	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/stp/pom.xml	2008-08-02 12:51:38 UTC (rev 1802)
@@ -30,7 +30,6 @@
     <dependency>
       <groupId>org.jboss.bpm</groupId>
       <artifactId>bpm-api</artifactId>
-      <version>${version}</version>
     </dependency>
     <dependency>
       <groupId>com.sun.xml.bind</groupId>
@@ -41,7 +40,6 @@
     <dependency>
       <groupId>org.jboss.bpm</groupId>
       <artifactId>bpm-ri</artifactId>
-      <version>${version}</version>
       <scope>runtime</scope>
     </dependency>
     <dependency>

Modified: jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/DialectHandlerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/DialectHandlerImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/DialectHandlerImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -43,7 +43,13 @@
  */
 public class DialectHandlerImpl implements DialectHandler
 {
+  public static final String NAMESPACE_URI = "http://stp.eclipse.org/bpmn";
 
+  public String getNamespaceURI()
+  {
+    return NAMESPACE_URI;
+  }
+
   public Process createProcess(String pXML)
   {
     try

Modified: jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/DialectHandlerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/DialectHandlerImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/DialectHandlerImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -45,7 +45,13 @@
  */
 public class DialectHandlerImpl implements DialectHandler
 {
-  
+  public static final String NAMESPACE_URI = "http://www.wfmc.org/2008/XPDL2.1";
+
+  public String getNamespaceURI()
+  {
+    return NAMESPACE_URI;
+  }
+
   public Process createProcess(String pXML)
   {
     try

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageBuilderImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -39,12 +39,24 @@
 {
   private MessageImpl message;
   
-  public MessageBuilder newMessage(String name, ObjectName targetID)
+  public MessageBuilder newMessage(String name)
   {
-    message = new MessageImpl(name, targetID);
+    message = new MessageImpl(name);
     return this;
   }
 
+  public MessageBuilder addToRef(ObjectName toRef)
+  {
+    message.setTargetID(toRef);
+    return this;
+  }
+  
+  public MessageBuilder addFromRef(ObjectName fromRef)
+  {
+    message.setSourceID(fromRef);
+    return this;
+  }
+
   public MessageBuilder addProperty(String name, String value)
   {
     Property prop = new PropertyImpl(name, new ExpressionImpl(value));

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/MessageImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -52,17 +52,17 @@
   private ObjectName targetID;
   private List<Property> props = new ArrayList<Property>();
 
-  public MessageImpl(String name, ObjectName targetID)
+  public MessageImpl(String name)
   {
-    this(name, targetID, null);
+    if (name == null)
+      throw new IllegalArgumentException("Message name cannot be null");
+    
+    this.name = name;
   }
 
   public MessageImpl(String name, ObjectName targetID, FlowObject sourceFO)
   {
-    if (name == null)
-      throw new IllegalArgumentException("Message name cannot be null");
-    
-    this.name = name;
+    this(name);
     this.targetID = targetID;
     this.sourceFO = sourceFO;
   }
@@ -72,6 +72,26 @@
     return name;
   }
 
+  public ObjectName getSourceID()
+  {
+    return sourceID;
+  }
+
+  public void setSourceID(ObjectName sourceID)
+  {
+    this.sourceID = sourceID;
+  }
+
+  public ObjectName getTargetID()
+  {
+    return targetID;
+  }
+
+  public void setTargetID(ObjectName targetID)
+  {
+    this.targetID = targetID;
+  }
+
   public Property getProperty(String name)
   {
     for (Property prop : props)

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -187,7 +187,7 @@
   
   public MessageBuilder addMessage(String name)
   {
-    MessageBuilder msgBuilder = new MessageBuilderImpl().newMessage(name, null);
+    MessageBuilder msgBuilder = new MessageBuilderImpl().newMessage(name);
     proc.addMessage(msgBuilder.getMessage());
     return msgBuilder;
   }

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ReceiveTaskImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -162,12 +162,8 @@
     if (messageRef == null)
       throw new InvalidProcessException("A Message for the MessageRef attribute MUST be entered");
     
-    String msgName = messageRef.getName();
-    Message procMessage = proc.getMessageByName(msgName);
-    if (procMessage == null)
-      throw new InvalidProcessException("Cannot find referenced message: " + msgName);
-    
-    for (Property prop : procMessage.getProperties())
-      ((MessageImpl)messageRef).addProperty(prop);
+    initializeMessageRef(proc, messageRef);
+    if (messageRef.getToRef() != null)
+      throw new IllegalArgumentException("Message targetID must be null for: " + this);
   }
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SendTaskImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -105,7 +105,8 @@
       
       Entity entityRef = toRef.getEntityRef();
       ObjectName targetID = ObjectNameFactory.create(entityRef.getName());
-      msgBuilder.newMessage(messageRef.getName(), targetID);
+      msgBuilder.newMessage(messageRef.getName());
+      msgBuilder.addToRef(targetID);
 
       // Copy the properties from the execution context
       // to the send message
@@ -134,12 +135,8 @@
     if (messageRef == null)
       throw new InvalidProcessException("A Message for the MessageRef attribute MUST be entered");
     
-    String msgName = messageRef.getName();
-    Message procMessage = proc.getMessageByName(msgName);
-    if (procMessage == null)
-      throw new InvalidProcessException("Cannot find referenced message: " + msgName);
-    
-    for (Property prop : procMessage.getProperties())
-      ((MessageImpl)messageRef).addProperty(prop);
+    initializeMessageRef(proc, messageRef);
+    if (messageRef.getToRef() == null)
+      throw new IllegalArgumentException("Message targetID cannot be null for: " + this);
   }
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskBuilderImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -25,7 +25,7 @@
 
 import javax.management.ObjectName;
 
-import org.jboss.bpm.model.Property;
+import org.jboss.bpm.model.MessageBuilder;
 import org.jboss.bpm.model.Task;
 import org.jboss.bpm.model.TaskBuilder;
 
@@ -37,34 +37,49 @@
  */
 public class TaskBuilderImpl extends ActivityBuilderImpl implements TaskBuilder
 {
-  private MessageImpl message;
-
   public TaskBuilderImpl(ProcessImpl proc, FlowObjectImpl flowObject)
   {
     super(proc, flowObject);
   }
 
-  public TaskBuilder addMessageRef(String messageName)
+  @Override
+  public MessageBuilder addMessage(String name)
   {
-    return addMessageRef(messageName, null);
+    MessageBuilder msgBuilder = new MessageBuilderImpl().newMessage(name);
+    if (flowObject instanceof ReceiveTaskImpl)
+    {
+      ReceiveTaskImpl receiveTask = (ReceiveTaskImpl)flowObject;
+      receiveTask.setMessageRef(msgBuilder.getMessage());
+    }
+    else if (flowObject instanceof SendTaskImpl)
+    {
+      SendTaskImpl sendTask = (SendTaskImpl)flowObject;
+      sendTask.setMessageRef(msgBuilder.getMessage());
+    }
+    else
+    {
+      throw new IllegalStateException("Cannot add message to: " + flowObject);
+    }
+    return msgBuilder;
   }
 
-  public TaskBuilder addMessageRef(String msgRef, ObjectName targetID)
+  public TaskBuilder addMessageRef(String msgName)
   {
-    message = new MessageImpl(msgRef, targetID);
+    return addMessageRef(msgName, null, null);
+  }
+
+  public TaskBuilder addMessageRef(String msgName, ObjectName fromID, ObjectName toID)
+  {
+    MessageImpl message = new MessageImpl(msgName);
     if (flowObject instanceof ReceiveTaskImpl)
     {
-      if (targetID != null)
-        throw new IllegalArgumentException("Message targetID must be null for ReceiveTask: " + flowObject);
-
       ReceiveTaskImpl receiveTask = (ReceiveTaskImpl)flowObject;
       receiveTask.setMessageRef(message);
     }
     else if (flowObject instanceof SendTaskImpl)
     {
-      if (targetID == null)
-        throw new IllegalArgumentException("Message targetID cannot be null for SendTask: " + flowObject);
-
+      message.setSourceID(fromID);
+      message.setTargetID(toID);
       SendTaskImpl sendTask = (SendTaskImpl)flowObject;
       sendTask.setMessageRef(message);
     }
@@ -75,13 +90,6 @@
     return this;
   }
 
-  public TaskBuilder addMessageProperty(String name, String value, boolean isCorrelation)
-  {
-    Property prop = new PropertyImpl(name, new ExpressionImpl(value), isCorrelation);
-    message.addProperty(prop);
-    return this;
-  }
-
   public TaskBuilder addExecutionHandler(Class<?> clazz)
   {
     super.addExecutionHandler(clazz);

Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -21,6 +21,9 @@
  */
 package org.jboss.bpm.model.internal;
 
+import org.jboss.bpm.model.Message;
+import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.Property;
 import org.jboss.bpm.model.Signal;
 import org.jboss.bpm.model.Task;
 import org.jboss.bpm.runtime.SignalHandler;
@@ -76,4 +79,21 @@
   {
     return "Task[" + getName() + "]";
   }
+
+  protected void initializeMessageRef(Process proc, Message msg)
+  {
+    String msgName = msg.getName();
+    MessageImpl procMsg = (MessageImpl)proc.getMessageByName(msgName);
+    if (procMsg != null)
+    {
+      MessageImpl msgImpl = (MessageImpl)msg;
+      if (msgImpl.getSourceID() == null && procMsg.getSourceID() != null)
+        msgImpl.setSourceID(procMsg.getSourceID());
+      if (msgImpl.getTargetID() == null && procMsg.getTargetID() != null)
+        msgImpl.setTargetID(procMsg.getTargetID());
+
+      for (Property prop : procMsg.getProperties())
+        ((MessageImpl)msg).addProperty(prop);
+    }
+  }
 }
\ No newline at end of file

Modified: jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -54,7 +54,10 @@
     // Create a Process through the ProcessBuilder
     ProcessBuilderFactory procFactory = ProcessBuilderFactory.newInstance();
     ProcessBuilder procBuilder = procFactory.newProcessBuilder();
-    procBuilder.addProcess("Airticket").addStartEvent().addSequenceFlow("ReceiveReqTask");
+    procBuilder.addProcess("Airticket");
+    
+    // Add Start Event
+    procBuilder.addStartEvent().addSequenceFlow("ReceiveReqTask");
 
     // Build the ReceiveReqTask
     TaskBuilder taskBuilder = procBuilder.addTask("ReceiveReqTask", TaskType.Receive);
@@ -94,7 +97,7 @@
 
     // Build the SendInvalidTask
     taskBuilder = procBuilder.addTask("SendInvalidTask", TaskType.Send);
-    taskBuilder.addMessageRef("InvalidDataMsg", listenerID).
+    taskBuilder.addMessageRef("InvalidDataMsg").
     addSequenceFlow("ReceiveReqTask");
 
     // Build the AvailabilityGateway
@@ -104,12 +107,12 @@
     
     // Build the SendOfferTask
     taskBuilder = procBuilder.addTask("SendOfferTask", TaskType.Send);
-    taskBuilder.addMessageRef("OfferMsg", listenerID).
+    taskBuilder.addMessageRef("OfferMsg").
     addSequenceFlow("ReceiveOrderTask");
 
     // Build the SendNotAvailableTask
     taskBuilder = procBuilder.addTask("SendNotAvailableTask", TaskType.Send);
-    taskBuilder.addMessageRef("NotAvailableMsg", listenerID).
+    taskBuilder.addMessageRef("NotAvailableMsg").
     addSequenceFlow("ReceiveReqTask");
 
     // Build the ReceiveReqTask
@@ -151,9 +154,12 @@
     
     // Build the SendConfirmTask
     taskBuilder = procBuilder.addTask("SendConfirmTask", TaskType.Send);
-    taskBuilder.addMessageRef("ConfirmMsg", listenerID).
+    taskBuilder.addMessageRef("ConfirmMsg").
     addSequenceFlow("End");
     
+    // Add the EndEvent
+    procBuilder.addEndEvent("End");
+
     // Add ReqDataMsg 
     procBuilder.addMessage("ReqDataMsg").
     addProperty("Name", null, true).
@@ -164,6 +170,7 @@
     
     // Add InvalidDataMsg 
     procBuilder.addMessage("InvalidDataMsg").
+    addToRef(listenerID).
     addProperty("Name", null, true).
     addProperty("From", null, true).
     addProperty("To", null, true).
@@ -172,6 +179,7 @@
     
     // Add NotAvailableMsg 
     procBuilder.addMessage("NotAvailableMsg").
+    addToRef(listenerID).
     addProperty("Name", null, true).
     addProperty("From", null, true).
     addProperty("To", null, true).
@@ -180,6 +188,7 @@
     
     // Add OfferMsg 
     procBuilder.addMessage("OfferMsg").
+    addToRef(listenerID).
     addProperty("Name", null, true).
     addProperty("From", null, true).
     addProperty("To", null, true).
@@ -195,6 +204,7 @@
     
     // Add ConfirmMsg 
     procBuilder.addMessage("ConfirmMsg").
+    addToRef(listenerID).
     addProperty("Name", null, true).
     addProperty("From", null, true).
     addProperty("To", null, true).
@@ -202,9 +212,7 @@
     addProperty("Seats", null, true).
     addProperty("Price", null, true);
     
-    // Add the EndEvent
-    procBuilder.addEndEvent("End");
-    
+    // Get the process
     Process proc = procBuilder.getProcess();
     return proc;
   }

Modified: jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/server/AirticketServiceImpl.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -157,7 +157,7 @@
   {
     MessageBuilderFactory msgFactory = MessageBuilderFactory.newInstance();
     MessageBuilder msgBuilder = msgFactory.newMessageBuilder();
-    Message msg = msgBuilder.newMessage("ReqDataMsg", null).
+    Message msg = msgBuilder.newMessage("ReqDataMsg").
     addProperty("Name", gwtMsg.name).
     addProperty("From", gwtMsg.from).
     addProperty("To", gwtMsg.to).
@@ -171,7 +171,7 @@
   {
     MessageBuilderFactory msgFactory = MessageBuilderFactory.newInstance();
     MessageBuilder msgBuilder = msgFactory.newMessageBuilder();
-    Message msg = msgBuilder.newMessage("AcceptOfferMsg", null).
+    Message msg = msgBuilder.newMessage("AcceptOfferMsg").
     addProperty("CreditCard", gwtMsg.creditCard).
     addProperty("Expire", gwtMsg.expire).
     addProperty("isOfferAccepted", "" + gwtMsg.acceptOffer).

Modified: jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/AirticketTest.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -119,8 +119,12 @@
   {
     MessageBuilderFactory msgFactory = MessageBuilderFactory.newInstance();
     MessageBuilder msgBuilder = msgFactory.newMessageBuilder();
-    Message msg = msgBuilder.newMessage("ReqDataMsg", null).addProperty("Name", "Kermit").addProperty("From", "MUC")
-        .addProperty("To", "NYC").addProperty("Date", "25-Jul-2008").addProperty("Seats", "2").getMessage();
+    Message msg = msgBuilder.newMessage("ReqDataMsg").
+    addProperty("Name", "Kermit").
+    addProperty("From", "MUC").
+    addProperty("To", "NYC").
+    addProperty("Date", "25-Jul-2008").
+    addProperty("Seats", "2").getMessage();
     return msg;
   }
 
@@ -128,10 +132,14 @@
   {
     MessageBuilderFactory msgFactory = MessageBuilderFactory.newInstance();
     MessageBuilder msgBuilder = msgFactory.newMessageBuilder();
-    Message msg = msgBuilder.newMessage("ReqDataMsg", getMessageListenerID()).addProperty("Name", "Kermit")
-        .addProperty("From", "MUC").addProperty("To", "NYC").addProperty("Date", "25-Jul-2008").addProperty("Seats",
-            "0"). // Invalid number of seats
-        getMessage();
+    Message msg = msgBuilder.newMessage("ReqDataMsg").
+    addToRef(getMessageListenerID()).
+    addProperty("Name", "Kermit").
+    addProperty("From", "MUC").
+    addProperty("To", "NYC").
+    addProperty("Date", "25-Jul-2008").
+    addProperty("Seats", "0"). // Invalid number of seats
+    getMessage();
     return msg;
   }
 
@@ -139,8 +147,11 @@
   {
     MessageBuilderFactory msgFactory = MessageBuilderFactory.newInstance();
     MessageBuilder msgBuilder = msgFactory.newMessageBuilder();
-    Message msg = msgBuilder.newMessage("AcceptOfferMsg", null).addProperty("CreditCard", "1234-1234-1234-1234")
-        .addProperty("Expire", "25-Jul-2012").addProperty("isOfferAccepted", "true").getMessage();
+    Message msg = msgBuilder.newMessage("AcceptOfferMsg").
+    addProperty("CreditCard", "1234-1234-1234-1234").
+    addProperty("Expire", "25-Jul-2012").
+    addProperty("isOfferAccepted", "true").
+    getMessage();
     return msg;
   }
 

Modified: jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/ProcessMarshallerTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/ProcessMarshallerTest.java	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/java/org/jboss/bpm/samples/airticket/ProcessMarshallerTest.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -24,6 +24,7 @@
 // $Id$
 
 import java.io.ByteArrayInputStream;
+import java.io.FileWriter;
 import java.io.StringWriter;
 import java.net.URL;
 
@@ -62,8 +63,13 @@
     Element expEl = DOMUtils.parse(expURL.openStream());
     String expStr = DOMWriter.printNode(expEl, true);
 
-    //System.out.println(expStr);
-    //System.out.println(wasStr);
+    if (expStr.equals(wasStr) == false)
+    {
+      FileWriter fileWriter = new FileWriter("airticket-was-api10.xml");
+      fileWriter.write(wasStr);
+      fileWriter.close();
+    }
+    
     assertEquals(expStr, wasStr);
   }
   

Modified: jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/resources/samples/airticket/airticket-api10.xml
===================================================================
--- jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/resources/samples/airticket/airticket-api10.xml	2008-08-01 11:40:47 UTC (rev 1801)
+++ jbossbpm/spec/trunk/modules/samples/airticket/server/src/test/resources/samples/airticket/airticket-api10.xml	2008-08-02 12:51:38 UTC (rev 1802)
@@ -1,251 +1,247 @@
 <ns2:process name='Airticket' xmlns:ns2='urn:bpm.jboss:pdl-0.1'>
-  <start>
-    <seqflow to='ReceiveReqTask' />
-  </start>
-  <task name='ReceiveReqTask' taskType='Receive'>
-    <seqflow to='ValidateTask' />
-    <message ref='ReqDataMsg' />
-  </task>
-  <task name='ValidateTask' taskType='None'>
-    <seqflow to='ValidateGateway' />
-    <execution-handler class='org.jboss.bpm.samples.airticket.ValidationHandler' />
-    <input-set>
-      <property>
-        <name>Name</name>
-      </property>
-      <property>
-        <name>From</name>
-      </property>
-      <property>
-        <name>To</name>
-      </property>
-      <property>
-        <name>Date</name>
-      </property>
-      <property>
-        <name>Seats</name>
-      </property>
-    </input-set>
-    <output-set>
-      <property>
-        <name>isReqDataValid</name>
-      </property>
-    </output-set>
-  </task>
-  <exclusive-gateway name='ValidateGateway'>
-    <seqflow conditionType='Expression' to='CheckAvailabilityTask'>
-      <condition lang='MVEL'>isReqDataValid == true</condition>
-    </seqflow>
-    <seqflow conditionType='Default' to='SendInvalidTask' />
-  </exclusive-gateway>
-  <task name='CheckAvailabilityTask' taskType='None'>
-    <seqflow to='AvailabilityGateway' />
-    <execution-handler class='org.jboss.bpm.samples.airticket.AvailabilityHandler' />
-    <input-set>
-      <property>
-        <name>From</name>
-      </property>
-      <property>
-        <name>To</name>
-      </property>
-      <property>
-        <name>Date</name>
-      </property>
-      <property>
-        <name>Seats</name>
-      </property>
-    </input-set>
-    <output-set>
-      <property>
-        <name>isAvailable</name>
-      </property>
-      <property>
-        <name>Price</name>
-      </property>
-    </output-set>
-  </task>
-  <task name='SendInvalidTask' taskType='Send'>
-    <seqflow to='ReceiveReqTask' />
-    <message ref='InvalidDataMsg'>
-      <to>jboss.bpm:test=testProcessMarshaller</to>
-    </message>
-  </task>
-  <exclusive-gateway name='AvailabilityGateway'>
-    <seqflow conditionType='Expression' to='SendOfferTask'>
-      <condition lang='MVEL'>isAvailable == true</condition>
-    </seqflow>
-    <seqflow conditionType='Default' to='SendNotAvailableTask' />
-  </exclusive-gateway>
-  <task name='SendOfferTask' taskType='Send'>
-    <seqflow to='ReceiveOrderTask' />
-    <message ref='OfferMsg'>
-      <to>jboss.bpm:test=testProcessMarshaller</to>
-    </message>
-  </task>
-  <task name='SendNotAvailableTask' taskType='Send'>
-    <seqflow to='ReceiveReqTask' />
-    <message ref='NotAvailableMsg'>
-      <to>jboss.bpm:test=testProcessMarshaller</to>
-    </message>
-  </task>
-  <task name='ReceiveOrderTask' taskType='Receive'>
-    <seqflow to='AcceptOfferGateway' />
-    <message ref='AcceptOfferMsg' />
-  </task>
-  <exclusive-gateway name='AcceptOfferGateway'>
-    <seqflow conditionType='Expression' to='ParallelSplitGateway'>
-      <condition lang='MVEL'>isOfferAccepted == true</condition>
-    </seqflow>
-    <seqflow conditionType='Default' to='ReceiveReqTask' />
-  </exclusive-gateway>
-  <parallel-gateway name='ParallelSplitGateway'>
-    <seqflow to='CreditCardTask' />
-    <seqflow to='BookingTask' />
-  </parallel-gateway>
-  <task name='CreditCardTask' taskType='None'>
-    <seqflow to='SynchronizedJoinGateway' />
-    <input-set>
-      <property>
-        <name>CreditCard</name>
-      </property>
-      <property>
-        <name>Expire</name>
-      </property>
-      <property>
-        <name>Price</name>
-      </property>
-    </input-set>
-  </task>
-  <task name='BookingTask' taskType='None'>
-    <seqflow to='SynchronizedJoinGateway' />
-    <input-set>
-      <property>
-        <name>Name</name>
-      </property>
-      <property>
-        <name>From</name>
-      </property>
-      <property>
-        <name>To</name>
-      </property>
-      <property>
-        <name>Date</name>
-      </property>
-      <property>
-        <name>Seats</name>
-      </property>
-    </input-set>
-  </task>
-  <parallel-gateway name='SynchronizedJoinGateway'>
-    <seqflow to='SendConfirmTask' />
-  </parallel-gateway>
-  <task name='SendConfirmTask' taskType='Send'>
-    <seqflow to='End' />
-    <message ref='ConfirmMsg'>
-      <to>jboss.bpm:test=testProcessMarshaller</to>
-    </message>
-  </task>
-  <end name='End' />
-  <message name='ReqDataMsg'>
-    <property correlation='true'>
-      <name>Name</name>
-    </property>
-    <property correlation='true'>
-      <name>From</name>
-    </property>
-    <property correlation='true'>
-      <name>To</name>
-    </property>
-    <property correlation='true'>
-      <name>Date</name>
-    </property>
-    <property correlation='true'>
-      <name>Seats</name>
-    </property>
-  </message>
-  <message name='InvalidDataMsg'>
-    <property correlation='true'>
-      <name>Name</name>
-    </property>
-    <property correlation='true'>
-      <name>From</name>
-    </property>
-    <property correlation='true'>
-      <name>To</name>
-    </property>
-    <property correlation='true'>
-      <name>Date</name>
-    </property>
-    <property correlation='true'>
-      <name>Seats</name>
-    </property>
-  </message>
-  <message name='OfferMsg'>
-    <property correlation='true'>
-      <name>Name</name>
-    </property>
-    <property correlation='true'>
-      <name>From</name>
-    </property>
-    <property correlation='true'>
-      <name>To</name>
-    </property>
-    <property correlation='true'>
-      <name>Date</name>
-    </property>
-    <property correlation='true'>
-      <name>Seats</name>
-    </property>
-    <property correlation='true'>
-      <name>Price</name>
-    </property>
-  </message>
-  <message name='NotAvailableMsg'>
-    <property correlation='true'>
-      <name>Name</name>
-    </property>
-    <property correlation='true'>
-      <name>From</name>
-    </property>
-    <property correlation='true'>
-      <name>To</name>
-    </property>
-    <property correlation='true'>
-      <name>Date</name>
-    </property>
-    <property correlation='true'>
-      <name>Seats</name>
-    </property>
-  </message>
-  <message name='AcceptOfferMsg'>
-    <property correlation='true'>
-      <name>CreditCard</name>
-    </property>
-    <property correlation='true'>
-      <name>Expire</name>
-    </property>
-    <property correlation='true'>
-      <name>isOfferAccepted</name>
-    </property>
-  </message>
-  <message name='ConfirmMsg'>
-    <property correlation='true'>
-      <name>Name</name>
-    </property>
-    <property correlation='true'>
-      <name>From</name>
-    </property>
-    <property correlation='true'>
-      <name>To</name>
-    </property>
-    <property correlation='true'>
-      <name>Date</name>
-    </property>
-    <property correlation='true'>
-      <name>Seats</name>
-    </property>
-    <property correlation='true'>
-      <name>Price</name>
-    </property>
-  </message>
+ <start>
+  <seqflow to='ReceiveReqTask'/>
+ </start>
+ <task name='ReceiveReqTask' taskType='Receive'>
+  <seqflow to='ValidateTask'/>
+  <msgref nameRef='ReqDataMsg'/>
+ </task>
+ <task name='ValidateTask' taskType='None'>
+  <seqflow to='ValidateGateway'/>
+  <execution-handler class='org.jboss.bpm.samples.airticket.ValidationHandler'/>
+  <input-set>
+   <property>
+    <name>Name</name>
+   </property>
+   <property>
+    <name>From</name>
+   </property>
+   <property>
+    <name>To</name>
+   </property>
+   <property>
+    <name>Date</name>
+   </property>
+   <property>
+    <name>Seats</name>
+   </property>
+  </input-set>
+  <output-set>
+   <property>
+    <name>isReqDataValid</name>
+   </property>
+  </output-set>
+ </task>
+ <exclusive-gateway name='ValidateGateway'>
+  <seqflow conditionType='Expression' to='CheckAvailabilityTask'>
+   <condition lang='MVEL'>isReqDataValid == true</condition>
+  </seqflow>
+  <seqflow conditionType='Default' to='SendInvalidTask'/>
+ </exclusive-gateway>
+ <task name='CheckAvailabilityTask' taskType='None'>
+  <seqflow to='AvailabilityGateway'/>
+  <execution-handler class='org.jboss.bpm.samples.airticket.AvailabilityHandler'/>
+  <input-set>
+   <property>
+    <name>From</name>
+   </property>
+   <property>
+    <name>To</name>
+   </property>
+   <property>
+    <name>Date</name>
+   </property>
+   <property>
+    <name>Seats</name>
+   </property>
+  </input-set>
+  <output-set>
+   <property>
+    <name>isAvailable</name>
+   </property>
+   <property>
+    <name>Price</name>
+   </property>
+  </output-set>
+ </task>
+ <task name='SendInvalidTask' taskType='Send'>
+  <seqflow to='ReceiveReqTask'/>
+  <msgref nameRef='InvalidDataMsg'/>
+ </task>
+ <exclusive-gateway name='AvailabilityGateway'>
+  <seqflow conditionType='Expression' to='SendOfferTask'>
+   <condition lang='MVEL'>isAvailable == true</condition>
+  </seqflow>
+  <seqflow conditionType='Default' to='SendNotAvailableTask'/>
+ </exclusive-gateway>
+ <task name='SendOfferTask' taskType='Send'>
+  <seqflow to='ReceiveOrderTask'/>
+  <msgref nameRef='OfferMsg'/>
+ </task>
+ <task name='SendNotAvailableTask' taskType='Send'>
+  <seqflow to='ReceiveReqTask'/>
+  <msgref nameRef='NotAvailableMsg'/>
+ </task>
+ <task name='ReceiveOrderTask' taskType='Receive'>
+  <seqflow to='AcceptOfferGateway'/>
+  <msgref nameRef='AcceptOfferMsg'/>
+ </task>
+ <exclusive-gateway name='AcceptOfferGateway'>
+  <seqflow conditionType='Expression' to='ParallelSplitGateway'>
+   <condition lang='MVEL'>isOfferAccepted == true</condition>
+  </seqflow>
+  <seqflow conditionType='Default' to='ReceiveReqTask'/>
+ </exclusive-gateway>
+ <parallel-gateway name='ParallelSplitGateway'>
+  <seqflow to='CreditCardTask'/>
+  <seqflow to='BookingTask'/>
+ </parallel-gateway>
+ <task name='CreditCardTask' taskType='None'>
+  <seqflow to='SynchronizedJoinGateway'/>
+  <input-set>
+   <property>
+    <name>CreditCard</name>
+   </property>
+   <property>
+    <name>Expire</name>
+   </property>
+   <property>
+    <name>Price</name>
+   </property>
+  </input-set>
+ </task>
+ <task name='BookingTask' taskType='None'>
+  <seqflow to='SynchronizedJoinGateway'/>
+  <input-set>
+   <property>
+    <name>Name</name>
+   </property>
+   <property>
+    <name>From</name>
+   </property>
+   <property>
+    <name>To</name>
+   </property>
+   <property>
+    <name>Date</name>
+   </property>
+   <property>
+    <name>Seats</name>
+   </property>
+  </input-set>
+ </task>
+ <parallel-gateway name='SynchronizedJoinGateway'>
+  <seqflow to='SendConfirmTask'/>
+ </parallel-gateway>
+ <task name='SendConfirmTask' taskType='Send'>
+  <seqflow to='End'/>
+  <msgref nameRef='ConfirmMsg'/>
+ </task>
+ <end name='End'/>
+ <message name='ReqDataMsg'>
+  <property correlation='true'>
+   <name>Name</name>
+  </property>
+  <property correlation='true'>
+   <name>From</name>
+  </property>
+  <property correlation='true'>
+   <name>To</name>
+  </property>
+  <property correlation='true'>
+   <name>Date</name>
+  </property>
+  <property correlation='true'>
+   <name>Seats</name>
+  </property>
+ </message>
+ <message name='InvalidDataMsg'>
+  <to>jboss.bpm:test=testProcessMarshaller</to>
+  <property correlation='true'>
+   <name>Name</name>
+  </property>
+  <property correlation='true'>
+   <name>From</name>
+  </property>
+  <property correlation='true'>
+   <name>To</name>
+  </property>
+  <property correlation='true'>
+   <name>Date</name>
+  </property>
+  <property correlation='true'>
+   <name>Seats</name>
+  </property>
+ </message>
+ <message name='NotAvailableMsg'>
+  <to>jboss.bpm:test=testProcessMarshaller</to>
+  <property correlation='true'>
+   <name>Name</name>
+  </property>
+  <property correlation='true'>
+   <name>From</name>
+  </property>
+  <property correlation='true'>
+   <name>To</name>
+  </property>
+  <property correlation='true'>
+   <name>Date</name>
+  </property>
+  <property correlation='true'>
+   <name>Seats</name>
+  </property>
+ </message>
+ <message name='OfferMsg'>
+  <to>jboss.bpm:test=testProcessMarshaller</to>
+  <property correlation='true'>
+   <name>Name</name>
+  </property>
+  <property correlation='true'>
+   <name>From</name>
+  </property>
+  <property correlation='true'>
+   <name>To</name>
+  </property>
+  <property correlation='true'>
+   <name>Date</name>
+  </property>
+  <property correlation='true'>
+   <name>Seats</name>
+  </property>
+  <property correlation='true'>
+   <name>Price</name>
+  </property>
+ </message>
+ <message name='AcceptOfferMsg'>
+  <property correlation='true'>
+   <name>CreditCard</name>
+  </property>
+  <property correlation='true'>
+   <name>Expire</name>
+  </property>
+  <property correlation='true'>
+   <name>isOfferAccepted</name>
+  </property>
+ </message>
+ <message name='ConfirmMsg'>
+  <to>jboss.bpm:test=testProcessMarshaller</to>
+  <property correlation='true'>
+   <name>Name</name>
+  </property>
+  <property correlation='true'>
+   <name>From</name>
+  </property>
+  <property correlation='true'>
+   <name>To</name>
+  </property>
+  <property correlation='true'>
+   <name>Date</name>
+  </property>
+  <property correlation='true'>
+   <name>Seats</name>
+  </property>
+  <property correlation='true'>
+   <name>Price</name>
+  </property>
+ </message>
 </ns2:process>
\ No newline at end of file

Added: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java	                        (rev 0)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java	2008-08-02 12:51:38 UTC (rev 1802)
@@ -0,0 +1,71 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.cts.task;
+
+// $Id$
+
+import org.jboss.bpm.InvalidProcessException;
+import org.jboss.bpm.model.ProcessBuilder;
+import org.jboss.bpm.model.ProcessBuilderFactory;
+import org.jboss.bpm.model.Task.TaskType;
+import org.jboss.bpm.test.DefaultEngineTestCase;
+
+/**
+ * Test process messages
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 03-Jul-2008
+ */
+public class TaskMessageTest extends DefaultEngineTestCase
+{
+  public void testReceiveTaskWithNoMessage() throws Exception
+  {
+    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+    procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+    procBuilder.addTask("A", TaskType.Receive).addSequenceFlow("End").addEndEvent("End");
+    try
+    {
+      procBuilder.getProcess();
+      fail("A Message for the MessageRef attribute MUST be entered");
+    }
+    catch (InvalidProcessException ex)
+    {
+      // expected
+    }
+  }
+  
+  public void testSendTaskWithNoMessage() throws Exception
+  {
+    ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+    procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+    procBuilder.addTask("A", TaskType.Send).addSequenceFlow("End").addEndEvent("End");
+    try
+    {
+      procBuilder.getProcess();
+      fail("A Message for the MessageRef attribute MUST be entered");
+    }
+    catch (InvalidProcessException ex)
+    {
+      // expected
+    }
+  }
+}


Property changes on: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the jbpm-commits mailing list