[jboss-svn-commits] JBL Code SVN: r31701 - in labs/jbossrules/trunk: drools-core and 27 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 16 21:09:47 EST 2010


Author: lucazamador
Date: 2010-02-16 21:09:43 -0500 (Tue, 16 Feb 2010)
New Revision: 31701

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/BatchExecutionCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultsMap.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/camel/component/DroolsJaxbDataFormat.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/resources/META-INF/services/org/apache/camel/dataformat/drools-jaxb
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxWrapperCollectionTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbXSDModelTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/CommandTranslator.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ListMapping.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ResultTranslator.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java
   labs/jbossrules/trunk/drools-core/pom.xml
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/GenericCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetGlobalCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/SetGlobalCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/AbortWorkItemCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SetProcessInstanceStateCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SignalEventCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/StartProcessCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/FireAllRulesCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertElementsCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/QueryCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithMarshallersTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/DroolsCamelTestSupport.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/pom.xml
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbFromXmlTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbToXmlTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java
Log:
camel jaxb integration merge (branch camel_jaxb_marshaller2-lucaz)

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -2,15 +2,11 @@
 
 import java.util.Properties;
 
-import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import net.sf.jxls.reader.ReaderBuilder;
 import net.sf.jxls.reader.XLSReader;
 
-import org.drools.builder.help.KnowledgeBuilderHelper;
-import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.milyn.Smooks;

Modified: labs/jbossrules/trunk/drools-core/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-core/pom.xml	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/pom.xml	2010-02-17 02:09:43 UTC (rev 31701)
@@ -39,6 +39,18 @@
         <groupId>org.joda</groupId>  
         <artifactId>com.springsource.org.joda.time</artifactId>  
     </dependency-->
+
+	<dependency>
+		<groupId>com.sun.xml.bind</groupId>
+		<artifactId>jaxb-impl</artifactId>
+		<version>2.0.3</version>
+	</dependency>
+
+	<dependency>
+		<groupId>com.sun.xml.bind</groupId>
+		<artifactId>jaxb-xjc</artifactId>
+		<version>2.0.3</version>
+	</dependency>    
    </dependencies>
    <build>
       <plugins>

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResult.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -62,13 +62,13 @@
     }
 
     /** 
-     * Return the Object for the given Declaration identifer.
+     * Return the Object for the given Declaration identifier.
      * @param identifier
      * @return
      *      The Object
      */
     public Object get(final String identifier) {
-        return get( (Declaration) this.queryResults.getDeclarations().get( identifier ) );
+        return get( this.queryResults.getDeclarations().get( identifier ) );
     }
 
     /** 
@@ -82,7 +82,7 @@
     }
     
     public FactHandle getFactHandle(String identifier) {
-        return getFactHandle( ( Declaration ) this.queryResults.getDeclarations().get( identifier ) );
+        return getFactHandle( this.queryResults.getDeclarations().get( identifier ) );
     }
     
     public FactHandle getFactHandle(Declaration declr) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -23,8 +23,6 @@
 
 import org.drools.rule.Declaration;
 import org.drools.rule.Query;
-import org.drools.WorkingMemory;
-import org.drools.spi.Tuple;
 
 /**
  * Returned QueryResults instance for a requested named query. from here you can iterate the returned data, or
@@ -34,12 +32,15 @@
 public class QueryResults implements Iterable<QueryResult>{
     private Query           query;
 
-    private Map             declarations;
+    private Map<String, Declaration> declarations;
 
-    protected List          results;
+    protected List<FactHandle[]> results;
     protected WorkingMemory workingMemory;
+    
+    public QueryResults() {
+	}
 
-    public QueryResults(final List results,
+    public QueryResults(final List<FactHandle[]> results,
                         final Query query,
                         final WorkingMemory workingMemory) {
         this.results = results;
@@ -51,7 +52,7 @@
         if ( i > this.results.size() ) {
             throw new NoSuchElementException();
         }
-        return new QueryResult( (FactHandle[]) this.results.get( i ),
+        return new QueryResult( this.results.get(i),
                                 this.workingMemory,
                                 this );
     }
@@ -72,10 +73,10 @@
      * @return
      *      The Map of Declarations.
      */
-    public Map getDeclarations() {
+    public Map<String, Declaration> getDeclarations() {
 
         final Declaration[] declarations = this.query.getDeclarations();
-        final Map map = new HashMap( declarations.length );
+        final Map<String, Declaration> map = new HashMap<String, Declaration>( declarations.length );
         for ( int i = 0, length = declarations.length; i < length; i++ ) {
             map.put( declarations[i].getIdentifier(),
                      declarations[i] );
@@ -95,10 +96,10 @@
 
     private class QueryResultsIterator
         implements
-        Iterator {
-        private Iterator iterator;
+        Iterator<QueryResult> {
+        private Iterator<FactHandle[]> iterator;
 
-        public QueryResultsIterator(final Iterator iterator) {
+        public QueryResultsIterator(final Iterator<FactHandle[]> iterator) {
             this.iterator = iterator;
         }
 
@@ -106,8 +107,8 @@
             return this.iterator.hasNext();
         }
 
-        public Object next() {
-            return new QueryResult( (FactHandle[]) this.iterator.next(),
+        public QueryResult next() {
+            return new QueryResult( this.iterator.next(),
                                     QueryResults.this.workingMemory,
                                     QueryResults.this );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandBasedStatefulKnowledgeSession.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,6 +1,7 @@
 package org.drools.command.impl;
 
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
 
 import org.drools.KnowledgeBase;
@@ -162,7 +163,7 @@
                                         Map<String, Object> parameters) {
         StartProcessCommand command = new StartProcessCommand();
         command.setProcessId( processId );
-        command.setParameters( parameters );
+        command.setParameters( (HashMap<String, Object>) parameters );
         return commandService.execute( command );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,5 +1,6 @@
 package org.drools.command.impl;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -38,7 +39,9 @@
 	}
 
 	public Command newInsertElements(Iterable objects) {
-		return new InsertElementsCommand(objects);
+//		TODO: FIX THIS
+//		return new InsertElementsCommand(objects);
+		return null;
 	}
 
 	public Command newInsert(Object object) {
@@ -112,7 +115,7 @@
 			Map<String, Object> parameters) {
 		StartProcessCommand startProcess = new StartProcessCommand();
 		startProcess.setProcessId(processId);
-		startProcess.setParameters(parameters);
+		startProcess.setParameters((HashMap<String, Object>) parameters);
 		return startProcess;
 	}
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/GenericCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/GenericCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/GenericCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -2,7 +2,7 @@
 
 import org.drools.command.Context;
 
-public interface GenericCommand<T> extends org.drools.command.Command {
+public interface GenericCommand<T> extends org.drools.command.Command<T> {
 	
 	T execute(Context context);
 	

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/BatchExecutionCommand.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/command/runtime/BatchExecutionCommand.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/BatchExecutionCommand.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/BatchExecutionCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,150 @@
+package org.drools.command.runtime;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+import org.drools.command.Context;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.runtime.process.AbortWorkItemCommand;
+import org.drools.command.runtime.process.CompleteWorkItemCommand;
+import org.drools.command.runtime.process.SignalEventCommand;
+import org.drools.command.runtime.process.StartProcessCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.runtime.rule.GetObjectCommand;
+import org.drools.command.runtime.rule.InsertElementsCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.command.runtime.rule.ModifyCommand;
+import org.drools.command.runtime.rule.QueryCommand;
+import org.drools.command.runtime.rule.RetractCommand;
+
+
+/**
+ * <p>Java class for BatchExecutionCommand complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * 
+ * <pre>
+ * &lt;complexType name="BatchExecutionCommand">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;choice maxOccurs="unbounded">
+ *         &lt;element name="abort-work-item" type="{http://drools.org/drools-5.0/knowledge-session}AbortWorkItemCommand"/>
+ *         &lt;element name="complete-work-item" type="{http://drools.org/drools-5.0/knowledge-session}CompleteWorkItemCommand"/>
+ *         &lt;element name="fire-all-rules" type="{http://drools.org/drools-5.0/knowledge-session}FireAllRulesCommand"/>
+ *         &lt;element name="get-global" type="{http://drools.org/drools-5.0/knowledge-session}GetGlobalCommand"/>
+ *         &lt;element name="insert" type="{http://drools.org/drools-5.0/knowledge-session}InsertObjectCommand"/>
+ *         &lt;element name="insert-elements" type="{http://drools.org/drools-5.0/knowledge-session}InsertElementsCommand"/>
+ *         &lt;element name="query" type="{http://drools.org/drools-5.0/knowledge-session}QueryCommand"/>
+ *         &lt;element name="set-global" type="{http://drools.org/drools-5.0/knowledge-session}SetGlobalCommand"/>
+ *         &lt;element name="signal-event" type="{http://drools.org/drools-5.0/knowledge-session}SignalEventCommand"/>
+ *         &lt;element name="start-process" type="{http://drools.org/drools-5.0/knowledge-session}StartProcessCommand"/>
+ *       &lt;/choice>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+ at XmlRootElement(name="batch-execution")
+ at XmlAccessorType(XmlAccessType.FIELD)
+ at XmlType(name = "batch-execution", propOrder = {
+    "lookup", "commands"
+})
+public class BatchExecutionCommand implements GenericCommand<Void> {
+	
+	private static final long serialVersionUID = 1L;
+	
+	@XmlAttribute(required=true)
+	private String lookup;
+
+	public BatchExecutionCommand(){
+	}
+	
+	public BatchExecutionCommand( List<GenericCommand<?>> commands ) {
+		this.commands = commands;
+	}
+	
+	public BatchExecutionCommand( List<GenericCommand<?>> commands, String lookup ) {
+		this.commands = commands;
+		this.lookup = lookup;
+	}
+	
+    @XmlElements({
+//        @XmlElement(name = "complete-work-item", type = CompleteWorkItemCommand.class),
+        @XmlElement(name = "abort-work-item", type = AbortWorkItemCommand.class),
+        @XmlElement(name = "signal-event", type = SignalEventCommand.class),
+        @XmlElement(name = "start-process", type = StartProcessCommand.class),
+    	@XmlElement(name = "retract", type = RetractCommand.class),
+        @XmlElement(name = "get-global", type = GetGlobalCommand.class),
+        @XmlElement(name = "set-global", type = SetGlobalCommand.class),
+        @XmlElement(name = "insert-elements", type = InsertElementsCommand.class),
+        @XmlElement(name = "query", type = QueryCommand.class),
+        @XmlElement(name = "insert", type = InsertObjectCommand.class),
+        @XmlElement(name = "modify", type = ModifyCommand.class),
+        @XmlElement(name = "get-object", type = GetObjectCommand.class),
+        @XmlElement(name = "fire-all-rules", type = FireAllRulesCommand.class)
+    })
+    protected List<GenericCommand<?>> commands;
+
+    /**
+     * Gets the value of the abortWorkItemOrCompleteWorkItemOrFireAllRules property.
+     * 
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the abortWorkItemOrCompleteWorkItemOrFireAllRules property.
+     * 
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getCommand().add(newItem);
+     * </pre>
+     * 
+     * 
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link SetGlobalCommand }
+     * {@link CompleteWorkItemCommand }
+     * {@link AbortWorkItemCommand }
+     * {@link SignalEventCommand }
+     * {@link FireAllRulesCommand }
+     * {@link StartProcessCommand }
+     * {@link GetGlobalCommand }
+     * {@link InsertElementsCommand }
+     * {@link QueryCommand }
+     * {@link InsertObjectCommand }
+     * 
+     * 
+     */
+    public List<GenericCommand<?>> getCommands() {
+        if (commands == null) {
+            commands = new ArrayList<GenericCommand<?>>();
+        }
+        return this.commands;
+    }
+
+    public Void execute(Context context) {
+        for ( GenericCommand<?> command : commands ) {
+            ((GenericCommand<?>)command).execute( context );
+        }
+        return null;
+    }
+
+	public void setLookup(String lookup) {
+		this.lookup = lookup;
+	}
+
+	public String getLookup() {
+		return lookup;
+	}	
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetGlobalCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetGlobalCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/GetGlobalCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,23 +1,30 @@
 package org.drools.command.runtime;
 
-import java.util.Collection;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
 
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.impl.ExecutionResultImpl;
-import org.drools.runtime.rule.FactHandle;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class GetGlobalCommand
     implements
     GenericCommand<Object> {
 
-    private String identifier;
+	private static final long serialVersionUID = 1L;
+	
+	@XmlAttribute
+	private String identifier;
+	@XmlAttribute(name="out-identifier")
     private String outIdentifier;
+    
+    public GetGlobalCommand() {
+	}
 
     public GetGlobalCommand(String identifier) {
         this.identifier = identifier;
@@ -39,7 +46,7 @@
         StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
 
         Object object = ksession.getGlobal( identifier );
-        ExecutionResultImpl results = (ExecutionResultImpl) ((StatefulKnowledgeSessionImpl) ksession).session.getExecutionResult();
+        ExecutionResultImpl results = ((StatefulKnowledgeSessionImpl) ksession).session.getExecutionResult();
         if ( results != null ) {
             results.getResults().put( (this.outIdentifier != null) ? this.outIdentifier : this.identifier,
                                       object );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/SetGlobalCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/SetGlobalCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/SetGlobalCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,23 +1,36 @@
 package org.drools.command.runtime;
 
-import org.drools.KnowledgeBase;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class SetGlobalCommand
     implements
     GenericCommand<Void> {
 
+	@XmlAttribute(required=true)
     private String  identifier;
+	
+	@XmlElement
     private Object  object;
 
+    @XmlAttribute
     private String  outIdentifier;
 
+    @XmlAttribute
     private boolean out;
+    
+    public SetGlobalCommand() {
+	}
 
     public SetGlobalCommand(String identifier,
                             Object object) {
@@ -45,6 +58,10 @@
     public Object getObject() {
         return this.object;
     }
+    
+    public void setObject( Object object ) {
+    	this.object = object;
+    }
 
     public String getOutIdentifier() {
         return this.outIdentifier;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/AbortWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/AbortWorkItemCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/AbortWorkItemCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,15 +1,20 @@
 package org.drools.command.runtime.process;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.StatefulKnowledgeSession;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class AbortWorkItemCommand
     implements
     GenericCommand<Object> {
 
+	@XmlAttribute(name="id", required=true)
     private long workItemId;
     
     public AbortWorkItemCommand() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SetProcessInstanceStateCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SetProcessInstanceStateCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SetProcessInstanceStateCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,14 +1,10 @@
 package org.drools.command.runtime.process;
 
-import java.util.Collection;
-
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.process.instance.ProcessInstance;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.rule.FactHandle;
 
 public class SetProcessInstanceStateCommand implements GenericCommand<Object> {
 	

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SignalEventCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SignalEventCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/SignalEventCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,15 +1,24 @@
 package org.drools.command.runtime.process;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.process.ProcessInstance;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class SignalEventCommand implements GenericCommand<Object> {
 	
+	@XmlAttribute(name="process-instance-id")
 	private long processInstanceId = -1;
+	@XmlAttribute(name="event-type", required=true)
 	private String eventType;
+	@XmlElement(name="event")
 	private Object event;	
 	
     public SignalEventCommand() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/StartProcessCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/StartProcessCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/process/StartProcessCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -4,53 +4,71 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.process.instance.ProcessInstance;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.xml.jaxb.util.JaxbMapAdapter;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class StartProcessCommand implements GenericCommand<ProcessInstance> {
+
+	@XmlAttribute(required = true)
+	private String processId;
 	
-	private String processId;
+	@XmlJavaTypeAdapter(JaxbMapAdapter.class)
+	@XmlElement(name="parameter")
 	private Map<String, Object> parameters = new HashMap<String, Object>();
+	
+	@XmlElementWrapper(name="data")
 	private List<Object> data = null;
 
-        public StartProcessCommand() {
-        }
+	public StartProcessCommand() {
+	}
 
-        public StartProcessCommand(String processId) {
-            this.processId = processId;
-        }
-	
+	public StartProcessCommand(String processId) {
+		this.processId = processId;
+	}
+
 	public String getProcessId() {
 		return processId;
 	}
-	
+
 	public void setProcessId(String processId) {
 		this.processId = processId;
 	}
-	
+
 	public Map<String, Object> getParameters() {
 		return parameters;
 	}
-	
+
 	public void setParameters(Map<String, Object> parameters) {
 		this.parameters = parameters;
 	}
+
+	public void putParameter(String key, Object value) {
+		getParameters().put(key, value);
+	}
 	
 	public List<Object> getData() {
 		return data;
 	}
-	
+
 	public void setData(List<Object> data) {
 		this.data = data;
 	}
 
-    public ProcessInstance execute(Context context) {
-        StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
-        
+	public ProcessInstance execute(Context context) {
+		StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+
 		if (data != null) {
 			for (Object o: data) {
 				ksession.insert(o);
@@ -74,5 +92,4 @@
 		result += "]);";
 		return result;
 	}
-
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/FireAllRulesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/FireAllRulesCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/FireAllRulesCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,19 +1,23 @@
 package org.drools.command.runtime.rule;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.AgendaFilter;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class FireAllRulesCommand
     implements
     GenericCommand<Integer> {
 
+	@XmlAttribute
     private int          max          = -1;
     private AgendaFilter agendaFilter = null;
     private String       outIdentifier;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,23 +1,37 @@
 package org.drools.command.runtime.rule;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
+import org.drools.common.DisconnectedFactHandle;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class GetObjectCommand
     implements
     GenericCommand<Object> {
 
     private FactHandle factHandle;
     private String     outIdentifier;
+    
+    public GetObjectCommand() { }
 
     public GetObjectCommand(FactHandle factHandle) {
         this.factHandle = factHandle;
     }
+    
+    public GetObjectCommand(FactHandle factHandle, String outIdentifier) {
+        this.factHandle = factHandle;
+		this.outIdentifier = outIdentifier;
+    }
 
+    @XmlAttribute(name="out-identifier", required=true)
     public String getOutIdentifier() {
         return outIdentifier;
     }
@@ -26,7 +40,16 @@
         this.outIdentifier = outIdentifier;
     }
 
-    public Object execute(Context context) {
+    @XmlAttribute(name="factHandle", required=true)
+    public void setFactHandleFromString(String factHandleId) {
+    	factHandle = new DisconnectedFactHandle(factHandleId);
+	}
+    
+    public String getFactHandleFromString() {
+    	return factHandle.toExternalForm();
+	}
+
+	public Object execute(Context context) {
         StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
         
         Object object = ksession.getObject( factHandle );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertElementsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertElementsCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertElementsCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -4,38 +4,53 @@
 import java.util.Collection;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
+import org.drools.xml.jaxb.util.JaxbListWrapper;
 
-import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
+ at XmlAccessorType( XmlAccessType.NONE )
 public class InsertElementsCommand
     implements
     GenericCommand<Collection<FactHandle>> {
-    public Iterable objects;
 
+	private static final long serialVersionUID = 501L;
+
+    @XmlElement
+	public List<Object> objects;
+
+    @XmlAttribute
     private String  outIdentifier;
 
+    @XmlAttribute
     private boolean returnObject = true;
 
     public InsertElementsCommand() {
-        this.objects = new ArrayList();
+        this.objects = new ArrayList<Object>();
     }
 
-    public InsertElementsCommand(Iterable objects) {
+    public InsertElementsCommand(List<Object> objects) {
         this.objects = objects;
     }
 
-    public Iterable getObjects() {
+    public InsertElementsCommand(String outIdentifier) {
+		this();
+		this.outIdentifier = outIdentifier;
+	}
+
+	public List<Object> getObjects() {
         return this.objects;
     }
 
-    public void setObjects(Iterable objects) {
+    public void setObjects(List<Object> objects) {
         this.objects = objects;
     }
 
@@ -49,7 +64,7 @@
         if ( outIdentifier != null ) {
             if ( this.returnObject ) {
                 ((StatefulKnowledgeSessionImpl)ksession).session.getExecutionResult().getResults().put( this.outIdentifier,
-                                                               objects );
+                                                               objects);
             }
             ((StatefulKnowledgeSessionImpl)ksession).session.getExecutionResult().getFactHandles().put( this.outIdentifier,
                                                                handles );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,24 +1,33 @@
 package org.drools.command.runtime.rule;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.common.InternalFactHandle;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class InsertObjectCommand
     implements
     GenericCommand<FactHandle> {
 
-    private Object  object;
+	private static final long serialVersionUID = 1L;
 
+	@XmlElement
+	private Object  object;
+
+	@XmlAttribute(name="out-identifier", required=true)
     private String  outIdentifier;
 
     private boolean returnObject = true;
-
+    
     public InsertObjectCommand() {
         
     }
@@ -27,7 +36,13 @@
         this.object = object;
     }
 
-    public FactHandle execute(Context context) {
+    public InsertObjectCommand(Object object, String outIdentifier) {
+		super();
+		this.object = object;
+		this.outIdentifier = outIdentifier;
+	}
+
+	public FactHandle execute(Context context) {
         StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
         FactHandle factHandle = ksession.insert( object );
         

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,17 +1,24 @@
 package org.drools.command.runtime.rule;
 
-import java.util.Collection;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
 import org.drools.command.Context;
 import org.drools.command.Setter;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.common.DisconnectedFactHandle;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 import org.mvel2.MVEL;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class ModifyCommand
     implements
     GenericCommand<Object> {
@@ -24,9 +31,12 @@
 
 
     private FactHandle       handle;
+    @XmlAnyElement
     private List<Setter> setters;
 
-
+    public ModifyCommand() {
+    }
+    
     public ModifyCommand(FactHandle handle,
                          List<Setter> setters) {
         this.handle = handle;
@@ -47,10 +57,19 @@
     public FactHandle getFactHandle() {
         return this.handle;
     }
+    
+    @XmlAttribute(name="factHandle", required=true)
+	public void setFactHandleFromString(String factHandleId) {
+		handle = new DisconnectedFactHandle(factHandleId);
+	}
 
     public List<Setter> getSetters() {
         return this.setters;
     }
+    
+    public void setSetters(List<Setter> setters) {
+    	this.setters = setters;
+    }
 
     private String getMvelExpr() {
         StringBuilder sbuilder = new StringBuilder();
@@ -74,11 +93,17 @@
         return "modify() " + getMvelExpr();
     }
 
+    @XmlRootElement(name="set")
     public static class SetterImpl
         implements
         Setter {
+    	@XmlAttribute
         private String accessor;
+    	@XmlAttribute
         private String value;
+    	
+    	public SetterImpl() {
+		}
 
         public SetterImpl(String accessor,
                           String value) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/QueryCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/QueryCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/QueryCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,27 +1,41 @@
 package org.drools.command.runtime.rule;
 
-import java.util.Collection;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.rule.FactHandle;
 import org.drools.runtime.rule.QueryResults;
-import org.drools.runtime.rule.impl.NativeQueryResults;
 
+ at XmlAccessorType( XmlAccessType.NONE )
 public class QueryCommand  implements GenericCommand<QueryResults> {
+
+	private static final long serialVersionUID = 1L;
+	
+	@XmlAttribute(name = "out-identifier")
     private String outIdentifier;
+    @XmlAttribute(required = true)
     private String name;
-    private Object[] arguments;
     
+    @XmlElement
+    private List<Object> arguments;
+
+    public QueryCommand() {
+    }
+    
     public QueryCommand(String outIdentifier, String name, Object[] arguments) {
         this.outIdentifier = outIdentifier;
         this.name = name;
-        this.arguments = arguments;
+        this.arguments = arguments != null ? Arrays.asList( arguments ) : Arrays.asList();
     }
     
     public String getOutIdentifier() {
@@ -38,10 +52,13 @@
     public void setName(String name) {
         this.name = name;
     }
-    public Object[] getArguments() {
-        return arguments;
+    public List<Object> getArguments() {
+        if (this.arguments == null) {
+            this.arguments = new ArrayList<Object>();
+        }
+        return this.arguments;
     }
-    public void setArguments(Object[] arguments) {
+    public void setArguments(List<Object> arguments) {
         this.arguments = arguments;
     }
 
@@ -49,13 +66,19 @@
         StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
         
         QueryResults results = null;
+
+        //TODO {bauna} remove this try
+        try {
+			if ( arguments == null || arguments.size() == 0 ) {
+			    results = ksession.getQueryResults( name );
+			} else {
+			    results = ksession.getQueryResults( name, this.arguments.toArray() );
+			}
+		} catch (Throwable e) {
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
         
-        if ( arguments == null || arguments.length == 0 ) {
-            results = ksession.getQueryResults( name );
-        } else {
-            results = ksession.getQueryResults( name, this.arguments );
-        }
-        
         if ( this.outIdentifier != null ) {
             ((StatefulKnowledgeSessionImpl)ksession).session.getExecutionResult().getResults().put( this.outIdentifier, results );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,35 +1,46 @@
 package org.drools.command.runtime.rule;
 
-import java.util.Collection;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
 
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.common.DisconnectedFactHandle;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class RetractCommand
-    implements
-    GenericCommand<Object> {
+implements
+GenericCommand<Object> {
 
-    private FactHandle handle;
+	private FactHandle handle;
 
-    public RetractCommand(FactHandle handle) {
-        this.handle = handle;
-    }
+	public RetractCommand() {
+	}
 
-    public Object execute(Context context) {
-        StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
-        ksession.retract( handle );
-        return null;
-    }
-    
-    public FactHandle getFactHandle() {
-        return this.handle;
-    }
+	public RetractCommand(FactHandle handle) {
+		this.handle = handle;
+	}
 
-    public String toString() {
-        return "session.retract( " + handle + " );";
-    }
+	public Object execute(Context context) {
+		StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
+		ksession.retract( handle );
+		return null;
+	}
+
+	public FactHandle getFactHandle() {
+		return this.handle;
+	}
+
+	@XmlAttribute(name="factHandle", required=true)
+	public void setFactHandleFromString(String factHandleId) {
+		handle = new DisconnectedFactHandle(factHandleId);
+	}
+
+	public String toString() {
+		return "session.retract( " + handle + " );";
+	}
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -16,16 +16,23 @@
  * limitations under the License.
  */
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
 import org.drools.FactHandle;
-import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.RightTuple;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
 /**
  * Implementation of <code>FactHandle</code>.
  * @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
  * @author <a href="mailto:bob at werken.com">bob mcwhirter </a>
  */
+ at XmlRootElement(name="fact-handle")
+ at XmlAccessorType(XmlAccessType.NONE)
 public class DefaultFactHandle
     implements
     InternalFactHandle {
@@ -134,6 +141,11 @@
         return "0:" + this.id + ":" + getIdentityHashCode() + ":" + getObjectHashCode() + ":" + getRecency();
     }
 
+    @XmlAttribute(name="external-form")
+    public String getExternalForm() {
+    	return toExternalForm();
+    }
+    
     /**
      * @see Object
      */

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,19 +1,26 @@
 package org.drools.common;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.RightTuple;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
+ at XmlAccessorType(XmlAccessType.NONE)
 public class DisconnectedFactHandle
     implements
     InternalFactHandle {
 
     private int  id;
-    private int  identityHashCode;
+	private int  identityHashCode;
     private int  objectHashCode;
     private long recency;
     private Object object;
 
+	protected DisconnectedFactHandle() {}
+	
     public DisconnectedFactHandle(int id,
                                   int identityHashCode,
                                   int objectHashCode,
@@ -127,5 +134,10 @@
     public String toExternalForm() {
         return "0:" + this.id + ":" + this.identityHashCode + ":" + this.objectHashCode + ":" + this.recency;
     }
+    
+    @XmlAttribute(name="external-form")
+    public String getExternalForm() {
+    	return toExternalForm();
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/JavaDialectRuntimeData.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -432,12 +432,16 @@
             this.store = store;
         }
 
-        public Class fastFindClass(final String name) {
-            Class cls = findLoadedClass( name );
+        public Class<?> fastFindClass(final String name) {
+            Class<?> cls = findLoadedClass( name );
 
             if ( cls == null ) {
                 final byte[] clazzBytes = this.store.read( convertClassToResourcePath( name ) );
                 if ( clazzBytes != null ) {
+                	String pkgName = name.substring(0, name.lastIndexOf('.'));
+                	if (getPackage(pkgName) == null) {
+                		definePackage(pkgName, "", "", "", "", "", "", null);
+                	}
                     cls = defineClass( name,
                                        clazzBytes,
                                        0,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchExecutionHelperProviderImpl.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -679,7 +679,7 @@
                                 UnmarshallingContext context) {
             String processId = reader.getAttribute( "processId" );
 
-            Map<String, Object> params = new HashMap<String, Object>();
+            HashMap<String, Object> params = new HashMap<String, Object>();
             while ( reader.hasMoreChildren() ) {
                 reader.moveDown();
                 String identifier = reader.getAttribute( "identifier" );
@@ -1011,18 +1011,18 @@
             }
             reader.moveUp();
 
-            Map<String, Integer> identifiers = new HashMap<String, Integer>();
+            HashMap<String, Integer> identifiers = new HashMap<String, Integer>();
             for ( int i = 0; i < list.size(); i++ ) {
                 identifiers.put( list.get( i ),
                                  i );
             }
 
-            List results = new ArrayList();      
-            List<List<FactHandle>> resultHandles = new ArrayList();
+            ArrayList<ArrayList<Object>> results = new ArrayList();      
+            ArrayList<ArrayList<FactHandle>> resultHandles = new ArrayList();
             while ( reader.hasMoreChildren() ) {
                 reader.moveDown();
-                List objects = new ArrayList();
-                List<FactHandle> handles = new ArrayList();
+                ArrayList objects = new ArrayList();
+                ArrayList<FactHandle> handles = new ArrayList();
                 while ( reader.hasMoreChildren() ) {
                     reader.moveDown();
                     Object object = readItem( reader,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,21 +1,23 @@
 package org.drools.runtime.impl;
 
-import java.util.Collection;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlRootElement;
+
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
-import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.process.ProcessInstance;
-import org.drools.vsm.ServiceManager;
 
+ at XmlRootElement
+public class BatchExecutionImpl implements GenericCommand<Void> {
 
-public class BatchExecutionImpl implements GenericCommand<Void> {
+	private static final long serialVersionUID = 1L;
+
 	private List<GenericCommand> commands;
 	
 	private String lookup;
+	
+	public BatchExecutionImpl() {
+	}
 
 	public BatchExecutionImpl(List<GenericCommand> commands) {
         this.commands = commands;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultImpl.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultImpl.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -5,11 +5,28 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 import org.drools.runtime.ExecutionResults;
+import org.drools.xml.jaxb.util.JaxbMapAdapter;
 
+ at XmlRootElement(name="execution-results")
+ at XmlAccessorType(XmlAccessType.NONE)
 public class ExecutionResultImpl implements ExecutionResults, Serializable {
-    Map<String, Object> results = new HashMap<String, Object>();    
-    Map<String, Object> facts = new HashMap<String, Object>();
+	
+	private static final long serialVersionUID = 1L;
+	
+	@XmlJavaTypeAdapter(JaxbMapAdapter.class)
+	@XmlElement(name="results")
+    HashMap<String, Object> results = new HashMap<String, Object>();
+
+	@XmlJavaTypeAdapter(JaxbMapAdapter.class)
+	@XmlElement(name="facts")
+	HashMap<String, Object> facts = new HashMap<String, Object>();
     
     /* (non-Javadoc)
      * @see org.drools.batchexecution.BatchExecutionResult#getIdentifiers()
@@ -33,7 +50,7 @@
         return this.results;
     }
 
-    public void setResults(Map<String, Object> results) {
+    public void setResults(HashMap<String, Object> results) {
         this.results = results;
     }
     
@@ -41,7 +58,7 @@
         return this.facts;
     }    
     
-    public void setFactHandles(Map<String, Object> facts) {
+    public void setFactHandles(HashMap<String, Object> facts) {
         this.facts = facts;
     }
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultsMap.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultsMap.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultsMap.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,33 @@
+package org.drools.runtime.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.drools.xml.jaxb.util.JaxbMapAdapter;
+
+ at XmlJavaTypeAdapter(JaxbMapAdapter.class)
+public class ExecutionResultsMap {
+
+	Map<String, Object> results = new HashMap<String, Object>();
+
+	public Collection<String> keySet() {
+		return results.keySet();
+	}
+
+	public Object get(String identifier) {
+		return results.get(identifier);
+	}
+
+	public Map<String, Object> getResults() {
+		return this.results;
+	}
+
+	public void setResults(Map<String, Object> results) {
+		this.results = results;
+
+	}
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/ExecutionResultsMap.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -4,6 +4,7 @@
 package org.drools.runtime.pipeline.impl;
 
 import java.util.Collection;
+import java.util.List;
 
 import org.drools.command.runtime.rule.InsertElementsCommand;
 import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
@@ -15,7 +16,7 @@
 
     public void receive(Object object,
                         PipelineContext context) {
-        InsertElementsCommand cmd = new InsertElementsCommand( (Collection) object );
+        InsertElementsCommand cmd = new InsertElementsCommand( (List<Object>) object );
 
         emit( cmd,
               context );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -3,39 +3,52 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 import org.drools.rule.Declaration;
 import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.QueryResultsRow;
-import org.drools.runtime.rule.QueryResults;
+import org.drools.xml.jaxb.util.JaxbFlatQueryResultsAdapter;
 
+ at XmlAccessorType( XmlAccessType.FIELD )
 public class FlatQueryResults
     implements
     QueryResults {
-    private Map<String, Integer> identifiers;
-    private List<List>           results;
-    private List<List<FactHandle>> factHandles;
+    private HashMap<String, Integer> identifiers;
+    @XmlJavaTypeAdapter(JaxbFlatQueryResultsAdapter.class)
+	@XmlElement(name="results")
+    private ArrayList<ArrayList<Object>>           results;
+    @XmlJavaTypeAdapter(JaxbFlatQueryResultsAdapter.class)
+	@XmlElement(name="fact-handles")
+    private ArrayList<ArrayList<FactHandle>> factHandles;
+    
+    public FlatQueryResults() {
+    	
+	}
 
-    public FlatQueryResults(Map<String, Integer> identifiers,
-                            List<List> results,
-                            List<List<FactHandle>> factHandles) {
+    public FlatQueryResults(HashMap<String, Integer> identifiers,
+                            ArrayList<ArrayList<Object>> results,
+                            ArrayList<ArrayList<FactHandle>> factHandles) {
         this.identifiers = identifiers;
         this.results = results;
         this.factHandles = factHandles;
     }
-
+    
     public FlatQueryResults(org.drools.QueryResults results) {
-        Declaration[] declrs = (Declaration[]) results.getDeclarations().values().toArray( new Declaration[results.getDeclarations().size()] );
-        this.results = new ArrayList<List>( results.size() );
-        this.factHandles = new ArrayList<List<FactHandle>> ( results.size() );
+        Declaration[] declrs = results.getDeclarations().values().toArray( new Declaration[results.getDeclarations().size()] );
+        this.results = new ArrayList<ArrayList<Object>>( results.size() );
+        this.factHandles = new ArrayList<ArrayList<FactHandle>> ( results.size() );
 
         int length = declrs.length;
 
         for ( org.drools.QueryResult result : results ) {
-            List<Object> row = new ArrayList<Object>();
-            List<FactHandle> rowHandle = new ArrayList<FactHandle>();
+        	ArrayList<Object> row = new ArrayList<Object>();
+        	ArrayList<FactHandle> rowHandle = new ArrayList<FactHandle>();
 
             for ( int i = 0; i < length; i++ ) {
                 Declaration declr = declrs[i];
@@ -55,8 +68,8 @@
 
     }
 
-    public String[] getIdentifiers() {
-        return (String[]) identifiers.keySet().toArray( new String[identifiers.size()] );
+	public String[] getIdentifiers() {
+        return identifiers.keySet().toArray( new String[identifiers.size()] );
     }
 
     public int size() {
@@ -69,16 +82,14 @@
                                          this.factHandles.iterator() );
     }
 
-    private class QueryResultsIterator
-        implements
-        Iterator {
-        private Map<String, Integer> identifiers;
-        private Iterator             iterator;
-        private Iterator<List<FactHandle>> handleIterator;
+    private class QueryResultsIterator implements Iterator<QueryResultsRow> {
+        private HashMap<String, Integer> identifiers;
+        private Iterator<ArrayList<Object>> iterator;
+        private Iterator<ArrayList<FactHandle>> handleIterator;
 
-        public QueryResultsIterator(Map<String, Integer> identifiers,
-                                    final Iterator iterator,
-                                    final Iterator<List<FactHandle>> handleIterator) {
+        public QueryResultsIterator(HashMap<String, Integer> identifiers,
+                                    final Iterator<ArrayList<Object>> iterator,
+                                    final Iterator<ArrayList<FactHandle>> handleIterator) {
             this.identifiers = identifiers;
             this.iterator = iterator;
             this.handleIterator = handleIterator;
@@ -88,10 +99,10 @@
             return this.iterator.hasNext();
         }
 
-        public Object next() {
+        public QueryResultsRow next() {
             return new FlatQueryResultRow( identifiers,
-                                           (List) this.iterator.next(),
-                                           (List<FactHandle>) this.handleIterator.next() );
+                                           this.iterator.next(),
+                                           this.handleIterator.next() );
         }
 
         public void remove() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -3,42 +3,54 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+
 import org.drools.rule.Declaration;
+import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.QueryResultsRow;
-import org.drools.runtime.rule.QueryResults;
 
+ at XmlAccessorType( XmlAccessType.FIELD )
 public class NativeQueryResults
     implements
     QueryResults {
     
     private org.drools.QueryResults results;
+    
+    public NativeQueryResults() {
+	}
 
     public NativeQueryResults(org.drools.QueryResults results) {
         this.results = results;
     }
 
-    public String[] getIdentifiers() {
-        return (String[]) this.results.getDeclarations().keySet().toArray( new String[this.results.getDeclarations().size()] );
+	public org.drools.QueryResults getResults() {
+		return results;
+	}
+
+	public String[] getIdentifiers() {
+        return this.getResults().getDeclarations().keySet().toArray( new String[this.getResults().getDeclarations().size()] );
     }
     
+    
     public Map<String, Declaration> getDeclarations() {
-        return this.results.getDeclarations();
+        return this.getResults().getDeclarations();
     }
 
     public int size() {
-        return this.results.size();
+        return this.getResults().size();
     }
     
     public Iterator<QueryResultsRow> iterator() {
-        return new QueryResultsIterator( this.results.iterator() );
+        return new QueryResultsIterator( this.getResults().iterator() );
     }
 
     private class QueryResultsIterator
         implements
-        Iterator {
-        private Iterator iterator;
+        Iterator<QueryResultsRow> {
+        private Iterator<org.drools.QueryResult> iterator;
 
-        public QueryResultsIterator(final Iterator iterator) {
+        public QueryResultsIterator(final Iterator<org.drools.QueryResult> iterator) {
             this.iterator = iterator;
         }
 
@@ -46,8 +58,8 @@
             return this.iterator.hasNext();
         }
 
-        public Object next() {
-            return new NativeQueryResultRow( (org.drools.QueryResult) this.iterator.next() );
+        public QueryResultsRow next() {
+            return new NativeQueryResultRow(this.iterator.next());
         }
 
         public void remove() {

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb)

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util)

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java
===================================================================
--- labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java	2010-02-16 23:42:19 UTC (rev 31699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,48 +0,0 @@
-package org.drools.xml.jaxb.util;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
-
-public class JaxbFlatQueryResultsAdapter extends XmlAdapter<Object[], ArrayList<ArrayList<Object>>> {
-
-	@Override
-	public Object[] marshal(ArrayList<ArrayList<Object>> value) throws Exception {
-		if (value == null || value.isEmpty()) {
-			return new Object[0];
-		}
-		Object[] ret = new Object[value.size()];
-		int i = 0;
-		for (ArrayList<Object> list : value) {
-			int j = 0;
-			Object[] sublist = new Object[list.size()];
-			for (Object object : list) {
-				sublist[j++] = object;
-			}
-			ret[i++] = sublist;
-		}
-		return ret;
-	}
-
-	@Override
-	public ArrayList<ArrayList<Object>> unmarshal(Object[] value) throws Exception {
-		ArrayList<ArrayList<Object>> ret = new ArrayList<ArrayList<Object>>();
-		for( Object o : value ) {
-			ArrayList<Object> subList;
-			if (o instanceof Object[]) {
-				Object[] list = (Object[]) o;
-				subList = new ArrayList<Object>(list.length);
-				for (Object obj : list) {
-					subList.add(obj);
-				} 
-			} else {
-				subList = new ArrayList<Object>(Arrays.asList(new Object[] {o}));
-			}
-			ret.add(subList);
-		}
-		return ret;
-	}
-
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbFlatQueryResultsAdapter.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,48 @@
+package org.drools.xml.jaxb.util;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+
+public class JaxbFlatQueryResultsAdapter extends XmlAdapter<Object[], ArrayList<ArrayList<Object>>> {
+
+	@Override
+	public Object[] marshal(ArrayList<ArrayList<Object>> value) throws Exception {
+		if (value == null || value.isEmpty()) {
+			return new Object[0];
+		}
+		Object[] ret = new Object[value.size()];
+		int i = 0;
+		for (ArrayList<Object> list : value) {
+			int j = 0;
+			Object[] sublist = new Object[list.size()];
+			for (Object object : list) {
+				sublist[j++] = object;
+			}
+			ret[i++] = sublist;
+		}
+		return ret;
+	}
+
+	@Override
+	public ArrayList<ArrayList<Object>> unmarshal(Object[] value) throws Exception {
+		ArrayList<ArrayList<Object>> ret = new ArrayList<ArrayList<Object>>();
+		for( Object o : value ) {
+			ArrayList<Object> subList;
+			if (o instanceof Object[]) {
+				Object[] list = (Object[]) o;
+				subList = new ArrayList<Object>(list.length);
+				for (Object obj : list) {
+					subList.add(obj);
+				} 
+			} else {
+				subList = new ArrayList<Object>(Arrays.asList(new Object[] {o}));
+			}
+			ret.add(subList);
+		}
+		return ret;
+	}
+
+}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java
===================================================================
--- labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java	2010-02-16 23:42:19 UTC (rev 31699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,38 +0,0 @@
-package org.drools.xml.jaxb.util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-
-
- at XmlAccessorType(XmlAccessType.PROPERTY)
-public class JaxbListWrapper<T> extends ArrayList<T> {
-
-	public JaxbListWrapper() {
-		super();
-	}
-
-	public JaxbListWrapper(Collection<? extends T> c) {
-		super(c);
-	}
-
-	public JaxbListWrapper(int initialCapacity) {
-		super(initialCapacity);
-	}
-
-	@XmlElement
-	public List<T> getElements() {
-		return this;
-	}
-	
-	public void setElements(List<T> elems) {
-		clear();
-		if (elems != null) {
-			addAll(elems);
-		}
-	}
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbListWrapper.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,38 @@
+package org.drools.xml.jaxb.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+
+
+ at XmlAccessorType(XmlAccessType.PROPERTY)
+public class JaxbListWrapper<T> extends ArrayList<T> {
+
+	public JaxbListWrapper() {
+		super();
+	}
+
+	public JaxbListWrapper(Collection<? extends T> c) {
+		super(c);
+	}
+
+	public JaxbListWrapper(int initialCapacity) {
+		super(initialCapacity);
+	}
+
+	@XmlElement
+	public List<T> getElements() {
+		return this;
+	}
+	
+	public void setElements(List<T> elems) {
+		clear();
+		if (elems != null) {
+			addAll(elems);
+		}
+	}
+}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java
===================================================================
--- labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java	2010-02-16 23:42:19 UTC (rev 31699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,35 +0,0 @@
-package org.drools.xml.jaxb.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-
-
-public class JaxbMapAdapter extends XmlAdapter<JaxbPair[], Map<String,Object>> {
-
-	@Override
-	public JaxbPair[] marshal(Map<String, Object> value) throws Exception {
-		if (value == null || value.isEmpty()) {
-			return new JaxbPair[0];
-		}
-		List<JaxbPair> ret = new ArrayList<JaxbPair>(value.size());
-		for (Map.Entry<String, Object> entry : value.entrySet()) {
-			ret.add(new JaxbPair(entry.getKey(), entry.getValue()));
-		}
-		
-		return ret.toArray(new JaxbPair[value.size()]);
-	}
-
-	@Override
-	public Map<String, Object> unmarshal(JaxbPair[] value) throws Exception {
-		Map<String, Object> r = new HashMap<String, Object>();
-		for( JaxbPair p : value ) {
-			r.put(p.getKey(), p.getValue());
-		}
-		return r;
-	}
-
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,35 @@
+package org.drools.xml.jaxb.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+
+public class JaxbMapAdapter extends XmlAdapter<JaxbPair[], Map<String,Object>> {
+
+	@Override
+	public JaxbPair[] marshal(Map<String, Object> value) throws Exception {
+		if (value == null || value.isEmpty()) {
+			return new JaxbPair[0];
+		}
+		List<JaxbPair> ret = new ArrayList<JaxbPair>(value.size());
+		for (Map.Entry<String, Object> entry : value.entrySet()) {
+			ret.add(new JaxbPair(entry.getKey(), entry.getValue()));
+		}
+		
+		return ret.toArray(new JaxbPair[value.size()]);
+	}
+
+	@Override
+	public Map<String, Object> unmarshal(JaxbPair[] value) throws Exception {
+		Map<String, Object> r = new HashMap<String, Object>();
+		for( JaxbPair p : value ) {
+			r.put(p.getKey(), p.getValue());
+		}
+		return r;
+	}
+
+}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java
===================================================================
--- labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java	2010-02-16 23:42:19 UTC (rev 31699)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,76 +0,0 @@
-package org.drools.xml.jaxb.util;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-
- at XmlAccessorType(XmlAccessType.NONE)
-public class JaxbPair {
-
-	@XmlAttribute(name = "key")
-	private String key;
-
-	@XmlElement
-	private Object value;
-
-	public JaxbPair() {
-	}
-
-	public JaxbPair(String key, Object value) {
-		this.key = key;
-		this.value = value;
-	}
-
-	public String getKey() {
-		return key;
-	}
-
-	public void setKey(String key) {
-		this.key = key;
-	}
-
-	public Object getValue() {
-		return value;
-	}
-
-	public void setValue(Object value) {
-		this.value = value;
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((key == null) ? 0 : key.hashCode());
-		result = prime * result + ((value == null) ? 0 : value.hashCode());
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		JaxbPair other = (JaxbPair) obj;
-		if (key == null) {
-			if (other.key != null)
-				return false;
-		} else if (!key.equals(other.key))
-			return false;
-		if (value == null) {
-			if (other.value != null)
-				return false;
-		} else if (!value.equals(other.value))
-			return false;
-		return true;
-	}
-	
-	@Override
-	public String toString() {
-		return "JaxbPair [key=" + key + ", value=" + value + "]";
-	}
-}

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbPair.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,76 @@
+package org.drools.xml.jaxb.util;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
+ at XmlAccessorType(XmlAccessType.NONE)
+public class JaxbPair {
+
+	@XmlAttribute(name = "key")
+	private String key;
+
+	@XmlElement
+	private Object value;
+
+	public JaxbPair() {
+	}
+
+	public JaxbPair(String key, Object value) {
+		this.key = key;
+		this.value = value;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public Object getValue() {
+		return value;
+	}
+
+	public void setValue(Object value) {
+		this.value = value;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((key == null) ? 0 : key.hashCode());
+		result = prime * result + ((value == null) ? 0 : value.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		JaxbPair other = (JaxbPair) obj;
+		if (key == null) {
+			if (other.key != null)
+				return false;
+		} else if (!key.equals(other.key))
+			return false;
+		if (value == null) {
+			if (other.value != null)
+				return false;
+		} else if (!value.equals(other.value))
+			return false;
+		return true;
+	}
+	
+	@Override
+	public String toString() {
+		return "JaxbPair [key=" + key + ", value=" + value + "]";
+	}
+}

Modified: labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml	2010-02-17 02:09:43 UTC (rev 31701)
@@ -52,8 +52,12 @@
             <groupId>org.drools</groupId>
             <artifactId>drools-transformer-xstream</artifactId>
         </dependency>
-
          <dependency>
+         	<groupId>org.drools</groupId>
+         	<artifactId>drools-transformer-jaxb</artifactId>
+         </dependency>
+         
+         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core</artifactId>
             <version>${camel-version}</version>

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/camel/component/DroolsJaxbDataFormat.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/main/java/org/drools/camel/component/DroolsJaxbDataFormat.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/camel/component/DroolsJaxbDataFormat.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/camel/component/DroolsJaxbDataFormat.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,133 @@
+package org.drools.camel.component;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringReader;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.Source;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.DataFormat;
+import org.drools.command.runtime.BatchExecutionCommand;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
+import org.drools.io.Resource;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.impl.CommandTranslator;
+import org.drools.runtime.pipeline.impl.ResultTranslator;
+import org.drools.runtime.pipeline.impl.ServiceManagerPipelineContextImpl;
+import org.drools.vsm.ServiceManager;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+/**
+ * 
+ * @author Lucas Amador
+ * 
+ */
+public class DroolsJaxbDataFormat implements DataFormat {
+
+	private CommandTranslator cmdTranslator;
+	private ResultTranslator resTranslator;
+	private String charset;
+	
+	public DroolsJaxbDataFormat() {
+		this.cmdTranslator = new CommandTranslator();
+		this.resTranslator = new ResultTranslator();
+	}
+
+	public void marshal(Exchange exchange, Object graph, OutputStream stream)
+	throws Exception {
+
+		Object body = exchange.getIn().getBody();
+		
+		JAXBContext jaxbContext = (JAXBContext) exchange.getProperty("jaxb-context");
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+		
+		String result = null;
+		
+		if (body instanceof ExecutionResults) {
+			result = resTranslator.transform((ExecutionResultImpl) body, marshaller);
+		}
+
+		byte[] bytes;
+        if (charset != null) {
+            bytes = result.getBytes(charset);
+        } else {
+            bytes = result.getBytes();
+        }
+		
+		stream.write(bytes);
+
+	}
+
+	public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+		
+		JAXBContext jaxbContext = (JAXBContext) exchange.getIn().getHeader("jaxb-context");
+
+		PipelineContext context = (PipelineContext) exchange.getProperty("drools-context");
+		Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+		Document d = exchange.getIn().getBody(Document.class);
+		Object body = exchange.getIn().getBody();
+		String name = d.getDocumentElement().getAttribute("lookup");
+		ServiceManagerPipelineContextImpl vsmContext = (ServiceManagerPipelineContextImpl) exchange.getProperty("drools-context");
+		ServiceManager sm = vsmContext.getServiceManager();
+		CommandExecutor executor = sm.lookup(name);
+		if (executor == null) {
+			throw new IllegalArgumentException("Unable to lookup CommandExecutor using name '" + name + "'");
+		}
+		vsmContext.setCommandExecutor(executor);
+		ClassLoader cl = null;
+		if (executor instanceof StatefulKnowledgeSessionImpl) {
+			cl = ((ReteooRuleBase) ((StatefulKnowledgeSessionImpl) executor).getRuleBase()).getRootClassLoader();
+		} else if (executor instanceof StatelessKnowledgeSessionImpl) {
+			cl = ((ReteooRuleBase) ((StatelessKnowledgeSessionImpl) executor).getRuleBase()).getRootClassLoader();
+		} else {
+			throw new IllegalArgumentException("Unable to set ClassLoader on " + executor);
+		}
+		vsmContext.setClassLoader(cl);
+		Object payload = null;
+		if ( body instanceof File ) {
+			payload = unmarshaller.unmarshal( (File) body );
+		} else if ( body instanceof InputStream ) {
+			payload = unmarshaller.unmarshal( (InputStream) body );
+		} else if ( body instanceof Reader ) {
+			payload = unmarshaller.unmarshal( (Reader) body );
+		} else if ( body instanceof Source ) {
+			payload = unmarshaller.unmarshal( (Source) body );
+		} else if ( body instanceof InputSource ) {
+			payload = unmarshaller.unmarshal( (InputSource) body );
+		}  else if ( body instanceof Resource ) {
+			payload = unmarshaller.unmarshal( (( Resource ) body).getReader() );
+		}  else if ( body instanceof String ) {
+			payload = unmarshaller.unmarshal( new StringReader( ( String ) body ) );
+		} else {
+			throw new IllegalArgumentException( "exchange input body object must be instance of File, InputStream, Reader, Source, InputSource, Resource, String" );
+		}
+
+		if ( payload instanceof JAXBElement ) {
+			payload = ((JAXBElement<?>) payload).getValue();
+		}
+
+		if (payload instanceof BatchExecutionCommand) {
+			payload = cmdTranslator.transform((BatchExecutionCommand) payload, unmarshaller);
+		}
+
+		exchange.setProperty("drools-context", context);
+		exchange.setProperty("jaxb-context", jaxbContext);
+
+		return payload;
+	}
+	
+}

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/resources/META-INF/services/org/apache/camel/dataformat/drools-jaxb (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/main/resources/META-INF/services/org/apache/camel/dataformat/drools-jaxb)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/resources/META-INF/services/org/apache/camel/dataformat/drools-jaxb	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/resources/META-INF/services/org/apache/camel/dataformat/drools-jaxb	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class=org.drools.camel.component.DroolsJaxbDataFormat
+

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxWrapperCollectionTest.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxWrapperCollectionTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxWrapperCollectionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxWrapperCollectionTest.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,368 @@
+package org.drools.camel.component;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.builder.help.KnowledgeBuilderHelper;
+import org.drools.command.runtime.BatchExecutionCommand;
+import org.drools.command.runtime.GetGlobalCommand;
+import org.drools.command.runtime.SetGlobalCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.io.ResourceFactory;
+import org.drools.pipeline.camel.Person;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+
+import com.sun.tools.xjc.Language;
+import com.sun.tools.xjc.Options;
+
+/**
+ * 
+ * @author Lucas Amador
+ * @author Pablo Nussembaum
+ */
+public class CamelEndpointWithJaxWrapperCollectionTest extends DroolsCamelTestSupport {
+
+	private String handle;
+	private JAXBContext jaxbContext;
+
+	public void testWorkingSetGlobalTestSessionSetAndGetGlobal() throws Exception {
+
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		
+		SetGlobalCommand setGlobal = new SetGlobalCommand("list", new WrappedList());
+		setGlobal.setOut(true);
+		
+		cmd.getCommands().add(setGlobal);
+		cmd.getCommands().add(new InsertObjectCommand(new Person("baunax")));
+		cmd.getCommands().add(new FireAllRulesCommand());
+		cmd.getCommands().add(new GetGlobalCommand("list"));
+		
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		StringWriter xml = new StringWriter();
+		marshaller.marshal(cmd, xml);
+
+		System.out.println(xml.toString());
+		
+		byte[] response = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xml.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(response);
+		System.out.println("response:\n" + new String(response));
+		Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+		ExecutionResults res = (ExecutionResults) unmarshaller.unmarshal(new ByteArrayInputStream(response));
+		WrappedList resp = (WrappedList) res.getValue("list");
+		assertNotNull(resp);
+		
+		assertEquals(resp.size(), 2);
+		assertEquals("baunax", resp.get(0).getName());
+		assertEquals("Hadrian", resp.get(1).getName());
+
+	}
+	
+	@XmlRootElement(name="list")
+	@XmlAccessorType(XmlAccessType.FIELD)
+	public static class WrappedList {
+//		@XmlElementWrapper(name="list")
+        @XmlElements({@XmlElement(name="org.drools.pipeline.camel.Person", type=Person.class)})
+		private List<Person> people = new ArrayList<Person>();
+
+		public void add(int index, Person element) {
+			people.add(index, element);
+		}
+
+		public boolean add(Person e) {
+			return people.add(e);
+		}
+
+		public boolean addAll(Collection<? extends Person> c) {
+			return people.addAll(c);
+		}
+
+		public boolean addAll(int index, Collection<? extends Person> c) {
+			return people.addAll(index, c);
+		}
+
+		public void clear() {
+			people.clear();
+		}
+
+		public boolean contains(Object o) {
+			return people.contains(o);
+		}
+
+		public boolean containsAll(Collection<?> c) {
+			return people.containsAll(c);
+		}
+
+		public boolean equals(Object o) {
+			return people.equals(o);
+		}
+
+		public Person get(int index) {
+			return people.get(index);
+		}
+
+		public int hashCode() {
+			return people.hashCode();
+		}
+
+		public int indexOf(Object o) {
+			return people.indexOf(o);
+		}
+
+		public boolean isEmpty() {
+			return people.isEmpty();
+		}
+
+		public Iterator<Person> iterator() {
+			return people.iterator();
+		}
+
+		public int lastIndexOf(Object o) {
+			return people.lastIndexOf(o);
+		}
+
+		public ListIterator<Person> listIterator() {
+			return people.listIterator();
+		}
+
+		public ListIterator<Person> listIterator(int index) {
+			return people.listIterator(index);
+		}
+
+		public Person remove(int index) {
+			return people.remove(index);
+		}
+
+		public boolean remove(Object o) {
+			return people.remove(o);
+		}
+
+		public boolean removeAll(Collection<?> c) {
+			return people.removeAll(c);
+		}
+
+		public boolean retainAll(Collection<?> c) {
+			return people.retainAll(c);
+		}
+
+		public Person set(int index, Person element) {
+			return people.set(index, element);
+		}
+
+		public int size() {
+			return people.size();
+		}
+
+		public List<Person> subList(int fromIndex, int toIndex) {
+			return people.subList(fromIndex, toIndex);
+		}
+
+		public Object[] toArray() {
+			return people.toArray();
+		}
+
+		public <T> T[] toArray(T[] a) {
+			return people.toArray(a);
+		}
+		
+	}
+
+	@Override
+	protected void configureDroolsContext() {
+		Person me = new Person();
+		me.setName("Hadrian");
+
+		String rule = "";
+		rule += "package org.drools \n";
+		rule += "import org.drools.pipeline.camel.Person\n";
+		rule += "import org.drools.camel.component.CamelEndpointWithJaxWrapperCollectionTest.WrappedList\n";
+		rule += "global org.drools.camel.component.CamelEndpointWithJaxWrapperCollectionTest.WrappedList list\n";
+		rule += "rule rule1 \n";
+		rule += "  when \n";
+		rule += "    $p : Person() \n";
+		rule += " \n";
+		rule += "  then \n";
+		rule += "    System.out.println(\"executed\"); \n";
+		rule += "    list.add($p); \n";
+		rule += "end\n";
+
+		StatefulKnowledgeSession ksession = registerKnowledgeRuntime("ksession1", rule);
+		InsertObjectCommand cmd = new InsertObjectCommand(me);
+		cmd.setOutIdentifier("camel-rider");
+		cmd.setReturnObject(false);
+		ExecutionResults results = ksession.execute(cmd);
+		handle = ((FactHandle)results.getFactHandle("camel-rider")).toExternalForm();
+	}
+
+	@Override
+	protected StatefulKnowledgeSession registerKnowledgeRuntime(String identifier, String rule) {
+		KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
+
+		Options xjcOpts = new Options();
+		xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+
+		String classNames[] = null;
+
+		try {
+			classNames = KnowledgeBuilderHelper.addXsdModel( ResourceFactory.newClassPathResource("person.xsd", getClass()),
+					kbuilder,
+					xjcOpts,
+			"xsd" );
+		} catch (IOException e) {
+			LOG.error("Errors while adding xsd model. ", kbuilder.getErrors());
+		}
+
+		assertFalse( kbuilder.hasErrors() );
+
+		if (rule != null && rule.length() > 0) {
+			kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL);
+
+			if (kbuilder.hasErrors()) {
+				LOG.info("Errors while adding rule. ", kbuilder.getErrors());
+			}
+		}
+		
+		String process1 = "";
+        process1 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        process1 += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        process1 += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        process1 += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        process1 += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+        process1 += "\n";
+        process1 += "  <header>\n";
+        process1 += "    <imports>\n";
+        process1 += "      <import name=\"org.drools.model.Person\" />\n";
+        process1 += "    </imports>\n";
+        process1 += "    <globals>\n";
+        process1 += "      <global identifier=\"list\" type=\"org.drools.camel.component.CamelEndpointWithJaxWrapperCollectionTest.WrappedList\" />\n";
+        process1 += "    </globals>\n";
+        process1 += "    <variables>\n";
+        process1 += "      <variable name=\"person\" >\n";
+        process1 += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"Person\" />\n";
+        process1 += "      </variable>\n";
+        process1 += "    </variables>\n";
+        process1 += "  </header>\n";
+        process1 += "\n";
+        process1 += "  <nodes>\n";
+        process1 += "    <start id=\"1\" name=\"Start\" />\n";
+        process1 += "    <actionNode id=\"2\" name=\"MyActionNode\" >\n";
+        process1 += "      <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Triggered\");\n";
+//        process1 += "list.add(person.name);\n";
+        process1 += "</action>\n";
+        process1 += "    </actionNode>\n";
+        process1 += "    <end id=\"3\" name=\"End\" />\n";
+        process1 += "  </nodes>\n";
+        process1 += "\n";
+        process1 += "  <connections>\n";
+        process1 += "    <connection from=\"1\" to=\"2\" />\n";
+        process1 += "    <connection from=\"2\" to=\"3\" />\n";
+        process1 += "  </connections>\n" + "\n";
+        process1 += "</process>";
+        
+        kbuilder.add(ResourceFactory.newByteArrayResource(process1.getBytes()), ResourceType.DRF);
+
+        if (kbuilder.hasErrors()) {
+        	LOG.info("Errors while adding process rule 1. ", kbuilder.getErrors());
+        }
+
+		assertFalse(kbuilder.hasErrors());
+        
+        String process2 = "";
+        process2 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        process2 += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        process2 += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        process2 += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        process2 += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+        process2 += "\n";
+        process2 += "  <header>\n";
+        process2 += "    <variables>\n";
+        process2 += "      <variable name=\"MyVar\" >\n";
+        process2 += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        process2 += "        <value>SomeText</value>\n";
+        process2 += "      </variable>\n";
+        process2 += "    </variables>\n";
+        process2 += "  </header>\n";
+        process2 += "\n";
+        process2 += "  <nodes>\n";
+        process2 += "    <start id=\"1\" name=\"Start\" />\n";
+        process2 += "    <eventNode id=\"2\" name=\"Event\" variableName=\"MyVar\" >\n";
+        process2 += "      <eventFilters>\n";
+        process2 += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+        process2 += "      </eventFilters>\n";
+        process2 += "    </eventNode>\n";
+        process2 += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+        process2 += "    <end id=\"4\" name=\"End\" />\n";
+        process2 += "  </nodes>\n";
+        process2 += "\n";
+        process2 += "  <connections>\n";
+        process2 += "    <connection from=\"1\" to=\"3\" />\n";
+        process2 += "    <connection from=\"2\" to=\"3\" />\n";
+        process2 += "    <connection from=\"3\" to=\"4\" />\n";
+        process2 += "  </connections>\n";
+        process2 += "\n";
+        process2 += "</process>";
+        
+        kbuilder.add(ResourceFactory.newByteArrayResource(process2.getBytes()), ResourceType.DRF);
+
+        if (kbuilder.hasErrors()) {
+        	LOG.info("Errors while adding process rule 2. ", kbuilder.getErrors());
+        }
+
+		assertFalse(kbuilder.hasErrors());
+
+		KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+		// Add object model to classes array
+		List<String> allClasses = new ArrayList<String>(Arrays.asList(classNames));		
+		allClasses.add(Person.class.getName());
+		allClasses.add(WrappedList.class.getName());
+
+		try {
+			jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClasses.toArray(new String[allClasses.size()]), kbase );
+		} catch (Exception e) {
+			LOG.info("Errors while creating JAXB Context. ", e);
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+
+		StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+		serviceManager.register(identifier, session);
+		return session;
+	}
+
+	@Override
+	protected RouteBuilder createRouteBuilder() throws Exception {
+		return new RouteBuilder() {
+			public void configure() throws Exception {
+				from("direct:test-with-session").to("drools:sm/ksession1?dataFormat=drools-jaxb");
+				from("direct:test-no-session").to("drools:sm?dataFormat=drools-jaxb");
+			}
+		};
+	}
+}

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,457 @@
+package org.drools.camel.component;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.builder.help.KnowledgeBuilderHelper;
+import org.drools.command.runtime.BatchExecutionCommand;
+import org.drools.command.runtime.process.StartProcessCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.runtime.rule.GetObjectCommand;
+import org.drools.command.runtime.rule.InsertElementsCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.command.runtime.rule.QueryCommand;
+import org.drools.common.DisconnectedFactHandle;
+import org.drools.io.ResourceFactory;
+import org.drools.pipeline.camel.Person;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResultsRow;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+
+import com.sun.tools.xjc.Language;
+import com.sun.tools.xjc.Options;
+
+/**
+ * 
+ * @author Lucas Amador
+ *
+ */
+public class CamelEndpointWithJaxbTest extends DroolsCamelTestSupport {
+
+	private String handle;
+	private JAXBContext jaxbContext;
+
+	public void testSessionInsert() throws Exception {
+
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		cmd.getCommands().add(new InsertObjectCommand(new Person("lucaz", 25), "person1"));
+		cmd.getCommands().add(new InsertObjectCommand(new Person("hadrian", 25), "person2"));
+		cmd.getCommands().add(new InsertObjectCommand(new Person("baunax", 21), "person3"));
+		cmd.getCommands().add(new FireAllRulesCommand());
+		
+		StringWriter xmlReq = new StringWriter();
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		marshaller.marshal(cmd, xmlReq);
+		
+		System.out.println(xmlReq.toString());
+		
+		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(xmlResp);
+		System.out.println(new String(xmlResp));
+
+		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+		
+		assertEquals(3, resp.getIdentifiers().size());
+		assertNotNull(resp.getValue("person1"));
+		assertNotNull(resp.getValue("person2"));
+		assertNotNull(resp.getValue("person3"));
+		
+		assertNotNull(resp.getFactHandle("person1"));
+		assertNotNull(resp.getFactHandle("person2"));
+		assertNotNull(resp.getFactHandle("person3"));
+	}
+	
+	public void testSessionGetObject() throws Exception {
+		
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		cmd.getCommands().add(new GetObjectCommand(new DisconnectedFactHandle(handle), "hadrian"));
+		
+		StringWriter xmlReq = new StringWriter();
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		marshaller.marshal(cmd, xmlReq);
+		
+		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
+		
+		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+		
+		assertEquals(1, resp.getIdentifiers().size());
+		
+		assertNotNull(resp.getValue("hadrian"));
+	}
+	
+	public void testSessionModify() throws Exception {
+		String cmd = "";
+		cmd += "<batch-execution lookup='ksession1'>\n";
+		cmd += "   <modify factHandle='" + handle + "'>\n";
+		cmd += "      <set accessor='name' value='\"salaboy\"' />\n";
+		cmd += "   </modify>\n";
+		cmd += "</batch-execution>\n";
+		
+		String outXml = new String((byte[])template.requestBodyAndHeader("direct:test-with-session", cmd, "jaxb-context", jaxbContext));
+		
+		String expectedXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
+		expectedXml += "<execution-results xmlns:ns2=\"http://drools.org/model\">\n";
+		expectedXml += "    <results/>\n";
+		expectedXml += "    <facts/>\n";
+		expectedXml += "</execution-results>\n";
+		
+		assertEquals(expectedXml, outXml);
+		
+		cmd = "<batch-execution lookup='ksession1'>\n";
+		cmd += "   <get-object out-identifier='rider' factHandle='" + handle + "'/>\n";
+		cmd += "</batch-execution>\n";
+
+		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", cmd.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(xmlResp);
+		System.out.println(new String(xmlResp));
+
+		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+		
+		Person person = (Person) resp.getValue("rider");
+		System.out.println(person.getName());
+		
+		assertEquals("salaboy", person.getName());
+		
+	}
+
+	public void testSessionRetractObject() throws Exception {
+
+		String cmd =  "";
+		cmd += "<batch-execution lookup='ksession1'>\n"; 
+		cmd += "   <retract factHandle='" + handle + "' />\n"; 
+		cmd += "</batch-execution>";
+
+		String outXml = new String((byte[])template.requestBodyAndHeader("direct:test-with-session", cmd, "jaxb-context", jaxbContext));
+
+		System.out.println(outXml);
+
+		assertNotNull(outXml);
+
+	}
+
+	public void testInsertElements() throws Exception {
+		
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		InsertElementsCommand elems = new InsertElementsCommand("elems");
+		elems.getObjects().add(new Person("lucaz", 25));
+		elems.getObjects().add(new Person("hadrian", 25));
+		elems.getObjects().add(new Person("baunax", 21));
+		
+		cmd.getCommands().add(elems);
+		cmd.getCommands().add(new FireAllRulesCommand());
+		
+		StringWriter xmlReq = new StringWriter();
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		marshaller.marshal(cmd, xmlReq);
+		
+		System.out.println(xmlReq.toString());
+		
+		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(xmlResp);
+		System.out.println(new String(xmlResp));
+
+		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+		
+		assertEquals(1, resp.getIdentifiers().size());
+		List<Person> list = (List<Person>) resp.getValue("elems");
+		assertEquals("lucaz", list.get(0).getName());
+		assertEquals("hadrian", list.get(1).getName());
+		assertEquals("baunax", list.get(2).getName());
+		
+	}
+	
+	public void testQuery() throws Exception {
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		cmd.getCommands().add(new InsertObjectCommand(new Person("lucaz")));
+		cmd.getCommands().add(new InsertObjectCommand(new Person("hadrian")));
+		cmd.getCommands().add(new InsertObjectCommand(new Person("baunax", 43)));
+		cmd.getCommands().add(new InsertObjectCommand(new Person("baunax", 21)));
+		cmd.getCommands().add(new QueryCommand("persons", "persons", null));
+		cmd.getCommands().add(new QueryCommand("person", "personWithName", new String[] {"baunax"} ));
+		
+		StringWriter xmlReq = new StringWriter();
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		marshaller.marshal(cmd, xmlReq);
+		
+		System.out.println(xmlReq.toString());
+		
+		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(xmlResp);
+		System.out.println(new String(xmlResp));
+		
+		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+		
+		FlatQueryResults personQuery = (FlatQueryResults) resp.getValue("person");
+		assertEquals(2, personQuery.size());
+		FlatQueryResults personsQuery = (FlatQueryResults) resp.getValue("persons");
+		assertEquals(5, personsQuery.size());
+		
+		Iterator<QueryResultsRow> iterator = personQuery.iterator();
+		QueryResultsRow row = iterator.next();
+		Person person = (Person) row.get("$p");
+		
+		assertEquals("baunax", person.getName());
+	}
+
+	public void testProcess() throws Exception {
+
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		
+		StartProcessCommand start = new StartProcessCommand("org.drools.actions");
+		start.putParameter("person", new Person("lucaz", 25));
+		start.putParameter("person2", new Person("hadrian", 25));
+		start.putParameter("person3", new Person("baunax", 21));
+		
+		cmd.getCommands().add(start);
+		
+		StringWriter xmlReq = new StringWriter();
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		marshaller.marshal(cmd, xmlReq);
+		
+		System.out.println(xmlReq.toString());
+
+		byte[] xmlResp = (byte[])template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(xmlResp);
+		System.out.println(new String(xmlResp));
+		Object resp = jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+	}
+	
+	
+	public void testProcessInstanceSignalEvent() throws Exception {
+		
+		String processId = "org.drools.event";
+		
+		String cmd = "";
+		cmd += "<batch-execution lookup='ksession1'>\n";
+		cmd += "  <start-process processId='" + processId + "'>\n";
+		cmd += "  </start-process>\n";
+		cmd += "</batch-execution>\n";
+		
+		System.out.println(cmd);
+
+		String outXml = new String((byte[])template.requestBodyAndHeader("direct:test-with-session", cmd, "jaxb-context", jaxbContext));
+		
+		assertNotNull(outXml);
+		
+		int processInstanceId = 1;
+		
+		cmd = "";
+		cmd += "<batch-execution lookup='ksession1'>\n";
+		cmd += "   <signal-event process-instance-id= '" + processInstanceId + "' event-type='MyEvent'>";
+        cmd += "      <string>MyValue</string>";
+        cmd += "   </signal-event>";
+        cmd += "</batch-execution>\n";
+		
+		outXml = new String((byte[])template.requestBodyAndHeader("direct:test-with-session", cmd, "jaxb-context", jaxbContext));
+		
+		System.out.println(outXml);
+	}
+
+	@Override
+	protected RouteBuilder createRouteBuilder() throws Exception {
+		return new RouteBuilder() {
+			public void configure() throws Exception {
+				from("direct:test-with-session").to("drools:sm/ksession1?dataFormat=drools-jaxb");
+				from("direct:test-no-session").to("drools:sm?dataFormat=drools-jaxb");
+			}
+		};
+	}
+
+	@Override
+	protected void configureDroolsContext() {
+		Person me = new Person();
+		me.setName("Hadrian");
+
+		String rule = "";
+		rule += "package org.drools \n";
+		rule += "import org.drools.pipeline.camel.Person \n";
+		rule += "global java.util.List list \n";
+		rule += "query persons \n";
+		rule += "   $p : Person(name != null) \n";
+		rule += "end \n";
+		rule += "query personWithName(String param)\n";
+		rule += "   $p : Person(name == param) \n";
+		rule += "end \n";
+		rule += "rule rule1 \n";
+		rule += "  when \n";
+		rule += "    $p : Person() \n";
+		rule += " \n";
+		rule += "  then \n";
+		rule += "    System.out.println(\"executed\"); \n";
+		rule += "end\n";
+
+		StatefulKnowledgeSession ksession = registerKnowledgeRuntime("ksession1", rule);
+		InsertObjectCommand cmd = new InsertObjectCommand(me);
+		cmd.setOutIdentifier("camel-rider");
+		cmd.setReturnObject(false);
+		ExecutionResults results = ksession.execute(cmd);
+		handle = ((FactHandle)results.getFactHandle("camel-rider")).toExternalForm();
+	}
+
+	@Override
+	protected StatefulKnowledgeSession registerKnowledgeRuntime(String identifier, String rule) {
+		KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
+
+		Options xjcOpts = new Options();
+		xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+
+		String classNames[] = null;
+
+		try {
+			classNames = KnowledgeBuilderHelper.addXsdModel( ResourceFactory.newClassPathResource("person.xsd", getClass()),
+					kbuilder,
+					xjcOpts,
+			"xsd" );
+		} catch (IOException e) {
+			LOG.error("Errors while adding xsd model. ", kbuilder.getErrors());
+		}
+
+		assertFalse( kbuilder.hasErrors() );
+
+		if (rule != null && rule.length() > 0) {
+			kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL);
+
+			if (kbuilder.hasErrors()) {
+				LOG.info("Errors while adding rule. ", kbuilder.getErrors());
+			}
+		}
+		
+		String process1 = "";
+        process1 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        process1 += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        process1 += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        process1 += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        process1 += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+        process1 += "\n";
+        process1 += "  <header>\n";
+        process1 += "    <imports>\n";
+        process1 += "      <import name=\"org.drools.model.Person\" />\n";
+        process1 += "    </imports>\n";
+        process1 += "    <globals>\n";
+        process1 += "      <global identifier=\"list\" type=\"java.util.List\" />\n";
+        process1 += "    </globals>\n";
+        process1 += "    <variables>\n";
+        process1 += "      <variable name=\"person\" >\n";
+        process1 += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"Person\" />\n";
+        process1 += "      </variable>\n";
+        process1 += "    </variables>\n";
+        process1 += "  </header>\n";
+        process1 += "\n";
+        process1 += "  <nodes>\n";
+        process1 += "    <start id=\"1\" name=\"Start\" />\n";
+        process1 += "    <actionNode id=\"2\" name=\"MyActionNode\" >\n";
+        process1 += "      <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Triggered\");\n";
+//        process1 += "list.add(person.name);\n";
+        process1 += "</action>\n";
+        process1 += "    </actionNode>\n";
+        process1 += "    <end id=\"3\" name=\"End\" />\n";
+        process1 += "  </nodes>\n";
+        process1 += "\n";
+        process1 += "  <connections>\n";
+        process1 += "    <connection from=\"1\" to=\"2\" />\n";
+        process1 += "    <connection from=\"2\" to=\"3\" />\n";
+        process1 += "  </connections>\n" + "\n";
+        process1 += "</process>";
+        
+        kbuilder.add(ResourceFactory.newByteArrayResource(process1.getBytes()), ResourceType.DRF);
+
+        if (kbuilder.hasErrors()) {
+        	System.out.println("Errors while adding process rule 1. " + kbuilder.getErrors());
+        }
+
+		assertFalse(kbuilder.hasErrors());
+        
+        String process2 = "";
+        process2 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        process2 += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        process2 += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        process2 += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        process2 += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+        process2 += "\n";
+        process2 += "  <header>\n";
+        process2 += "    <variables>\n";
+        process2 += "      <variable name=\"MyVar\" >\n";
+        process2 += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        process2 += "        <value>SomeText</value>\n";
+        process2 += "      </variable>\n";
+        process2 += "    </variables>\n";
+        process2 += "  </header>\n";
+        process2 += "\n";
+        process2 += "  <nodes>\n";
+        process2 += "    <start id=\"1\" name=\"Start\" />\n";
+        process2 += "    <eventNode id=\"2\" name=\"Event\" variableName=\"MyVar\" >\n";
+        process2 += "      <eventFilters>\n";
+        process2 += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+        process2 += "      </eventFilters>\n";
+        process2 += "    </eventNode>\n";
+        process2 += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+        process2 += "    <end id=\"4\" name=\"End\" />\n";
+        process2 += "  </nodes>\n";
+        process2 += "\n";
+        process2 += "  <connections>\n";
+        process2 += "    <connection from=\"1\" to=\"3\" />\n";
+        process2 += "    <connection from=\"2\" to=\"3\" />\n";
+        process2 += "    <connection from=\"3\" to=\"4\" />\n";
+        process2 += "  </connections>\n";
+        process2 += "\n";
+        process2 += "</process>";
+        
+        kbuilder.add(ResourceFactory.newByteArrayResource(process2.getBytes()), ResourceType.DRF);
+
+        if (kbuilder.hasErrors()) {
+        	LOG.info("Errors while adding process rule 2. ", kbuilder.getErrors());
+        }
+
+		assertFalse(kbuilder.hasErrors());
+
+		KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+		// Add object model to classes array
+		List<String> allClasses = new ArrayList<String>(Arrays.asList(classNames));		
+		allClasses.add("org.drools.pipeline.camel.Person");
+
+		try {
+			jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClasses.toArray(new String[allClasses.size()]), kbase );
+		} catch (Exception e) {
+			LOG.info("Errors while creating JAXB Context. ", e);
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+
+		StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+		serviceManager.register(identifier, session);
+		return session;
+	}
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbXSDModelTest.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbXSDModelTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbXSDModelTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbXSDModelTest.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,289 @@
+package org.drools.camel.component;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.lang.reflect.Method;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.builder.help.KnowledgeBuilderHelper;
+import org.drools.command.runtime.BatchExecutionCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.common.InternalRuleBase;
+import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.io.ResourceFactory;
+import org.drools.rule.DroolsCompositeClassLoader;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+import com.sun.tools.xjc.Language;
+import com.sun.tools.xjc.Options;
+
+/**
+ * 
+ * @author Lucas Amador
+ * @author Pablo Nussembaum
+ *
+ */
+public class CamelEndpointWithJaxbXSDModelTest extends DroolsCamelTestSupport {
+
+	private JAXBContext jaxbContext;
+	private DroolsCompositeClassLoader classLoader;
+
+	public void testSessionInsert() throws Exception {
+		Class<?> personClass = classLoader.loadClass("org.drools.model.Person");
+		assertNotNull(personClass.getPackage());
+		Class<?> addressClass = classLoader.loadClass("org.drools.model.AddressType");
+		assertNotNull(addressClass.getPackage());
+		Object baunax = personClass.newInstance();
+		Object lucaz = personClass.newInstance();
+		
+		Method setName = personClass.getMethod("setName", String.class);
+		setName.invoke(baunax, "baunax");
+		setName.invoke(lucaz, "lucaz");
+
+		Method setAddress = personClass.getMethod("setAddress", addressClass);
+		Method setStreet = addressClass.getMethod("setStreet", String.class);
+		Method setPostalCode = addressClass.getMethod("setPostalCode", BigInteger.class);
+		Object lucazAddress = addressClass.newInstance();
+		setStreet.invoke(lucazAddress, "Unknow 342");
+		setPostalCode.invoke(lucazAddress, new BigInteger("1234"));
+		
+		Object baunaxAddress = addressClass.newInstance();
+		setStreet.invoke(baunaxAddress, "New Street 123");
+		setPostalCode.invoke(baunaxAddress, new BigInteger("5678"));
+		
+		setAddress.invoke(lucaz, lucazAddress);
+		setAddress.invoke(baunax, baunaxAddress);
+		
+		BatchExecutionCommand cmd = new BatchExecutionCommand();
+		cmd.setLookup("ksession1");
+		cmd.getCommands().add(new InsertObjectCommand(lucaz, "lucaz"));
+		cmd.getCommands().add(new InsertObjectCommand(baunax, "baunax"));
+		cmd.getCommands().add(new FireAllRulesCommand());
+		
+		StringWriter xmlReq = new StringWriter();
+		Marshaller marshaller = jaxbContext.createMarshaller();
+		marshaller.setProperty("jaxb.formatted.output", true);
+		marshaller.marshal(cmd, xmlReq);
+		
+		System.out.println(xmlReq.toString());
+		
+		String xmlCmd = "";
+		xmlCmd += "<batch-execution lookup='ksession1'>\n";
+		xmlCmd += "   <insert out-identifier='lucaz'>\n";
+		xmlCmd += "    <object>\n";
+		xmlCmd += "      <Person xmlns='http://drools.org/model' >\n";
+		xmlCmd += "         <name>lucaz</name>\n";
+		xmlCmd += "         <age>25</age>\n";
+		xmlCmd += "      </Person>\n";
+		xmlCmd += "    </object>\n";
+		xmlCmd += "   </insert>\n";
+		xmlCmd += "   <insert out-identifier='baunax'>\n";
+		xmlCmd += "    <object>\n";
+		xmlCmd += "      <Person xmlns='http://drools.org/model' >\n";
+		xmlCmd += "         <name>baunax</name>\n";
+		xmlCmd += "         <age>21</age>\n";
+		xmlCmd += "      </Person>\n";
+		xmlCmd += "    </object>\n";
+		xmlCmd += "   </insert>\n";
+		xmlCmd += "   <fire-all-rules />";
+		xmlCmd += "</batch-execution>\n";
+
+		byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
+		assertNotNull(xmlResp);
+		System.out.println(new String(xmlResp));
+
+		ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
+		assertNotNull(resp);
+		
+		assertEquals(2, resp.getIdentifiers().size());
+		assertNotNull(resp.getValue("lucaz"));
+		assertNotNull(resp.getValue("baunax"));
+		
+		assertNotNull(resp.getFactHandle("lucaz"));
+		assertNotNull(resp.getFactHandle("baunax"));
+	}
+	
+	@Override
+	protected RouteBuilder createRouteBuilder() throws Exception {
+		return new RouteBuilder() {
+			public void configure() throws Exception {
+				from("direct:test-with-session").to("drools:sm/ksession1?dataFormat=drools-jaxb");
+				from("direct:test-no-session").to("drools:sm?dataFormat=drools-jaxb");
+			}
+		};
+	}
+
+	@Override
+	protected void configureDroolsContext() {
+		String rule = "";
+		rule += "package org.drools \n";
+		rule += "import org.drools.model.Person \n";
+		rule += "global java.util.List list \n";
+		rule += "query persons \n";
+		rule += "   $p : Person(name != null) \n";
+		rule += "end \n";
+		rule += "query personWithName(String param)\n";
+		rule += "   $p : Person(name == param) \n";
+		rule += "end \n";
+		rule += "rule rule1 \n";
+		rule += "  when \n";
+		rule += "    $p : Person() \n";
+		rule += " \n";
+		rule += "  then \n";
+		rule += "    System.out.println(\"executed\"); \n";
+		rule += "end\n";
+
+		registerKnowledgeRuntime("ksession1", rule);
+	}
+
+	@Override
+	protected StatefulKnowledgeSession registerKnowledgeRuntime(String identifier, String rule) {
+		KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
+
+		Options xjcOpts = new Options();
+		xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+
+		String classNames[] = null;
+
+		try {
+			classNames = KnowledgeBuilderHelper.addXsdModel( ResourceFactory.newClassPathResource("personComplex.xsd", getClass()),
+					kbuilder,
+					xjcOpts,
+			"xsd" );
+		} catch (IOException e) {
+			LOG.error("Errors while adding xsd model. ", kbuilder.getErrors());
+		}
+
+		assertFalse( kbuilder.hasErrors() );
+
+		if (rule != null && rule.length() > 0) {
+			kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()), ResourceType.DRL);
+
+			if (kbuilder.hasErrors()) {
+				LOG.info("Errors while adding rule. ", kbuilder.getErrors());
+			}
+		}
+		
+		String process1 = "";
+        process1 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        process1 += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        process1 += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        process1 += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        process1 += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+        process1 += "\n";
+        process1 += "  <header>\n";
+        process1 += "    <imports>\n";
+        process1 += "      <import name=\"org.drools.model.Person\" />\n";
+        process1 += "    </imports>\n";
+        process1 += "    <globals>\n";
+        process1 += "      <global identifier=\"list\" type=\"java.util.List\" />\n";
+        process1 += "    </globals>\n";
+        process1 += "    <variables>\n";
+        process1 += "      <variable name=\"person\" >\n";
+        process1 += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"Person\" />\n";
+        process1 += "      </variable>\n";
+        process1 += "    </variables>\n";
+        process1 += "  </header>\n";
+        process1 += "\n";
+        process1 += "  <nodes>\n";
+        process1 += "    <start id=\"1\" name=\"Start\" />\n";
+        process1 += "    <actionNode id=\"2\" name=\"MyActionNode\" >\n";
+        process1 += "      <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Triggered\");\n";
+        process1 += "list.add(person.name);\n";
+        process1 += "</action>\n";
+        process1 += "    </actionNode>\n";
+        process1 += "    <end id=\"3\" name=\"End\" />\n";
+        process1 += "  </nodes>\n";
+        process1 += "\n";
+        process1 += "  <connections>\n";
+        process1 += "    <connection from=\"1\" to=\"2\" />\n";
+        process1 += "    <connection from=\"2\" to=\"3\" />\n";
+        process1 += "  </connections>\n" + "\n";
+        process1 += "</process>";
+        
+        kbuilder.add(ResourceFactory.newByteArrayResource(process1.getBytes()), ResourceType.DRF);
+
+        if (kbuilder.hasErrors()) {
+        	System.out.println("Errors while adding process rule 1. " + kbuilder.getErrors());
+        }
+
+		assertFalse(kbuilder.hasErrors());
+        
+        String process2 = "";
+        process2 += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        process2 += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        process2 += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        process2 += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        process2 += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+        process2 += "\n";
+        process2 += "  <header>\n";
+        process2 += "    <variables>\n";
+        process2 += "      <variable name=\"MyVar\" >\n";
+        process2 += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        process2 += "        <value>SomeText</value>\n";
+        process2 += "      </variable>\n";
+        process2 += "    </variables>\n";
+        process2 += "  </header>\n";
+        process2 += "\n";
+        process2 += "  <nodes>\n";
+        process2 += "    <start id=\"1\" name=\"Start\" />\n";
+        process2 += "    <eventNode id=\"2\" name=\"Event\" variableName=\"MyVar\" >\n";
+        process2 += "      <eventFilters>\n";
+        process2 += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+        process2 += "      </eventFilters>\n";
+        process2 += "    </eventNode>\n";
+        process2 += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+        process2 += "    <end id=\"4\" name=\"End\" />\n";
+        process2 += "  </nodes>\n";
+        process2 += "\n";
+        process2 += "  <connections>\n";
+        process2 += "    <connection from=\"1\" to=\"3\" />\n";
+        process2 += "    <connection from=\"2\" to=\"3\" />\n";
+        process2 += "    <connection from=\"3\" to=\"4\" />\n";
+        process2 += "  </connections>\n";
+        process2 += "\n";
+        process2 += "</process>";
+        
+        kbuilder.add(ResourceFactory.newByteArrayResource(process2.getBytes()), ResourceType.DRF);
+
+        if (kbuilder.hasErrors()) {
+        	LOG.info("Errors while adding process rule 2. ", kbuilder.getErrors());
+        }
+
+		assertFalse(kbuilder.hasErrors());
+
+		KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
+		
+		classLoader = ((InternalRuleBase) ((KnowledgeBaseImpl) kbase).getRuleBase()).getRootClassLoader();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+		// Add object model to classes array
+		List<String> allClasses = new ArrayList<String>(Arrays.asList(classNames));		
+
+		try {
+			jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClasses.toArray(new String[allClasses.size()]), kbase );
+		} catch (Exception e) {
+			LOG.info("Errors while creating JAXB Context. ", e);
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+
+		StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+		serviceManager.register(identifier, session);
+		return session;
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithMarshallersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithMarshallersTest.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithMarshallersTest.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -16,10 +16,7 @@
 package org.drools.camel.component;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.drools.command.CommandFactory;
-import org.drools.command.runtime.rule.GetObjectCommand;
 import org.drools.command.runtime.rule.InsertObjectCommand;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.pipeline.camel.Person;
 import org.drools.runtime.ExecutionResults;

Modified: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/DroolsCamelTestSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/DroolsCamelTestSupport.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/DroolsCamelTestSupport.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -38,8 +38,8 @@
 import org.slf4j.LoggerFactory;
 
 public abstract class DroolsCamelTestSupport extends ContextTestSupport {
-    private static final Logger LOG = LoggerFactory.getLogger(DroolsCamelTestSupport.class);
-    private ServiceManager serviceManager;
+	protected static final Logger LOG = LoggerFactory.getLogger(DroolsCamelTestSupport.class);
+    protected ServiceManager serviceManager;
 
     public void setServiceManager(ServiceManager serviceManager) {
         this.serviceManager = serviceManager;

Modified: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -140,10 +140,6 @@
 
         assertXMLEqual(expectedXml,
                 outXml);
-
-
-
-
     }
 
     public void testCamelPipelineWithVSMAndSpring() throws Exception {

Modified: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -5,25 +5,50 @@
 
 package org.drools.pipeline.camel;
 
+import javax.xml.bind.annotation.XmlRootElement;
+
 /**
- *
+ * 
  * @author salaboy
  */
+ at XmlRootElement
 public class Person {
-    private String name;
-    //private Address address;
+	private String name;
+	private Integer age;
 
-    public Person() {
-    }
+	public Person() {
+	}
 
+	public Person(String name) {
+		super();
+		this.name = name;
+	}
 
-    public String getName() {
-        return name;
-    }
+	public Person(String name, int age) {
+		super();
+		this.name = name;
+		this.age = age;
+	}
 
-    public void setName(String name) {
-        this.name = name;
-    }
+	public String getName() {
+		return name;
+	}
 
+	public void setName(String name) {
+		this.name = name;
+	}
 
+	public void setAge(Integer age) {
+		this.age = age;
+	}
+
+	public Integer getAge() {
+		return age;
+	}
+
+	@Override
+	public String toString() {
+		return "Person [age=" + age + ", name=" + name + "]";
+	}
+	
 }

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/resources/org)

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/resources/org/drools)

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/resources/org/drools/camel)

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component)

Deleted: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd
===================================================================
--- labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd	2010-02-16 23:42:19 UTC (rev 31699)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,24 +0,0 @@
-<xsd:schema 
-	xmlns:person="http://drools.org/model" 
-	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	targetNamespace="http://drools.org/model" 
-	elementFormDefault="qualified"
->
-
-	<xsd:complexType name="person">
-		<xsd:sequence>
-			<xsd:element name="name" type="xsd:string" />
-			<xsd:element name="age" type="xsd:integer" />
-			<xsd:element name="address" type="person:addressType" minOccurs="1" maxOccurs="1" />
-		</xsd:sequence>
-	</xsd:complexType>
-
-
-	<xsd:complexType name="addressType">	
-		<xsd:sequence>
-			<xsd:element name="street" type="xsd:string" />
-			<xsd:element name="postalCode" type="xsd:integer" />
-		</xsd:sequence>
-	</xsd:complexType>	
-
-</xsd:schema>
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/org/drools/camel/component/person.xsd	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,24 @@
+<xsd:schema 
+	xmlns:person="http://drools.org/model" 
+	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	targetNamespace="http://drools.org/model" 
+	elementFormDefault="qualified"
+>
+
+	<xsd:complexType name="person">
+		<xsd:sequence>
+			<xsd:element name="name" type="xsd:string" />
+			<xsd:element name="age" type="xsd:integer" />
+			<xsd:element name="address" type="person:addressType" minOccurs="1" maxOccurs="1" />
+		</xsd:sequence>
+	</xsd:complexType>
+
+
+	<xsd:complexType name="addressType">	
+		<xsd:sequence>
+			<xsd:element name="street" type="xsd:string" />
+			<xsd:element name="postalCode" type="xsd:integer" />
+		</xsd:sequence>
+	</xsd:complexType>	
+
+</xsd:schema>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/pom.xml	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/pom.xml	2010-02-17 02:09:43 UTC (rev 31701)
@@ -31,6 +31,16 @@
          <artifactId>jaxb-xjc</artifactId>
          <version>2.0.3</version>
       </dependency>
+      <dependency>
+      	<groupId>org.drools</groupId>
+      	<artifactId>drools-api</artifactId>
+      	<version>${project.version}</version>
+      </dependency>
+      <dependency>
+      	<groupId>xalan</groupId>
+		<artifactId>xalan</artifactId>
+		<version>2.7.1</version>
+	</dependency>
    </dependencies>
    <repositories>
       <repository>

Copied: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/CommandTranslator.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/CommandTranslator.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/CommandTranslator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/CommandTranslator.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,228 @@
+package org.drools.runtime.pipeline.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import org.drools.command.Setter;
+import org.drools.command.impl.GenericCommand;
+import org.drools.command.runtime.BatchExecutionCommand;
+import org.drools.command.runtime.SetGlobalCommand;
+import org.drools.command.runtime.process.SignalEventCommand;
+import org.drools.command.runtime.process.StartProcessCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.runtime.rule.InsertElementsCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.command.runtime.rule.ModifyCommand;
+import org.drools.command.runtime.rule.QueryCommand;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * 
+ * @author Wolfgang Laun
+ */
+public class CommandTranslator {
+	private Map<Class<?>, CommandTransformer> class2trans;
+
+	public CommandTranslator(){
+		class2trans = new HashMap<Class<?>, CommandTransformer>();
+		class2trans.put(BatchExecutionCommand.class,   new BatchExecutionTransformer());
+		class2trans.put(InsertElementsCommand.class,   new InsertElementsTransformer());
+		class2trans.put(InsertObjectCommand.class,     new InsertObjectTransformer());
+		class2trans.put(ModifyCommand.class,     	   new ModifyObjectTransformer());
+		class2trans.put(QueryCommand.class,            new QueryTransformer());
+		class2trans.put(SetGlobalCommand.class,        new SetGlobalTransformer());
+		class2trans.put(SignalEventCommand.class,      new SignalEventTransformer());
+		class2trans.put(StartProcessCommand.class,     new StartProcessTransformer());
+		class2trans.put(FireAllRulesCommand.class,     new FireAllRulesTransformer());
+	}
+
+	/**
+	 * Transforms a list of XML elements representing Drools command objects
+	 * to a list of <tt>Command&lt;?&gt;</tt> objects. Application objects
+	 * are unmarshalled, using an <tt>Unmarshaller</tt> object derived from
+	 * the object's class.
+	 * 
+	 * @param xmlCmds the list of XML elements representing Drools command objects
+	 * @return 
+	 * @return a list of <tt>Command&lt;?&gt;</tt> objects
+	 */
+	public GenericCommand<?> transform(BatchExecutionCommand batchExecution, Unmarshaller unmarshaller) {
+		CommandTransformer commandTransformer = class2trans.get(batchExecution.getClass());
+		return commandTransformer.transform(this, batchExecution, unmarshaller);
+	}
+
+	protected CommandTransformer getCommandTransformer(Class<?> clazz) {
+		return class2trans.get(clazz);
+	}
+
+	protected Object makeObject(Node node, Unmarshaller unmarshaller) {        
+		Object obj = null;
+		try {
+			obj = unmarshaller.unmarshal(node);
+		} catch (JAXBException e) {
+			// TODO: remove this
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+		return obj;
+	}
+}
+
+
+/**
+ * Abstract base class for all command transformers.
+ */
+abstract class CommandTransformer {
+	abstract GenericCommand<?> transform(CommandTranslator ct, Object o , Unmarshaller unmarshaller);
+}
+
+/**
+ * Class for transforming a BatchExecution command.
+ */
+class BatchExecutionTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator cmdTrans, Object o , Unmarshaller unmarshaller) {
+		BatchExecutionCommand be = (BatchExecutionCommand)o;
+		List<GenericCommand<?>> xmlCmds = be.getCommands();
+		for (ListIterator<GenericCommand<?>> i = xmlCmds.listIterator(); i.hasNext();) {
+			GenericCommand<?> cmd = i.next();
+			CommandTransformer ct = cmdTrans.getCommandTransformer(cmd.getClass());
+			if (ct != null) {
+				i.set(ct.transform(cmdTrans, cmd, unmarshaller));
+			}
+		}
+		return be;
+	}
+}
+
+/**
+ * Class for transforming an InsertElements command.
+ */
+class InsertElementsTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		InsertElementsCommand insertElementsCmd = (InsertElementsCommand)o;
+		List<Object> objectsList = new ArrayList<Object>(insertElementsCmd.getObjects().size());
+		
+		for (Object obj : insertElementsCmd.getObjects()) {
+			if (obj instanceof Node) {
+				objectsList.add(ct.makeObject((Node) obj, unmarshaller));
+			} else {
+				objectsList.add(obj);
+			}
+		}
+
+		insertElementsCmd.setObjects(objectsList);
+		return insertElementsCmd;
+	}
+}
+
+/**
+ * Class for transforming a InsertObject command.
+ */
+class InsertObjectTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		InsertObjectCommand io = (InsertObjectCommand)o;
+		Object object = io.getObject();
+		if (object instanceof Element) {
+			Element el = (Element)object;
+			Object obj = ct.makeObject(el , unmarshaller);
+			io.setObject(obj);
+		}
+		return io;
+	}
+}
+
+/**
+ * Class for transforming a ModifyObject command.
+ */
+class ModifyObjectTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		ModifyCommand mo = (ModifyCommand)o;
+		List<Setter> setters = mo.getSetters();
+		List<Setter> convertedSetters = new ArrayList<Setter>();
+		for (Object node : setters) {
+			Setter setter = (Setter) ct.makeObject((Node)node, unmarshaller);
+			convertedSetters.add(setter);
+		}
+		mo.setSetters(convertedSetters);
+		return mo;
+	}
+}
+
+/**
+ * Class for transforming a FireAllRules command.
+ */
+class FireAllRulesTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		return (FireAllRulesCommand)o;
+	}
+}
+
+/**
+ * Class for transforming a Query command.
+ */
+class QueryTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		QueryCommand q = (QueryCommand)o;
+		for (ListIterator<Object> i = q.getArguments().listIterator(); i.hasNext();) {
+			Object object = i.next();
+			if (object instanceof Element) {
+				i.set(ct.makeObject((Element) object, unmarshaller));
+			}
+		}
+		return q;
+	}
+}
+
+/**
+ * Class for transforming a SetGlobal command.
+ */
+class SetGlobalTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		SetGlobalCommand sg = (SetGlobalCommand)o;
+		Object object = sg.getObject();
+		if (object instanceof Element) {
+			Element el = (Element)object;
+			Object obj = ct.makeObject(el , unmarshaller);
+			sg.setObject(obj);
+		}
+		return sg;
+	}
+}
+
+/**
+ * Class for transforming a SignalEvent command.
+ */
+class SignalEventTransformer extends CommandTransformer {
+	public GenericCommand<?> transform(CommandTranslator ct, Object o, Unmarshaller unmarshaller) {
+		SignalEventCommand se = (SignalEventCommand)o;
+		Object ev = se.getEvent();
+		if (ev != null) {
+			Object obj = ct.makeObject((Element)ev , unmarshaller);
+			se.setEvent(obj);
+		}
+		return se;
+	}
+}
+
+/**
+ * Class for transforming a StartProcess command.
+ */
+class StartProcessTransformer extends CommandTransformer {
+	public GenericCommand<?> transform( CommandTranslator ct, Object o, Unmarshaller unmarshaller ) {
+		StartProcessCommand sp = (StartProcessCommand)o;
+		for (Map.Entry<String, Object> entry: sp.getParameters().entrySet()) {
+			Object obj = entry.getValue();
+			if (obj instanceof Element) {
+				entry.setValue(ct.makeObject((Element) obj, unmarshaller));
+			}
+		}
+		return sp;
+	}
+}

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -24,21 +24,33 @@
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 
 import org.drools.KnowledgeBase;
-import org.drools.RuleBase;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.help.DroolsJaxbHelperProvider;
 import org.drools.builder.impl.KnowledgeBuilderImpl;
+import org.drools.command.runtime.BatchExecutionCommand;
+import org.drools.command.runtime.GetGlobalCommand;
+import org.drools.command.runtime.SetGlobalCommand;
+import org.drools.command.runtime.process.AbortWorkItemCommand;
+import org.drools.command.runtime.process.SignalEventCommand;
+import org.drools.command.runtime.process.StartProcessCommand;
+import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.command.runtime.rule.InsertElementsCommand;
+import org.drools.command.runtime.rule.InsertObjectCommand;
+import org.drools.command.runtime.rule.ModifyCommand;
+import org.drools.command.runtime.rule.QueryCommand;
+import org.drools.command.runtime.rule.RetractCommand;
+import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.DisconnectedFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageRegistry;
@@ -46,6 +58,10 @@
 import org.drools.io.Resource;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.runtime.impl.BatchExecutionImpl;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.xml.jaxb.util.JaxbListWrapper;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXParseException;
 
@@ -57,11 +73,32 @@
 import com.sun.tools.xjc.ModelLoader;
 import com.sun.tools.xjc.Options;
 import com.sun.tools.xjc.model.Model;
-import com.sun.tools.xjc.outline.Outline;
 
 public class DroolsJaxbHelperProviderImpl
     implements
     DroolsJaxbHelperProvider {
+	
+	private static final String[] JAXB_ANNOTATED_CMD = {BatchExecutionCommand.class.getName(),
+														SetGlobalCommand.class.getName(),
+														GetGlobalCommand.class.getName(),
+														FireAllRulesCommand.class.getName(),
+														InsertElementsCommand.class.getName(),
+														InsertObjectCommand.class.getName(),
+														ModifyCommand.class.getName(),
+														SetterImpl.class.getName(),
+														QueryCommand.class.getName(),
+														RetractCommand.class.getName(),
+														AbortWorkItemCommand.class.getName(),
+														SignalEventCommand.class.getName(),
+														StartProcessCommand.class.getName(),
+														BatchExecutionImpl.class.getName(),
+														ExecutionResultImpl.class.getName() ,
+														DefaultFactHandle.class.getName(),
+														JaxbListWrapper.class.getName(),
+														DisconnectedFactHandle.class.getName(),
+														FlatQueryResults.class.getName()
+														};
+	
     public String[] addXsdModel(Resource resource,
                              KnowledgeBuilder kbuilder,
                              Options xjcOpts,
@@ -86,17 +123,18 @@
                                         new JCodeModel(),
                                         errorReceiver );
 
-        final Outline outline = model.generateCode( xjcOpts,
-                                                    errorReceiver );
+        model.generateCode( xjcOpts, errorReceiver );
 
         MapVfsCodeWriter codeWriter = new MapVfsCodeWriter();
         model.codeModel.build( xjcOpts.createCodeWriter( codeWriter ) );
 
-        Set<JavaDialect> dialects = new HashSet<JavaDialect>();
         List<String> classNames = new ArrayList<String>();
         for ( Entry<String, byte[]> entry : codeWriter.getMap().entrySet() ) {
             String name = entry.getKey();
-
+            //if (name.endsWith("ObjectFactory.java")) {
+            //	continue;
+            //}
+            
             String pkgName = null;
             int dotPos = name.lastIndexOf( '.' );
             pkgName = name.substring( 0,
@@ -119,7 +157,6 @@
             }
 
             JavaDialect dialect = (JavaDialect) pkgReg.getDialectCompiletimeRegistry().getDialect( "java" );
-            dialects.add( dialect );
             dialect.addSrc( convertToResource( entry.getKey() ),
                             entry.getValue() );
         }
@@ -127,7 +164,7 @@
         pkgBuilder.compileAll();
         pkgBuilder.updateResults();
 
-        return (String[]) classNames.toArray( new String[classNames.size()] );
+        return classNames.toArray( new String[classNames.size()] );
     }
 
     public JAXBContext newJAXBContext(String[] classNames,
@@ -140,21 +177,24 @@
     public JAXBContext newJAXBContext(String[] classNames,
                                       Map<String, ? > properties,
                                       KnowledgeBase kbase) throws JAXBException {
-        ClassLoader classLoader = ((InternalRuleBase) ((KnowledgeBaseImpl) kbase).getRuleBase()).getRootClassLoader();
-
-        Class[] classes = new Class[classNames.length];
-        int i = 0;
-        try {
-            for ( i = 0; i < classNames.length; i++ ) {
-                classes[i] = classLoader.loadClass( classNames[i] );
-            }
-        } catch ( ClassNotFoundException e ) {
-            throw new JAXBException( "Unable to resolve class '" + classNames[i] + "'",
-                                     e );
-        }
-
-        return JAXBContext.newInstance( classes,
-                                        properties );
+		ClassLoader classLoader = ((InternalRuleBase) ((KnowledgeBaseImpl) kbase)
+				.getRuleBase()).getRootClassLoader();
+		int i = 0;
+		try {
+			Class<?>[] classes = new Class[classNames.length
+					+ JAXB_ANNOTATED_CMD.length];
+			
+			for (i = 0; i < classNames.length; i++) {
+				classes[i] = classLoader.loadClass(classNames[i]);
+			}
+			int j = 0;
+			for (i = classNames.length; i < classes.length; i++, j++) {
+				classes[i] = classLoader.loadClass(JAXB_ANNOTATED_CMD[j]);
+			}
+			return JAXBContext.newInstance(classes, properties);
+		} catch (ClassNotFoundException e) {
+			throw new JAXBException("Unable to resolve class '" + classNames[i] + "'", e);
+		}        
     }
 
     private static String convertToResource(String string) {

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbFromXmlTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbFromXmlTransformer.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbFromXmlTransformer.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,63 +1,61 @@
-package org.drools.runtime.pipeline.impl;
-
-import java.io.File;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
-
-import org.drools.io.Resource;
-import org.drools.runtime.pipeline.PipelineContext;
-import org.drools.runtime.pipeline.Transformer;
-import org.drools.runtime.pipeline.impl.BaseEmitter;
-import org.drools.runtime.pipeline.impl.BaseStage;
-import org.xml.sax.InputSource;
-
-public class JaxbFromXmlTransformer extends BaseEmitter
-    implements
-    Transformer {
-    private Unmarshaller            unmarshaller;
-
-    public JaxbFromXmlTransformer(Unmarshaller unmarshaller) {
-        this.unmarshaller = unmarshaller;
-    }
-
-    public void receive(Object object,
-                       PipelineContext context) {
-        Object result = null;
-        try {
-            if ( object instanceof File ) {
-                result = this.unmarshaller.unmarshal( (File) object );
-            } else if ( object instanceof InputStream ) {
-                result = this.unmarshaller.unmarshal( (InputStream) object );
-            } else if ( object instanceof Reader ) {
-                result = this.unmarshaller.unmarshal( (Reader) object );
-            } else if ( object instanceof Source ) {
-                result = this.unmarshaller.unmarshal( (Source) object );
-            } else if ( object instanceof InputSource ) {
-                result = this.unmarshaller.unmarshal( (InputSource) object );
-            }  else if ( object instanceof Resource ) {
-                result = this.unmarshaller.unmarshal( (( Resource ) object).getReader() );
-            }  else if ( object instanceof String ) {
-                result = this.unmarshaller.unmarshal( new StringReader( ( String ) object ) );
-            } else {
-                throw new IllegalArgumentException( "signal object must be instance of File, InputStream, Reader, Source, InputSource, Resource, String" );
-            }
-        } catch ( Exception e ) {
-            handleException( this,
-                             object,
-                             e );
-        }
-        
-        if ( result instanceof JAXBElement ) {
-            result = ((JAXBElement) object).getValue();
-        }
-        
-        emit( result,
-              context );
-    }
-
-}
+package org.drools.runtime.pipeline.impl;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.Source;
+
+import org.drools.io.Resource;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.Transformer;
+import org.xml.sax.InputSource;
+
+public class JaxbFromXmlTransformer extends BaseEmitter
+    implements
+    Transformer {
+    private Unmarshaller            unmarshaller;
+
+    public JaxbFromXmlTransformer(Unmarshaller unmarshaller) {
+        this.unmarshaller = unmarshaller;
+    }
+
+    public void receive(Object object,
+                       PipelineContext context) {
+        Object result = null;
+        try {
+            if ( object instanceof File ) {
+                result = this.unmarshaller.unmarshal( (File) object );
+            } else if ( object instanceof!
  InputStream ) {
+                result = this.unmarshaller.unmarshal( (InputStream) object );
+            } else if ( object instanceof Reader ) {
+                result = this.unmarshaller.unmarshal( (Reader) object );
+            } else if ( object instanceof Source ) {
+                result = this.unmarshaller.unmarshal( (Source) object );
+            } else if ( object instanceof InputSource ) {
+                result = this.unmarshaller.unmarshal( (InputSource) object );
+            }  else if ( object instanceof Resource ) {
+                result = this.unmarshaller.unmarshal( (( Resource ) object).getReader() );
+            }  else if ( object instanceof String ) {
+                result = this.unmarshaller.unmarshal( new StringReader( ( String ) object ) );
+            } else {
+                throw new IllegalArgumentException( "signal object must be instance of File, InputStream, Reader, Source, InputSource, Resource, String" );
+            }
+   !
      } catch ( Exception e ) {
+            handleException( t!
 his,
+  
                           object,
+                             e );
+        }
+        
+        if ( result instanceof JAXBElement ) {
+            result = ((JAXBElement) object).getValue();
+        }
+        
+        emit( result,
+              context );
+    }
+
+}
Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbToXmlTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbToXmlTransformer.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/JaxbToXmlTransformer.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -1,22 +1,11 @@
 package org.drools.runtime.pipeline.impl;
 
-import java.io.File;
-import java.io.InputStream;
-import java.io.Reader;
 import java.io.StringWriter;
 
-import javax.xml.bind.JAXBElement;
 import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.transform.Source;
 
-import org.drools.io.Resource;
-import org.drools.runtime.pipeline.JaxbTransformerProvider;
 import org.drools.runtime.pipeline.PipelineContext;
 import org.drools.runtime.pipeline.Transformer;
-import org.drools.runtime.pipeline.impl.BaseEmitter;
-import org.drools.runtime.pipeline.impl.BaseStage;
-import org.xml.sax.InputSource;
 
 public class JaxbToXmlTransformer extends BaseEmitter
     implements

Copied: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ListMapping.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ListMapping.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ListMapping.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ListMapping.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,86 @@
+package org.drools.runtime.pipeline.impl;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+public class ListMapping {
+
+	public static void main(String[] args) throws Exception {
+		Object asd = new Person("lucaz");
+		Field fieldName = asd.getClass().getDeclaredField("name");
+		fieldName.setAccessible(true);
+		String fieldValue = (String) fieldName.get(asd);
+		System.out.println("fieldValue = " + fieldValue);
+
+//		Object object = fieldName.get(asd);
+//		System.out.println(object);
+
+//		Course course = new Course();
+//		
+//		course.addPerson(new Person("lucas"));
+//		course.addPerson(new Person("jose"));
+//		
+//		Class<?>[] classes = {Person.class, Course.class};
+//		
+//		JAXBContext jaxb = JAXBContext.newInstance(classes);
+//
+//		Marshaller xmlConverter = jaxb.createMarshaller();
+//		xmlConverter.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+//		xmlConverter.marshal(course, System.out);
+		
+	}
+
+}
+
+ at XmlRootElement
+
+class Course {
+	
+//	@XmlElementWrapper(name="persons")
+	@XmlElement(name="person")
+	private List<Person> persons = new ArrayList<Person>();
+	
+	public Course() {
+	}
+	
+	public void addPerson(Person person) {
+		persons.add(person);
+	}
+	
+	public List<Person> getPersons() {
+		return this.persons;
+	}
+	
+}
+
+ at XmlRootElement(name="person")
+class Person {
+
+	@XmlAttribute
+	private String name;
+	
+	public Person() {
+	}
+	
+	public Person(String name) {
+		this.setName(name);
+	}
+	
+	@Override
+	public String toString() {
+		return getName();
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+}

Copied: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ResultTranslator.java (from rev 31699, labs/jbossrules/branches/camel_jaxb_marshaller2-lucaz/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ResultTranslator.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ResultTranslator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/src/main/java/org/drools/runtime/pipeline/impl/ResultTranslator.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -0,0 +1,96 @@
+package org.drools.runtime.pipeline.impl;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.transform.TransformerException;
+
+import org.drools.FactHandle;
+import org.drools.base.ClassObjectType;
+import org.drools.base.DroolsQuery;
+import org.drools.common.DisconnectedFactHandle;
+import org.drools.rule.Declaration;
+import org.drools.runtime.impl.ExecutionResultImpl;
+import org.drools.runtime.rule.QueryResultsRow;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.runtime.rule.impl.NativeQueryResults;
+import org.drools.spi.ObjectType;
+import org.drools.xml.jaxb.util.JaxbListWrapper;
+
+public class ResultTranslator {
+
+	private Object convert(Object obj) {
+		if (obj instanceof FactHandle && !(obj instanceof DisconnectedFactHandle)) {
+			return new DisconnectedFactHandle(((FactHandle) obj).toExternalForm());
+		}
+		
+		if (obj instanceof NativeQueryResults) {
+			NativeQueryResults nativeQueryResults = (NativeQueryResults) obj;
+            List<Declaration> declrs = new ArrayList<Declaration>();
+            HashMap<String, Integer> identifiers = new HashMap<String, Integer>(  );
+            
+            for ( String identifier : nativeQueryResults.getIdentifiers() ) {
+            	// we don't want to marshall the query parameters
+            	Declaration declr = nativeQueryResults.getDeclarations().get( identifier );
+            	ObjectType objectType = declr.getPattern().getObjectType();
+            	if ( objectType instanceof ClassObjectType &&
+            		((ClassObjectType) objectType).getClassType() == DroolsQuery.class ) {
+            			continue;
+            	}
+            	declrs.add(declr);
+            	identifiers.put(identifier, declrs.size() - 1);
+            }
+            
+            ArrayList<ArrayList<Object>> results = new ArrayList<ArrayList<Object>>( nativeQueryResults.size() );
+            ArrayList<ArrayList<org.drools.runtime.rule.FactHandle>> factHandles = new ArrayList<ArrayList<org.drools.runtime.rule.FactHandle>> ( nativeQueryResults.size() );
+            for (QueryResultsRow row : nativeQueryResults) {
+            	ArrayList<Object> objectList = new ArrayList<Object>();
+                ArrayList<org.drools.runtime.rule.FactHandle> factHandleList = new ArrayList<org.drools.runtime.rule.FactHandle>();
+                for (int i = 0; i < declrs.size(); i++) {
+                	objectList.add(convert(row.get(declrs.get(i).getIdentifier())));
+                	factHandleList.add(new DisconnectedFactHandle(row.getFactHandle(declrs.get(i).getIdentifier()).toExternalForm()));
+                }                
+            	factHandles.add(factHandleList);
+                results.add(objectList);
+            }
+
+            return new FlatQueryResults(identifiers, results, factHandles);
+		}
+		
+		Class<? extends Object> vClass = obj.getClass();
+		if (List.class.isAssignableFrom(vClass) && !JaxbListWrapper.class.equals(vClass)) {
+			JaxbListWrapper<Object> wrapper = new JaxbListWrapper<Object>(((List<?>) obj).size());
+			for (Object item : ((List<?>) obj)) {
+				wrapper.add(convert(item));
+			}
+			return wrapper;
+		}
+		return obj;
+	}
+	
+	public String transform( ExecutionResultImpl executionResult, Marshaller marshaller ) throws JAXBException, TransformerException{
+
+		//TODO {bauna} remove this try
+		try {
+			StringWriter writer = new StringWriter();
+			for (Map.Entry<String, Object> entry : executionResult.getFactHandles().entrySet()) {
+				entry.setValue(convert(entry.getValue()));
+			}
+			
+			for (Map.Entry<String, Object> entry : executionResult.getResults().entrySet()) {
+				entry.setValue(convert(entry.getValue()));
+			}
+			marshaller.marshal(executionResult, writer);
+			return writer.toString();
+		} catch (Throwable e) {
+			e.printStackTrace();
+			throw new RuntimeException(e);
+		}
+	}
+	
+}

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java	2010-02-17 01:37:27 UTC (rev 31700)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java	2010-02-17 02:09:43 UTC (rev 31701)
@@ -3,14 +3,10 @@
 import java.io.InputStream;
 import java.io.Reader;
 
-import javax.xml.transform.Source;
-
 import org.drools.io.Resource;
 import org.drools.runtime.pipeline.PipelineContext;
-import org.drools.runtime.pipeline.SmooksTransformerProvider;
 import org.drools.runtime.pipeline.Transformer;
-import org.drools.runtime.pipeline.XStreamTransformerProvider;
-import org.drools.runtime.pipeline.impl.BaseEmitter;
+
 import com.thoughtworks.xstream.XStream;
 
 public class XStreamFromXmlTransformer extends BaseEmitter



More information about the jboss-svn-commits mailing list