[jboss-svn-commits] JBL Code SVN: r34243 - in labs/jbossrules/trunk: drools-camel/src/test/java/org/drools/camel/component and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 28 01:26:11 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-07-28 01:26:10 -0400 (Wed, 28 Jul 2010)
New Revision: 34243

Modified:
   labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java
   labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java
Log:
JBRULES-2347 Camel
-refactoring xstream usage to use shared implementation in core
-moved xstreambatchexecutiontest to camel and updated it to use camel pipeline

Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java	2010-07-28 04:39:28 UTC (rev 34242)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java	2010-07-28 05:26:10 UTC (rev 34243)
@@ -17,58 +17,36 @@
 package org.drools.camel.component;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 import org.apache.camel.model.dataformat.XStreamDataFormat;
-import org.drools.command.Command;
-import org.drools.command.CommandFactory;
-import org.drools.command.Setter;
-import org.drools.command.impl.GenericCommand;
-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.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.GetObjectsCommand;
-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.common.DefaultFactHandle;
-import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.help.impl.CommandsObjectContainer;
 import org.drools.runtime.help.impl.ObjectsObjectContainer;
 import org.drools.runtime.help.impl.ParameterContainer;
 import org.drools.runtime.help.impl.RowItemContainer;
 import org.drools.runtime.help.impl.WorkItemResultsContainer;
-import org.drools.runtime.impl.ExecutionResultImpl;
-import org.drools.runtime.rule.FactHandle;
-import org.drools.runtime.rule.QueryResults;
-import org.drools.runtime.rule.QueryResultsRow;
-import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.runtime.help.impl.XStreamJSon.CommandsContainerConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonAbortWorkItemConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonBatchExecutionCommandConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonBatchExecutionResultConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonCompleteWorkItemConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonFactHandleConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonFireAllRulesConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonGetGlobalConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonGetObjectConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonGetObjectsConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonInsertConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonInsertElementsConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonModifyConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonQueryConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonQueryResultsConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonRetractConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonSetGlobalConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonSignalEventConverter;
+import org.drools.runtime.help.impl.XStreamJSon.JSonStartProcessConvert;
+import org.drools.runtime.help.impl.XStreamJSon.RowItemConverter;
 
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.converters.Converter;
-import com.thoughtworks.xstream.converters.MarshallingContext;
-import com.thoughtworks.xstream.converters.UnmarshallingContext;
-import com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter;
-import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
-import com.thoughtworks.xstream.core.util.HierarchicalStreams;
-import com.thoughtworks.xstream.io.ExtendedHierarchicalStreamWriterHelper;
-import com.thoughtworks.xstream.io.HierarchicalStreamReader;
-import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.mapper.Mapper;
 
-
 public class XStreamJson {
     public static XStreamDataFormat newJSonMarshaller(XStreamDataFormat xstreamDataFormat) {        
         xstreamDataFormat.setDriver( "json" );
@@ -119,1266 +97,4 @@
         return xstreamDataFormat;
     }
 
-    public static class CommandsContainerConverter extends AbstractCollectionConverter {
-        public CommandsContainerConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public boolean canConvert(Class type) {
-            return CommandsObjectContainer.class.isAssignableFrom( type );
-
-        }
-
-        @Override
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            CommandsObjectContainer container = (CommandsObjectContainer) object;
-
-            writeItem( container.getContainedObject(),
-                       context,
-                       writer );
-        }
-
-        @Override
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            throw new UnsupportedOperationException();
-        }
-
-    }
-
-    public static class RowItemConverter extends AbstractCollectionConverter {
-        public RowItemConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public boolean canConvert(Class type) {
-            return RowItemContainer.class.isAssignableFrom( type );
-
-        }
-
-        @Override
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            RowItemContainer container = (RowItemContainer) object;
-
-            writer.startNode( "external-form" );
-            writer.setValue( container.getFactHandle().toExternalForm() );
-            writer.endNode();
-
-            writer.startNode( "object" );
-            writeItem( container.getObject(),
-                       context,
-                       writer );
-            writer.endNode();
-        }
-
-        @Override
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String externalForm = null;
-            Object object = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "external-form".equals( nodeName ) ) {
-                    externalForm = reader.getValue();
-                } else if ( "object".equals( nodeName ) ) {
-                    reader.moveDown();
-                    object = readItem( reader,
-                                       context,
-                                       null );
-                    reader.moveUp();
-                }
-                reader.moveUp();
-            }
-            return new RowItemContainer( new DefaultFactHandle( externalForm ),
-                                         object );
-        }
-
-    }
-
-    //    public static class ModifyEntriesContainerConverter extends AbstractCollectionConverter {
-    //        public ModifyEntriesContainerConverter(Mapper mapper) {
-    //            super( mapper );
-    //        }
-    //
-    //        public boolean canConvert(Class type) {
-    //            return ModifyEntriesContainer.class.isAssignableFrom( type );
-    //
-    //        }
-    //
-    //        @Override
-    //        public void marshal(Object object,
-    //                            HierarchicalStreamWriter writer,
-    //                            MarshallingContext context) {
-    //            ModifyEntriesContainer container = (ModifyEntriesContainer) object;
-    //
-    //            writer.startNode( "accessor" );
-    //            writer.setValue( container.getAccessor() );
-    //            writer.endNode();
-    //            
-    //            writer.startNode( "value" );
-    //            writer.setValue( container.getValue() );
-    //            writer.endNode();
-    //        }
-    //
-    //        @Override
-    //        public Object unmarshal(HierarchicalStreamReader reader,
-    //                                UnmarshallingContext context) {
-    //            throw new UnsupportedOperationException();
-    //        }
-    //
-    //    }    
-
-    public static class JSonBatchExecutionCommandConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonBatchExecutionCommandConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            BatchExecutionCommand cmds = (BatchExecutionCommand) object;
-            if ( cmds.getLookup() != null ) {
-                writer.startNode( "lookup" );
-                writer.setValue( cmds.getLookup() );
-                writer.endNode();
-            }
-            List<GenericCommand< ? >> list = cmds.getCommands();
-
-            for ( GenericCommand cmd : list ) {
-                writeItem( new CommandsObjectContainer( cmd ),
-                           context,
-                           writer );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            List<GenericCommand< ? >> list = new ArrayList<GenericCommand< ? >>();
-            String lookup = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                if ( "commands".equals( reader.getNodeName() ) ) {
-                    while ( reader.hasMoreChildren() ) {
-                        reader.moveDown();
-                        GenericCommand cmd = (GenericCommand) readItem( reader,
-                                                                        context,
-                                                                        null );
-                        list.add( cmd );
-                        reader.moveUp();
-                    }
-                } else if ( "lookup".equals( reader.getNodeName() ) ) {
-                    lookup = reader.getValue();
-                } else {
-                    throw new IllegalArgumentException( "batch-execution does not support the child element name=''" + reader.getNodeName() + "' value=" + reader.getValue() + "'" );
-                }
-                reader.moveUp();
-            }
-            return new BatchExecutionCommand( list,
-                                              lookup );
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( BatchExecutionCommand.class );
-        }
-    }
-
-    public static class JSonInsertConverter extends BaseConverter
-        implements
-        Converter {
-
-        public JSonInsertConverter(XStream xstream) {
-            super( xstream );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            InsertObjectCommand cmd = (InsertObjectCommand) object;
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-
-                writer.startNode( "return-object" );
-                writer.setValue( Boolean.toString( cmd.isReturnObject() ) );
-                writer.endNode();
-            }
-            writeValue( writer,
-                        context,
-                        "object",
-                        cmd.getObject() );
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            InsertObjectCommand cmd = new InsertObjectCommand();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "out-identifier".equals( nodeName ) ) {
-                    cmd.setOutIdentifier( reader.getValue() );
-                } else if ( "return-object".equals( nodeName ) ) {
-                    cmd.setReturnObject( Boolean.parseBoolean( reader.getValue() ) );
-                } else if ( "object".equals( nodeName ) ) {
-                    cmd.setObject( readValue( reader,
-                                              context,
-                                              cmd.getObject(),
-                                              "object" ) );
-                }
-                reader.moveUp();
-
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( InsertObjectCommand.class );
-        }
-
-    }
-
-    public static class JSonFactHandleConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-        public JSonFactHandleConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public boolean canConvert(Class aClass) {
-            return FactHandle.class.isAssignableFrom( aClass );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext marshallingContext) {
-            FactHandle fh = (FactHandle) object;
-            writer.startNode( "external-form" );
-            writer.setValue( fh.toExternalForm() );
-            writer.endNode();
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext unmarshallingContext) {
-            reader.moveDown();
-            DefaultFactHandle factHandle = new DefaultFactHandle( reader.getValue() );
-            reader.moveUp();
-            return factHandle;
-        }
-    }
-
-    public static class JSonFireAllRulesConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonFireAllRulesConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            FireAllRulesCommand cmd = (FireAllRulesCommand) object;
-
-            if ( cmd.getMax() != -1 ) {
-                writer.startNode( "max" );
-                writer.setValue( Integer.toString( cmd.getMax() ) );
-                writer.endNode();
-            }
-            
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String max = null;
-            String outIdentifier = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                if ( "max".equals( reader.getNodeName() ) ) {
-                    max = reader.getValue();
-                } else if ( "out-identifier".equals( reader.getNodeName() ) ) {
-                    outIdentifier = reader.getValue();
-                } else {
-                    throw new IllegalArgumentException( "fire-all-rules does not support the child element name=''" + reader.getNodeName() + "' value=" + reader.getValue() + "'" );
-                }
-                reader.moveUp();
-            }
-
-            FireAllRulesCommand cmd = null;
-
-            if ( max != null ) {
-                cmd = new FireAllRulesCommand( Integer.parseInt( max ) );
-            } else {
-                cmd = new FireAllRulesCommand();
-            }
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier(outIdentifier);
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( FireAllRulesCommand.class );
-        }
-    }
-
-    public static class JSonGetObjectConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonGetObjectConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetObjectCommand cmd = (GetObjectCommand) object;
-            writer.startNode( "fact-handle" );
-            writer.setValue( cmd.getFactHandle().toExternalForm() );
-            writer.endNode();
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = null;
-            String outIdentifier = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String name = reader.getNodeName();
-                if ( "fact-handle".equals( name ) ) {
-                    factHandle = new DefaultFactHandle( reader.getValue() );
-                } else if ( "out-identifier".equals( "out-identifier" ) ) {
-                    outIdentifier = reader.getValue();
-                }
-                reader.moveUp();
-            }
-
-            GetObjectCommand cmd = new GetObjectCommand( factHandle );
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier( outIdentifier );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetObjectCommand.class );
-        }
-    }
-
-    public static class JSonRetractConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonRetractConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            RetractCommand cmd = (RetractCommand) object;
-            writer.startNode( "fact-handle" );
-            writer.setValue( cmd.getFactHandle().toExternalForm() );
-            writer.endNode();
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            FactHandle factHandle = new DefaultFactHandle( reader.getValue() );
-            reader.moveUp();
-
-            Command cmd = CommandFactory.newRetract( factHandle );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( RetractCommand.class );
-        }
-    }
-
-    public static class JSonModifyConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonModifyConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            ModifyCommand cmd = (ModifyCommand) object;
-
-            writer.startNode( "fact-handle" );
-            writer.setValue( cmd.getFactHandle().toExternalForm() );
-            writer.endNode();
-
-            List<Setter> setters = cmd.getSetters();
-            for ( Setter setter : setters ) {
-                writeItem( setter,
-                           context,
-                           writer );
-
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            FactHandle factHandle = new DefaultFactHandle( reader.getValue() );
-            reader.moveUp();
-
-            List<Setter> setters = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-
-                reader.moveDown();
-                String accessor = reader.getValue();
-                reader.moveUp();
-
-                reader.moveDown();
-                String value = reader.getValue();
-                reader.moveUp();
-
-                Setter setter = CommandFactory.newSetter( accessor,
-                                                          value );
-                setters.add( setter );
-
-                reader.moveUp();
-            }
-
-            Command cmd = CommandFactory.newModify( factHandle,
-                                                    setters );
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( ModifyCommand.class );
-        }
-
-    }
-
-    public static class JSonInsertElementsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonInsertElementsConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            InsertElementsCommand cmd = (InsertElementsCommand) object;
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-
-                writer.startNode( "return-objects" );
-                writer.setValue( Boolean.toString( cmd.isReturnObject() ) );
-                writer.endNode();
-
-            }
-
-            for ( Object element : cmd.getObjects() ) {
-                writeItem( new ObjectsObjectContainer( element ),
-                           context,
-                           writer );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            List objects = new ArrayList();
-            String outIdentifier = null;
-            String returnObjects = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "objects".equals( nodeName ) ) {
-                    while ( reader.hasMoreChildren() ) {
-                        reader.moveDown();
-                        Object o = readItem( reader,
-                                             context,
-                                             null );
-                        objects.add( o );
-                        reader.moveUp();
-                    }
-                } else if ( "out-identifier".equals( nodeName ) ) {
-                    outIdentifier = reader.getValue();
-                } else if ( "return-objects".equals( nodeName ) ) {
-                    returnObjects = reader.getValue();
-                } else {
-                    throw new IllegalArgumentException( "insert-elements does not support the child element name=''" + reader.getNodeName() + "' value=" + reader.getValue() + "'" );
-                }
-                reader.moveUp();
-            }
-            InsertElementsCommand cmd = new InsertElementsCommand( objects );
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier( outIdentifier );
-                if ( outIdentifier != null ) {
-                    cmd.setReturnObject( Boolean.parseBoolean( returnObjects ) );
-                }
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( InsertElementsCommand.class );
-        }
-    }
-
-    public static class JSonBatchExecutionResultConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonBatchExecutionResultConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            ExecutionResults result = (ExecutionResults) object;
-            writer.startNode( "results" );
-            if ( !result.getIdentifiers().isEmpty() ) {
-                for ( String identifier : result.getIdentifiers() ) {
-                    writer.startNode( "result" );
-
-                    writer.startNode( "identifier" );
-                    writer.setValue( identifier );
-                    writer.endNode();
-
-                    writer.startNode( "value" );
-                    Object value = result.getValue( identifier );
-                    writeItem( value,
-                               context,
-                               writer );
-                    writer.endNode();
-
-                    writer.endNode();
-                }
-            }
-
-            for ( String identifier : ((ExecutionResultImpl) result).getFactHandles().keySet() ) {
-                Object handle = result.getFactHandle( identifier );
-                if ( handle instanceof FactHandle ) {
-                    writer.startNode( "fact-handle" );
-
-                    writer.startNode( "identifier" );
-                    writer.setValue( identifier );
-                    writer.endNode();
-
-                    writer.startNode( "external-form" );
-                    writer.setValue( ((FactHandle) handle).toExternalForm() );
-                    writer.endNode();
-
-                    writer.endNode();
-                } else if ( handle instanceof Collection ) {
-                    writer.startNode( "fact-handles" );
-
-                    writer.startNode( "identifier" );
-                    writer.setValue( identifier );
-                    writer.endNode();
-
-                    //writer.startNode( "xxx" );
-                    for ( FactHandle factHandle : (Collection<FactHandle>) handle ) {
-                        writeItem( factHandle.toExternalForm(),
-                                   context,
-                                   writer );
-                    }
-                    //writer.endNode();
-
-                    writer.endNode();
-                }
-            }
-
-            writer.endNode();
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            ExecutionResultImpl result = new ExecutionResultImpl();
-            Map results = result.getResults();
-            Map facts = result.getFactHandles();
-
-            reader.moveDown();
-            if ( "results".equals( reader.getNodeName() ) ) {
-                while ( reader.hasMoreChildren() ) {
-                    reader.moveDown();
-
-                    if ( reader.getNodeName().equals( "result" ) ) {
-                        reader.moveDown();
-                        String identifier = reader.getValue();
-                        reader.moveUp();
-
-                        reader.moveDown();
-                        reader.moveDown();
-                        Object value = readItem( reader,
-                                                 context,
-                                                 null );
-                        results.put( identifier,
-                                     value );
-                        reader.moveUp();
-                        reader.moveUp();
-                    } else if ( reader.getNodeName().equals( "fact-handle" ) ) {
-                        reader.moveDown();
-                        String identifier = reader.getValue();
-                        reader.moveUp();
-
-                        reader.moveDown();
-                        String externalForm = reader.getValue();
-                        reader.moveUp();
-
-                        facts.put( identifier,
-                                   new DefaultFactHandle( externalForm ) );
-                    } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
-                        List list = new ArrayList();
-                        String identifier = null;
-                        while ( reader.hasMoreChildren() ) {
-                            reader.moveDown();
-                            identifier = reader.getValue();
-                            reader.moveUp();
-                            while ( reader.hasMoreChildren() ) {
-                                reader.moveDown();
-                                FactHandle factHandle = new DefaultFactHandle( (String) readItem( reader,
-                                                                                                       context,
-                                                                                                       null ) );
-                                list.add( factHandle );
-                                reader.moveUp();
-                            }
-                        }
-                        facts.put( identifier,
-                                   list );
-                    } else {
-                        throw new IllegalArgumentException( "Element '" + reader.getNodeName() + "' is not supported here" );
-                    }
-                    reader.moveUp();
-                }
-            } else {
-                throw new IllegalArgumentException( "Element '" + reader.getNodeName() + "' is not supported here" );
-            }
-            reader.moveUp();
-
-            return result;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return ExecutionResults.class.isAssignableFrom( clazz );
-        }
-    }
-
-    public static abstract class BaseConverter {
-        protected Mapper             mapper;
-        protected ReflectionProvider reflectionProvider;
-
-        public BaseConverter(XStream xstream) {
-            this.mapper = xstream.getMapper();
-            this.reflectionProvider = xstream.getReflectionProvider();
-        }
-
-        protected void writeValue(HierarchicalStreamWriter writer,
-                                  MarshallingContext context,
-                                  String fieldName,
-                                  Object object) {
-            writer.startNode( fieldName );
-            String name = this.mapper.serializedClass( object.getClass() );
-            ExtendedHierarchicalStreamWriterHelper.startNode( writer,
-                                                              name,
-                                                              Mapper.Null.class );
-            context.convertAnother( object );
-            writer.endNode();
-            writer.endNode();
-        }
-
-        protected Object readValue(HierarchicalStreamReader reader,
-                                   UnmarshallingContext context,
-                                   Object object,
-                                   Object fieldName) {
-            reader.moveDown();
-            Class type = HierarchicalStreams.readClassType( reader,
-                                                            this.mapper );
-            Object o = context.convertAnother( null,
-                                               type );
-
-            reader.moveUp();
-            return o;
-        }
-    }
-
-    public static class JSonSetGlobalConverter extends BaseConverter
-        implements
-        Converter {
-
-        public JSonSetGlobalConverter(XStream xstream) {
-            super( xstream );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            SetGlobalCommand cmd = (SetGlobalCommand) object;
-
-            writer.startNode( "identifier" );
-            writer.setValue( cmd.getIdentifier() );
-            writer.endNode();
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-            } else if ( cmd.isOut() ) {
-                writer.startNode( "out" );
-                writer.setValue( Boolean.toString( cmd.isOut() ) );
-                writer.endNode();
-            }
-            writeValue( writer,
-                        context,
-                        "object",
-                        cmd.getObject() );
-
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifier = null;
-            String out = null;
-            String outIdentifier = null;
-            Object object = null;
-            SetGlobalCommand cmd = new SetGlobalCommand();
-
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "identifier".equals( nodeName ) ) {
-                    identifier = reader.getValue();
-                } else if ( "out".equals( nodeName ) ) {
-                    out = reader.getValue();
-                } else if ( "out-identifier".equals( nodeName ) ) {
-                    outIdentifier = reader.getValue();
-                } else if ( "object".equals( nodeName ) ) {
-                    cmd.setObject( readValue( reader,
-                                              context,
-                                              cmd.getObject(),
-                                              "object" ) );
-                }
-                reader.moveUp();
-            }
-
-            cmd.setIdentifier( identifier );
-
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier( outIdentifier );
-            } else if ( out != null ) {
-                cmd.setOut( Boolean.parseBoolean( out ) );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( SetGlobalCommand.class );
-        }
-
-    }
-
-    public static class JSonGetGlobalConverter extends BaseConverter
-        implements
-        Converter {
-
-        public JSonGetGlobalConverter(XStream xstream) {
-            super( xstream );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetGlobalCommand cmd = (GetGlobalCommand) object;
-
-            writer.startNode( "identifier" );
-            writer.setValue( cmd.getIdentifier() );
-            writer.endNode();
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-            }
-
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifier = null;
-            String outIdentifier = null;
-            GetGlobalCommand cmd = new GetGlobalCommand();
-
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "identifier".equals( nodeName ) ) {
-                    identifier = reader.getValue();
-                } else if ( "out-identifier".equals( nodeName ) ) {
-                    outIdentifier = reader.getValue();
-                }
-                reader.moveUp();
-            }
-
-            cmd.setIdentifier( identifier );
-
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier( outIdentifier );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetGlobalCommand.class );
-        }
-    }
-
-    public static class JSonGetObjectsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonGetObjectsConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetObjectsCommand cmd = (GetObjectsCommand) object;
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.startNode( "out-identifier" );
-                writer.setValue( cmd.getOutIdentifier() );
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String outIdentifier = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                if ( "out-identifier".equals( reader.getNodeName() ) ) {
-                    outIdentifier = reader.getValue();
-                }
-                reader.moveUp();
-            }
-
-            GetObjectsCommand cmd = new GetObjectsCommand();
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier( outIdentifier );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetObjectsCommand.class );
-        }
-    }
-
-    public static class JSonQueryConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonQueryConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            QueryCommand cmd = (QueryCommand) object;
-
-            writer.startNode( "out-identifier" );
-            writer.setValue( cmd.getOutIdentifier() );
-            writer.endNode();
-
-            writer.startNode( "name" );
-            writer.setValue( cmd.getName() );
-            writer.endNode();
-
-            if ( cmd.getArguments() != null && cmd.getArguments().size() > 0 ) {
-                writer.startNode( "args" );
-                for ( Object arg : cmd.getArguments() ) {
-                    writeItem( arg,
-                               context,
-                               writer );
-                }
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            List<String> outs = new ArrayList<String>();
-
-            String outIdentifier = null;
-            String name = null;
-            List<Object> args = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "out-identifier".equals( nodeName ) ) {
-                    outIdentifier = reader.getValue();
-                } else if ( "name".equals( nodeName ) ) {
-                    name = reader.getValue();
-                } else if ( "args".equals( nodeName ) ) {
-                    reader.moveDown();
-                    args = new ArrayList<Object>();
-                    while ( reader.hasMoreChildren() ) {
-                        reader.moveDown();
-                        Object arg = readItem( reader,
-                                               context,
-                                               null );
-                        args.add( arg );
-                        reader.moveUp();
-                    }
-                    reader.moveUp();
-                }
-                reader.moveUp();
-            }
-
-            QueryCommand cmd = new QueryCommand( outIdentifier,
-                                                 name,
-                                                 (args != null) ? args.toArray( new Object[args.size()] ) : null );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( QueryCommand.class );
-        }
-    }
-
-    public static class JSonQueryResultsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonQueryResultsConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            QueryResults results = (QueryResults) object;
-
-            // write out identifiers
-            String[] identifiers = results.getIdentifiers();
-
-            writer.startNode( "identifiers" );
-            for ( int i = 0; i < identifiers.length; i++ ) {
-                writeItem( identifiers[i],
-                           context,
-                           writer );
-            }
-            writer.endNode();
-
-            for ( QueryResultsRow result : results ) {
-                writer.startNode( "row" );
-                for ( int i = 0; i < identifiers.length; i++ ) {
-                    Object value = result.get( identifiers[i] );
-                    FactHandle factHandle = result.getFactHandle( identifiers[i] );
-                    writeItem( new RowItemContainer( factHandle,
-                                                     value ),
-                               context,
-                               writer );
-                }
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            List<String> list = new ArrayList<String>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                list.add( (String) readItem( reader,
-                                             context,
-                                             null ) );
-                reader.moveUp();
-            }
-            reader.moveUp();
-
-            HashMap<String, Integer> identifiers = new HashMap<String, Integer>();
-            for ( int i = 0; i < list.size(); i++ ) {
-                identifiers.put( list.get( i ),
-                                 i );
-            }
-
-            ArrayList<ArrayList<Object>> results = new ArrayList();
-            ArrayList<ArrayList<FactHandle>> resultHandles = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                ArrayList objects = new ArrayList();
-                ArrayList<FactHandle> handles = new ArrayList();
-                while ( reader.hasMoreChildren() ) {
-                    reader.moveDown();
-                    RowItemContainer container = (RowItemContainer) readItem( reader,
-                                                                              context,
-                                                                              null );
-
-                    objects.add( container.getObject() );
-                    handles.add( container.getFactHandle() );
-                    reader.moveUp();
-                }
-                results.add( objects );
-                resultHandles.add( handles );
-                reader.moveUp();
-            }
-
-            return new FlatQueryResults( identifiers,
-                                         results,
-                                         resultHandles );
-        }
-
-        public boolean canConvert(Class clazz) {
-            return QueryResults.class.isAssignableFrom( clazz );
-        }
-    }
-
-    public static class JSonStartProcessConvert extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonStartProcessConvert(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            StartProcessCommand cmd = (StartProcessCommand) object;
-            writer.startNode( "process-id" );
-            writer.setValue( cmd.getProcessId() );
-            writer.endNode();
-
-            for ( Entry<String, Object> entry : cmd.getParameters().entrySet() ) {
-                writeItem( new ParameterContainer( entry.getKey(),
-                                                   entry.getValue() ),
-                           context,
-                           writer );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            String processId = reader.getValue();
-            reader.moveUp();
-
-            HashMap<String, Object> params = new HashMap<String, Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                ParameterContainer parameterContainer = (ParameterContainer) readItem( reader,
-                                                                                       context,
-                                                                                       null );
-                params.put( parameterContainer.getIdentifier(),
-                            parameterContainer.getObject() );
-                reader.moveUp();
-            }
-
-            StartProcessCommand cmd = new StartProcessCommand();
-            cmd.setProcessId( processId );
-            cmd.setParameters( params );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( StartProcessCommand.class );
-        }
-    }
-
-    public static class JSonSignalEventConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonSignalEventConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            SignalEventCommand cmd = (SignalEventCommand) object;
-            long processInstanceId = cmd.getProcessInstanceId();
-            String eventType = cmd.getEventType();
-            Object event = cmd.getEvent();
-
-            if ( processInstanceId != -1 ) {
-                writer.startNode( "process-instance-id" );
-                writer.setValue( Long.toString( processInstanceId ) );
-                writer.endNode();
-            }
-
-            writer.addAttribute( "event-type",
-                                 eventType );
-
-            writer.startNode( "event-type" );
-            writer.setValue( eventType );
-            writer.endNode();
-
-            writer.startNode( "object" );
-            writeItem( event,
-                       context,
-                       writer );
-            writer.endNode();
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String processInstanceId = null;
-            String eventType = null;
-            Object event = null;
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "process-instance-id".equals( nodeName ) ) {
-                    processInstanceId = reader.getValue();
-                } else if ( "event-type".equals( nodeName ) ) {
-                    eventType = reader.getValue();
-                } else if ( "object".equals( nodeName ) ) {
-                    reader.moveDown();
-                    event = readItem( reader,
-                                      context,
-                                      null );
-                    reader.moveUp();
-                }
-                reader.moveUp();
-            }
-
-            Command cmd;
-            if ( processInstanceId != null ) {
-                cmd = CommandFactory.newSignalEvent( Long.parseLong( processInstanceId ),
-                                                     eventType,
-                                                     event );
-            } else {
-                cmd = CommandFactory.newSignalEvent( eventType,
-                                                     event );
-            }
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( SignalEventCommand.class );
-        }
-
-    }
-
-    public static class JSonCompleteWorkItemConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonCompleteWorkItemConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            CompleteWorkItemCommand cmd = (CompleteWorkItemCommand) object;
-
-            writer.startNode( "id" );
-            writer.setValue( Long.toString( cmd.getWorkItemId() ) );
-            writer.endNode();
-
-            for ( Entry<String, Object> entry : cmd.getResults().entrySet() ) {
-                writeItem( new WorkItemResultsContainer( entry.getKey(),
-                                                         entry.getValue() ),
-                           context,
-                           writer );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String id = null;
-            Map<String, Object> results = new HashMap<String, Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String nodeName = reader.getNodeName();
-                if ( "id".equals( nodeName ) ) {
-                    id = reader.getValue();
-                } else if ( "results".equals( nodeName ) ) {
-                    while ( reader.hasMoreChildren() ) {
-                        WorkItemResultsContainer res = (WorkItemResultsContainer) readItem( reader,
-                                                                                            context,
-                                                                                            null );
-                        results.put( res.getIdentifier(),
-                                     res.getObject() );
-                    }
-                }
-                reader.moveUp();
-            }
-
-            return new CompleteWorkItemCommand( Long.parseLong( id ),
-                                                results );
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( CompleteWorkItemCommand.class );
-        }
-    }
-
-    public static class JSonAbortWorkItemConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public JSonAbortWorkItemConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
-            writer.startNode( "id" );
-            writer.setValue( Long.toString( cmd.getWorkItemId() ) );
-            writer.endNode();
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            String id = reader.getValue();
-            reader.moveUp();
-
-            Command cmd = CommandFactory.newAbortWorkItem( Long.parseLong( id ) );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( AbortWorkItemCommand.class );
-        }
-    }
 }

Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java	2010-07-28 04:39:28 UTC (rev 34242)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java	2010-07-28 05:26:10 UTC (rev 34243)
@@ -17,54 +17,30 @@
 package org.drools.camel.component;
 
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import org.apache.camel.model.dataformat.XStreamDataFormat;
-import org.drools.base.ClassObjectType;
-import org.drools.base.DroolsQuery;
-import org.drools.command.Command;
-import org.drools.command.CommandFactory;
-import org.drools.command.Setter;
 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.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.GetObjectsCommand;
-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.common.DefaultFactHandle;
-import org.drools.rule.Declaration;
-import org.drools.runtime.ExecutionResults;
-import org.drools.runtime.impl.ExecutionResultImpl;
-import org.drools.runtime.rule.FactHandle;
-import org.drools.runtime.rule.QueryResults;
-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.runtime.help.impl.XStreamXML.AbortWorkItemConverter;
+import org.drools.runtime.help.impl.XStreamXML.BatchExecutionResultConverter;
+import org.drools.runtime.help.impl.XStreamXML.CompleteWorkItemConverter;
+import org.drools.runtime.help.impl.XStreamXML.FactHandleConverter;
+import org.drools.runtime.help.impl.XStreamXML.FireAllRulesConverter;
+import org.drools.runtime.help.impl.XStreamXML.GetGlobalConverter;
+import org.drools.runtime.help.impl.XStreamXML.GetObjectConverter;
+import org.drools.runtime.help.impl.XStreamXML.GetObjectsConverter;
+import org.drools.runtime.help.impl.XStreamXML.InsertConverter;
+import org.drools.runtime.help.impl.XStreamXML.InsertElementsConverter;
+import org.drools.runtime.help.impl.XStreamXML.ModifyConverter;
+import org.drools.runtime.help.impl.XStreamXML.QueryConverter;
+import org.drools.runtime.help.impl.XStreamXML.QueryResultsConverter;
+import org.drools.runtime.help.impl.XStreamXML.RetractConverter;
+import org.drools.runtime.help.impl.XStreamXML.SetGlobalConverter;
+import org.drools.runtime.help.impl.XStreamXML.SignalEventConverter;
+import org.drools.runtime.help.impl.XStreamXML.StartProcessConvert;
 
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.converters.Converter;
-import com.thoughtworks.xstream.converters.MarshallingContext;
-import com.thoughtworks.xstream.converters.UnmarshallingContext;
-import com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter;
-import com.thoughtworks.xstream.io.HierarchicalStreamReader;
-import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
-import com.thoughtworks.xstream.mapper.Mapper;
-
 public class XStreamXml {
     
     public static XStreamDataFormat newXStreamMarshaller(XStreamDataFormat xstreamDataFormat) {
@@ -93,6 +69,7 @@
         converters.add( InsertElementsConverter.class.getName() );
         converters.add( FireAllRulesConverter.class.getName() );
         converters.add( StartProcessConvert.class.getName() );
+        converters.add( SignalEventConverter.class.getName() );        
         converters.add( CompleteWorkItemConverter.class.getName() );
         converters.add( AbortWorkItemConverter.class.getName() );
         converters.add( QueryConverter.class.getName() );
@@ -101,902 +78,11 @@
         converters.add( GetObjectsConverter.class.getName() );
         converters.add( BatchExecutionResultConverter.class.getName() );
         converters.add( QueryResultsConverter.class.getName() );
-        converters.add( FactHandleConverter.class.getName() );        
+        converters.add( FactHandleConverter.class.getName() );
         xstreamDataFormat.setConverters( converters );
         
         return xstreamDataFormat;
     }
-    
-    
-    public static class InsertConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public InsertConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            InsertObjectCommand cmd = (InsertObjectCommand) object;
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-
-                writer.addAttribute( "return-object",
-                                     Boolean.toString( cmd.isReturnObject() ) );
-
-            }
-            writeItem( cmd.getObject(),
-                       context,
-                       writer );
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifierOut = reader.getAttribute( "out-identifier" );
-            String returnObject = reader.getAttribute( "return-object" );
-
-            reader.moveDown();
-            Object object = readItem( reader,
-                                      context,
-                                      null );
-            reader.moveUp();
-            InsertObjectCommand cmd = new InsertObjectCommand( object );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-                if ( returnObject != null ) {
-                    cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
-                }
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( InsertObjectCommand.class );
-        }
-
-    }
-
-    public static class FactHandleConverter
-        implements
-        Converter {
-        private Mapper mapper;
-
-        public FactHandleConverter(XStream xstream) {
-            this.mapper = mapper;
-        }
-
-        public boolean canConvert(Class aClass) {
-            return FactHandle.class.isAssignableFrom( aClass );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext marshallingContext) {
-            FactHandle fh = (FactHandle) object;
-            //writer.startNode("fact-handle");
-            writer.addAttribute( "external-form",
-                                 fh.toExternalForm() );
-            //writer.endNode();
-        }
-
-        public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader,
-                                UnmarshallingContext unmarshallingContext) {
-            throw new UnsupportedOperationException( "Unable to unmarshal fact handles." );
-        }
-    }
-
-    public static class ModifyConverter
-        implements
-        Converter {
-
-        public ModifyConverter(XStream xstream) {
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            ModifyCommand cmd = (ModifyCommand) object;
-
-            writer.addAttribute( "fact-handle",
-                                 cmd.getFactHandle().toExternalForm() );
-
-            for ( Setter setter : cmd.getSetters() ) {
-                writer.startNode( "set" );
-                writer.addAttribute( "accessor",
-                                     setter.getAccessor() );
-                writer.addAttribute( "value",
-                                     setter.getValue() );
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
-
-            List<Setter> setters = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                Setter setter = CommandFactory.newSetter( reader.getAttribute( "accessor" ),
-                                                          reader.getAttribute( "value" ) );
-                setters.add( setter );
-                reader.moveUp();
-            }
-
-            Command cmd = CommandFactory.newModify( factHandle,
-                                                    setters );
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( ModifyCommand.class );
-        }
-
-    }
-
-    public static class RetractConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public RetractConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            RetractCommand cmd = (RetractCommand) object;
-
-            writer.addAttribute( "fact-handle",
-                                 cmd.getFactHandle().toExternalForm() );
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
-
-            Command cmd = CommandFactory.newRetract( factHandle );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( RetractCommand.class );
-        }
-    }
-
-    public static class InsertElementsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public InsertElementsConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            InsertElementsCommand cmd = (InsertElementsCommand) object;
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-
-                writer.addAttribute( "return-objects",
-                                     Boolean.toString( cmd.isReturnObject() ) );
-
-            }
-
-            for ( Object element : cmd.getObjects() ) {
-                writeItem( element,
-                           context,
-                           writer );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifierOut = reader.getAttribute( "out-identifier" );
-            String returnObject = reader.getAttribute( "return-objects" );
-
-            List objects = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                Object object = readItem( reader,
-                                          context,
-                                          null );
-                reader.moveUp();
-                objects.add( object );
-            }
-
-            InsertElementsCommand cmd = new InsertElementsCommand( objects );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-                if ( returnObject != null ) {
-                    cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
-                }
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( InsertElementsCommand.class );
-        }
-
-    }
-
-    public static class SetGlobalConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public SetGlobalConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            SetGlobalCommand cmd = (SetGlobalCommand) object;
-
-            writer.addAttribute( "identifier",
-                                 cmd.getIdentifier() );
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            } else if ( cmd.isOut() ) {
-                writer.addAttribute( "out",
-                                     Boolean.toString( cmd.isOut() ) );
-            }
-
-            writeItem( cmd.getObject(),
-                       context,
-                       writer );
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifier = reader.getAttribute( "identifier" );
-            String out = reader.getAttribute( "out" );
-            String identifierOut = reader.getAttribute( "out-identifier" );
-
-            reader.moveDown();
-            Object object = readItem( reader,
-                                      context,
-                                      null );
-            reader.moveUp();
-            SetGlobalCommand cmd = new SetGlobalCommand( identifier,
-                                                         object );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            } else if ( out != null ) {
-                cmd.setOut( Boolean.parseBoolean( out ) );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( SetGlobalCommand.class );
-        }
-    }
-
-    public static class GetObjectConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public GetObjectConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetObjectCommand cmd = (GetObjectCommand) object;
-
-            writer.addAttribute( "fact-handle",
-                                 cmd.getFactHandle().toExternalForm() );
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
-            String identifierOut = reader.getAttribute( "out-identifier" );
-
-            GetObjectCommand cmd = new GetObjectCommand( factHandle );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetObjectCommand.class );
-        }
-    }
-
-    public static class GetGlobalConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public GetGlobalConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetGlobalCommand cmd = (GetGlobalCommand) object;
-
-            writer.addAttribute( "identifier",
-                                 cmd.getIdentifier() );
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifier = reader.getAttribute( "identifier" );
-            String identifierOut = reader.getAttribute( "out-identifier" );
-
-            GetGlobalCommand cmd = new GetGlobalCommand( identifier );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetGlobalCommand.class );
-        }
-    }
-
-    public static class GetObjectsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public GetObjectsConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetObjectsCommand cmd = (GetObjectsCommand) object;
-
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifierOut = reader.getAttribute( "out-identifier" );
-
-            GetObjectsCommand cmd = new GetObjectsCommand();
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            }
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetObjectsCommand.class );
-        }
-    }
-
-    public static class FireAllRulesConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public FireAllRulesConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            FireAllRulesCommand cmd = (FireAllRulesCommand) object;
-
-            if ( cmd.getMax() != -1 ) {
-                writer.addAttribute( "max",
-                                     Integer.toString( cmd.getMax() ) );
-            }
-            
-            if ( cmd.getOutIdentifier() != null) {
-                writer.addAttribute( "out-identifier",
-                                    cmd.getOutIdentifier());
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String max = reader.getAttribute( "max" );
-            String outIdentifier = reader.getAttribute( "out-identifier" );
-
-            FireAllRulesCommand cmd = null;
-
-            if ( max != null ) {
-                cmd = new FireAllRulesCommand( Integer.parseInt( max ) );
-            } else {
-                cmd = new FireAllRulesCommand();
-            }
-            
-            if ( outIdentifier != null ) {
-                cmd.setOutIdentifier( outIdentifier );
-            }
-            
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( FireAllRulesCommand.class );
-        }
-    }
-
-    public static class QueryConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public QueryConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            QueryCommand cmd = (QueryCommand) object;
-            writer.addAttribute( "out-identifier",
-                                 cmd.getOutIdentifier() );
-            writer.addAttribute( "name",
-                                 cmd.getName() );
-            if ( cmd.getArguments() != null ) {
-                for ( Object arg : cmd.getArguments() ) {
-                    writeItem( arg,
-                               context,
-                               writer );
-                }
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            List<String> outs = new ArrayList<String>();
-
-            // Query cmd = null;
-            String outIdentifier = reader.getAttribute( "out-identifier" );
-            String name = reader.getAttribute( "name" );
-            List<Object> args = new ArrayList<Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                Object arg = readItem( reader,
-                                       context,
-                                       null );
-                args.add( arg );
-                reader.moveUp();
-            }
-            QueryCommand cmd = new QueryCommand( outIdentifier,
-                                                 name,
-                                                 args.toArray( new Object[args.size()] ) );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( QueryCommand.class );
-        }
-    }
-
-    public static class StartProcessConvert extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public StartProcessConvert(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            StartProcessCommand cmd = (StartProcessCommand) object;
-            writer.addAttribute( "processId",
-                                 cmd.getProcessId() );
-
-            for ( Entry<String, Object> entry : cmd.getParameters().entrySet() ) {
-                writer.startNode( "parameter" );
-                writer.addAttribute( "identifier",
-                                     entry.getKey() );
-                writeItem( entry.getValue(),
-                           context,
-                           writer );
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String processId = reader.getAttribute( "processId" );
-
-            HashMap<String, Object> params = new HashMap<String, Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String identifier = reader.getAttribute( "identifier" );
-                reader.moveDown();
-                Object value = readItem( reader,
-                                         context,
-                                         null );
-                reader.moveUp();
-                params.put( identifier,
-                            value );
-                reader.moveUp();
-            }
-            StartProcessCommand cmd = new StartProcessCommand();
-            cmd.setProcessId( processId );
-            cmd.setParameters( params );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( StartProcessCommand.class );
-        }
-    }
-
-    public static class SignalEventConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public SignalEventConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            SignalEventCommand cmd = (SignalEventCommand) object;
-            long processInstanceId = cmd.getProcessInstanceId();
-            String eventType = cmd.getEventType();
-            Object event = cmd.getEvent();
-
-            if ( processInstanceId != -1 ) {
-                writer.addAttribute( "process-instance-id",
-                                     Long.toString( processInstanceId ) );
-            }
-
-            writer.addAttribute( "event-type",
-                                 eventType );
-
-            writeItem( event,
-                       context,
-                       writer );
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String processInstanceId = reader.getAttribute( "process-instance-id" );
-            String eventType = reader.getAttribute( "event-type" );
-
-            reader.moveDown();
-            Object event = readItem( reader,
-                                     context,
-                                     null );
-            reader.moveUp();
-
-            Command cmd;
-            if ( processInstanceId != null ) {
-                cmd = CommandFactory.newSignalEvent( Long.parseLong( processInstanceId ),
-                                                     eventType,
-                                                     event );
-            } else {
-                cmd = CommandFactory.newSignalEvent( eventType,
-                                                     event );
-            }
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( SignalEventCommand.class );
-        }
-
-    }
-
-    public static class CompleteWorkItemConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public CompleteWorkItemConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            CompleteWorkItemCommand cmd = (CompleteWorkItemCommand) object;
-            writer.addAttribute( "id",
-                                 Long.toString( cmd.getWorkItemId() ) );
-
-            for ( Entry<String, Object> entry : cmd.getResults().entrySet() ) {
-                writer.startNode( "result" );
-                writer.addAttribute( "identifier",
-                                     entry.getKey() );
-                writeItem( entry.getValue(),
-                           context,
-                           writer );
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String id = reader.getAttribute( "id" );
-
-            Map<String, Object> results = new HashMap<String, Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String identifier = reader.getAttribute( "identifier" );
-                reader.moveDown();
-                Object value = readItem( reader,
-                                         context,
-                                         null );
-                reader.moveUp();
-                results.put( identifier,
-                             value );
-                reader.moveUp();
-            }
-
-            Command cmd = CommandFactory.newCompleteWorkItem( Long.parseLong( id ),
-                                                              results );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( CompleteWorkItemCommand.class );
-        }
-    }
-
-    public static class AbortWorkItemConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public AbortWorkItemConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
-            writer.addAttribute( "id",
-                                 Long.toString( cmd.getWorkItemId() ) );
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String id = reader.getAttribute( "id" );
-            Command cmd = CommandFactory.newAbortWorkItem( Long.parseLong( id ) );
-
-            return cmd;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( AbortWorkItemCommand.class );
-        }
-    }
-
-    public static class BatchExecutionResultConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public BatchExecutionResultConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            ExecutionResults result = (ExecutionResults) object;
-            for ( String identifier : result.getIdentifiers() ) {
-                writer.startNode( "result" );
-                writer.addAttribute( "identifier",
-                                     identifier );
-                Object value = result.getValue( identifier );
-                writeItem( value,
-                           context,
-                           writer );
-                writer.endNode();
-            }
-
-            for ( String identifier : ((ExecutionResultImpl) result).getFactHandles().keySet() ) {
-                Object handle = result.getFactHandle( identifier );
-                if ( handle instanceof FactHandle ) {
-                    writer.startNode( "fact-handle" );
-                    writer.addAttribute( "identifier",
-                                         identifier );
-                    writer.addAttribute( "external-form",
-                                         ((FactHandle) handle).toExternalForm() );
-
-                    writer.endNode();
-                } else if ( handle instanceof Collection ) {
-                    writer.startNode( "fact-handles" );
-                    writer.addAttribute( "identifier",
-                                         identifier );
-                    for ( FactHandle factHandle : (Collection<FactHandle>) handle ) {
-                        writer.startNode( "fact-handle" );
-                        writer.addAttribute( "external-form",
-                                             ((FactHandle) factHandle).toExternalForm() );
-                        writer.endNode();
-                    }
-
-                    writer.endNode();
-                }
-
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            ExecutionResultImpl result = new ExecutionResultImpl();
-            Map results = result.getResults();
-            Map facts = result.getFactHandles();
-
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                if ( reader.getNodeName().equals( "result" ) ) {
-                    String identifier = reader.getAttribute( "identifier" );
-                    reader.moveDown();
-                    Object value = readItem( reader,
-                                             context,
-                                             null );
-                    results.put( identifier,
-                                 value );
-                    reader.moveUp();
-                    reader.moveUp();
-                } else if ( reader.getNodeName().equals( "fact-handle" ) ) {
-                    String identifier = reader.getAttribute( "identifier" );
-                    facts.put( identifier,
-                               new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
-                } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
-                    String identifier = reader.getAttribute( "identifier" );
-                    List<FactHandle> list = new ArrayList();
-                    while ( reader.hasMoreChildren() ) {
-                        reader.moveDown();
-                        list.add( new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
-                        reader.moveUp();
-                    }
-                    facts.put( identifier,
-                               list );
-                } else {
-                    throw new IllegalArgumentException( "Element '" + reader.getNodeName() + "' is not supported here" );
-                }
-            }
-
-            return result;
-        }
-
-        public boolean canConvert(Class clazz) {
-            return ExecutionResults.class.isAssignableFrom( clazz );
-        }
-    }
-
-    public static class QueryResultsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
-
-        public QueryResultsConverter(XStream xstream) {
-            super( xstream.getMapper() );
-        }
-
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            QueryResults results = (QueryResults) object;
-
-            // write out identifiers
-            List<String> originalIds = Arrays.asList( results.getIdentifiers() );
-            List<String> actualIds = new ArrayList();
-            if ( results instanceof NativeQueryResults ) {
-                for ( String identifier : originalIds ) {
-                    // we don't want to marshall the query parameters
-                    Declaration declr = ((NativeQueryResults) results).getDeclarations().get( identifier );
-                    ObjectType objectType = declr.getPattern().getObjectType();
-                    if ( objectType instanceof ClassObjectType ) {
-                        if ( ((ClassObjectType) objectType).getClassType() == DroolsQuery.class ) {
-                            continue;
-                        }
-                    }
-                    actualIds.add( identifier );
-                }
-            }
-
-            String[] identifiers = actualIds.toArray( new String[actualIds.size()] );
-
-            writer.startNode( "identifiers" );
-            for ( int i = 0; i < identifiers.length; i++ ) {
-                writer.startNode( "identifier" );
-                writer.setValue( identifiers[i] );
-                writer.endNode();
-            }
-            writer.endNode();
-
-            for ( QueryResultsRow result : results ) {
-                writer.startNode( "row" );
-                for ( int i = 0; i < identifiers.length; i++ ) {
-                    Object value = result.get( identifiers[i] );
-                    FactHandle factHandle = result.getFactHandle( identifiers[i] );
-                    writeItem( value,
-                               context,
-                               writer );
-                    writer.startNode( "fact-handle" );
-                    writer.addAttribute( "external-form",
-                                         ((FactHandle) factHandle).toExternalForm() );
-                    writer.endNode();
-                }
-                writer.endNode();
-            }
-        }
-
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            List<String> list = new ArrayList<String>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                list.add( reader.getValue() );
-                reader.moveUp();
-            }
-            reader.moveUp();
-
-            HashMap<String, Integer> identifiers = new HashMap<String, Integer>();
-            for ( int i = 0; i < list.size(); i++ ) {
-                identifiers.put( list.get( i ),
-                                 i );
-            }
-
-            ArrayList<ArrayList<Object>> results = new ArrayList();
-            ArrayList<ArrayList<FactHandle>> resultHandles = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                ArrayList objects = new ArrayList();
-                ArrayList<FactHandle> handles = new ArrayList();
-                while ( reader.hasMoreChildren() ) {
-                    reader.moveDown();
-                    Object object = readItem( reader,
-                                              context,
-                                              null );
-                    reader.moveUp();
-
-                    reader.moveDown();
-                    FactHandle handle = new DefaultFactHandle( reader.getAttribute( "external-form" ) );
-                    reader.moveUp();
-
-                    objects.add( object );
-                    handles.add( handle );
-                }
-                results.add( objects );
-                resultHandles.add( handles );
-                reader.moveUp();
-            }
-
-            return new FlatQueryResults( identifiers,
-                                         results,
-                                         resultHandles );
-        }
-
-        public boolean canConvert(Class clazz) {
-            return QueryResults.class.isAssignableFrom( clazz );
-        }
-    }    
+     
 }
+

Modified: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java	2010-07-28 04:39:28 UTC (rev 34242)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java	2010-07-28 05:26:10 UTC (rev 34243)
@@ -27,6 +27,7 @@
 import org.drools.KnowledgeBaseFactory;
 import org.drools.KnowledgeBaseFactoryService;
 import org.drools.Person;
+import org.drools.TestVariable;
 import org.drools.builder.DirectoryLookupFactoryService;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
@@ -81,6 +82,7 @@
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from("direct:exec").policy( new DroolsPolicy() ).unmarshal( "xstream" ).to("drools://node/ksession1").marshal( "xstream" );
+                from("direct:execWithLookup").policy( new DroolsPolicy() ).unmarshal( "xstream" ).to("drools://node").marshal( "xstream" );
                 from("direct:unmarshal").policy( new DroolsPolicy() ).unmarshal( "xstream" );
                 from("direct:marshal").policy( new DroolsPolicy() ).marshal( "xstream" );                
             }
@@ -182,7 +184,7 @@
         inXml += "  <fire-all-rules />";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -249,7 +251,7 @@
         inXml += "  <fire-all-rules />";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -304,7 +306,7 @@
         inXml += "  <fire-all-rules />";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -350,7 +352,7 @@
         inXml += "  <fire-all-rules />";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -396,7 +398,7 @@
         inXml += "  <fire-all-rules />";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -447,7 +449,7 @@
         inXml += "  <fire-all-rules />";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -545,7 +547,7 @@
         inXml += "  </insert-elements>";
         inXml += "</batch-execution>";
 
-        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatelessKnowledgeSession ksession = getStatelessKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         setExec( ksession );
 
         String outXml = template.requestBody("direct:exec", inXml, String.class);
@@ -605,7 +607,7 @@
         inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
         inXml += "</batch-execution>";
 
-        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
         FactHandle fh = ksession.insert( new Person( "mic",
                                                      42 ) );
         List<FactHandle> list = new ArrayList<FactHandle>();
@@ -626,1345 +628,1239 @@
                         outXml );
 
     }
-//
-//    public void testInsertElementsWithReturnObjects() throws Exception {
-//        String str = "";
-//        str += "package org.drools \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "global java.util.List list \n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Cheese() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
-//        str += "     list.add( $c );";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <set-global identifier='list' out='true' >";
-//        inXml += "    <list/>";
-//        inXml += "  </set-global>";
-//        inXml += "  <insert-elements out-identifier='myfacts' return-objects='true'>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>30</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert-elements>";
-//        inXml += "  <fire-all-rules/>";
-//        inXml += "</batch-execution>";
-//
-//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        Collection< ? extends FactHandle> factHandles = ksession.getFactHandles();
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier='list'>\n";
-//        expectedXml += "    <list>\n";
-//        expectedXml += "      <org.drools.Cheese>\n";
-//        expectedXml += "        <type>stilton</type>\n";
-//        expectedXml += "        <price>35</price>\n";
-//        expectedXml += "        <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      </org.drools.Cheese>\n";
-//        expectedXml += "      <org.drools.Cheese>\n";
-//        expectedXml += "        <type>stilton</type>\n";
-//        expectedXml += "        <price>30</price>\n";
-//        expectedXml += "        <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      </org.drools.Cheese>\n";
-//        expectedXml += "    </list>\n";
-//        expectedXml += "  </result>\n";
-//
-//        expectedXml += "  <result identifier=\"myfacts\">\n";
-//        expectedXml += "  <list>\n";
-//        expectedXml += "    <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese[2]\"/>\n";
-//        expectedXml += "    <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese\"/>\n";
-//        expectedXml += "  </list>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <fact-handles identifier=\"myfacts\">\n";
-//        for ( FactHandle factHandle : factHandles ) {
-//            if ( ((Cheese) ksession.getObject( factHandle )).getPrice() == 30 ) {
-//                expectedXml += "  <fact-handle external-form=\"" + factHandle.toExternalForm() + "\"/>\n";
-//            }
-//        }
-//
-//        for ( FactHandle factHandle : factHandles ) {
-//            if ( ((Cheese) ksession.getObject( factHandle )).getPrice() == 35 ) {
-//                expectedXml += "  <fact-handle external-form=\"" + factHandle.toExternalForm() + "\"/>\n";
-//            }
-//        }
-//        expectedXml += "  </fact-handles>\n";
-//
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//
-//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
-//
-//        List list = (List) result.getValue( "list" );
-//        Cheese stilton25 = new Cheese( "stilton",
-//                                       30 );
-//        Cheese stilton30 = new Cheese( "stilton",
-//                                       35 );
-//
-//        Set expectedList = new HashSet();
-//        expectedList.add( stilton25 );
-//        expectedList.add( stilton30 );
-//
-//        assertEquals( expectedList,
-//                      new HashSet( list ) );
-//    }
-//
-//    public void testSetGlobal() throws Exception {
-//        String str = "";
-//        str += "package org.drools \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "global java.util.List list1 \n";
-//        str += "global java.util.List list2 \n";
-//        str += "global java.util.List list3 \n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Cheese() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( 30 ); \n";
-//        str += "    list1.add( $c ); \n";
-//        str += "    list2.add( $c ); \n";
-//        str += "    list3.add( $c ); \n";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <set-global identifier='list1'>";
-//        inXml += "    <list/>";
-//        inXml += "  </set-global>";
-//        inXml += "  <set-global identifier='list2' out='true'>";
-//        inXml += "    <list/>";
-//        inXml += "  </set-global>";
-//        inXml += "  <set-global identifier='list3' out-identifier='outList3'>";
-//        inXml += "    <list/>";
-//        inXml += "  </set-global>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>5</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "  </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "</batch-execution>";
-//
-//        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipeline( ksession ).insert( inXml,
-//                                        resultHandler );
-//
-//        String outXml = (String) resultHandler.getObject();
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier='list2'>\n";
-//        expectedXml += "    <list>\n";
-//        expectedXml += "      <org.drools.Cheese>\n";
-//        expectedXml += "        <type>stilton</type>\n";
-//        expectedXml += "        <price>30</price>\n";
-//        expectedXml += "        <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      </org.drools.Cheese>\n";
-//        expectedXml += "    </list>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <result identifier='outList3'>\n";
-//        expectedXml += "    <list>\n";
-//        expectedXml += "      <org.drools.Cheese reference='../../../result/list/org.drools.Cheese'/>\n";
-//        expectedXml += "    </list>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//
-//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
-//        Cheese stilton = new Cheese( "stilton",
-//                                     30 );
-//
-//        assertNull( result.getValue( "list1" ) );
-//
-//        List list2 = (List) result.getValue( "list2" );
-//        assertEquals( 1,
-//                      list2.size() );
-//        assertEquals( stilton,
-//                      list2.get( 0 ) );
-//
-//        List list3 = (List) result.getValue( "outList3" );
-//        assertEquals( 1,
-//                      list3.size() );
-//        assertEquals( stilton,
-//                      list3.get( 0 ) );
-//    }
-//
-//    public void testGetGlobal() throws Exception {
-//        String str = "";
-//        str += "package org.drools \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "global java.util.List list \n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Cheese() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    list.add( $c ); \n";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <set-global identifier='list'>";
-//        inXml += "    <list/>";
-//        inXml += "  </set-global>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
-//        inXml += "</batch-execution>";
-//
-//        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipeline( ksession ).insert( inXml,
-//                                        resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier=\"out-list\">\n";
-//        expectedXml += "    <list>\n";
-//        expectedXml += "      <org.drools.Cheese>\n";
-//        expectedXml += "        <type>stilton</type>\n";
-//        expectedXml += "        <price>25</price>\n";
-//        expectedXml += "        <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      </org.drools.Cheese>\n";
-//        expectedXml += "    </list>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//    }
-//
-//    public void testGetObjects() throws Exception {
-//        String str = "";
-//        str += "package org.drools \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Cheese() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <insert-elements>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>30</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert-elements>";
-//        inXml += "  <get-objects out-identifier='list' />";
-//        inXml += "</batch-execution>";
-//
-//        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipeline( ksession ).insert( inXml,
-//                                        resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>";
-//        expectedXml += "  <result identifier='list'>";
-//        expectedXml += "    <list>";
-//        expectedXml += "      <org.drools.Cheese>";
-//        expectedXml += "        <type>stilton</type>";
-//        expectedXml += "        <price>30</price>";
-//        expectedXml += "        <oldPrice>0</oldPrice>";
-//        expectedXml += "      </org.drools.Cheese>";
-//        expectedXml += "      <org.drools.Cheese>";
-//        expectedXml += "        <type>stilton</type>";
-//        expectedXml += "        <price>35</price>";
-//        expectedXml += "        <oldPrice>0</oldPrice>";
-//        expectedXml += "      </org.drools.Cheese>";
-//        expectedXml += "    </list>";
-//        expectedXml += "  </result>";
-//        expectedXml += "</execution-results>";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//
-//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
-//        List list = (List) result.getValue( "list" );
-//        Cheese stilton25 = new Cheese( "stilton",
-//                                       30 );
-//        Cheese stilton30 = new Cheese( "stilton",
-//                                       35 );
-//
-//        Set expectedList = new HashSet();
-//        expectedList.add( stilton25 );
-//        expectedList.add( stilton30 );
-//
-//        assertEquals( expectedList,
-//                      new HashSet( list ) );
-//    }
-//
-//    public void testQuery() throws Exception {
-//        String str = "";
-//        str += "package org.drools.test  \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "query cheeses \n";
-//        str += "    stilton : Cheese(type == 'stilton') \n";
-//        str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
-//        str += "end\n";
-//        str += "query cheesesWithParams(String a, String b) \n";
-//        str += "    stilton : Cheese(type == a) \n";
-//        str += "    cheddar : Cheese(type == b, price == stilton.price) \n";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>1</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>2</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>cheddar</type>";
-//        inXml += "      <price>1</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>cheddar</type>";
-//        inXml += "      <price>2</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "  <query out-identifier='cheeses' name='cheeses'/>";
-//        inXml += "  <query out-identifier='cheeses2' name='cheesesWithParams'>";
-//        inXml += "    <string>stilton</string>";
-//        inXml += "    <string>cheddar</string>";
-//        inXml += "  </query>";
-//        inXml += "</batch-execution>";
-//
-//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        Iterator<QueryResultsRow> it1 = ksession.getQueryResults( "cheeses" ).iterator();
-//        Iterator<QueryResultsRow> it2 = ksession.getQueryResults( "cheesesWithParams",
-//                                                                  new String[]{"stilton", "cheddar"} ).iterator();
-//        QueryResultsRow row = null;
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier='cheeses'>\n";
-//        expectedXml += "    <query-results>\n";
-//        expectedXml += "      <identifiers>\n";
-//        expectedXml += "        <identifier>stilton</identifier>\n";
-//        expectedXml += "        <identifier>cheddar</identifier>\n";
-//        expectedXml += "      </identifiers>\n";
-//        expectedXml += "      <row>\n";
-//        row = it1.next();
-//        expectedXml += "        <org.drools.Cheese>\n";
-//        expectedXml += "          <type>stilton</type>\n";
-//        expectedXml += "          <price>1</price>\n";
-//        expectedXml += "          <oldPrice>0</oldPrice>\n";
-//        expectedXml += "        </org.drools.Cheese>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
-//        expectedXml += "        <org.drools.Cheese>\n";
-//        expectedXml += "          <type>cheddar</type>\n";
-//        expectedXml += "          <price>1</price>\n";
-//        expectedXml += "          <oldPrice>0</oldPrice>\n";
-//        expectedXml += "        </org.drools.Cheese>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
-//        expectedXml += "      </row>\n";
-//        expectedXml += "      <row>\n";
-//        row = it1.next();
-//        expectedXml += "        <org.drools.Cheese>\n";
-//        expectedXml += "          <type>stilton</type>\n";
-//        expectedXml += "          <price>2</price>\n";
-//        expectedXml += "          <oldPrice>0</oldPrice>\n";
-//        expectedXml += "        </org.drools.Cheese>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
-//        expectedXml += "        <org.drools.Cheese>\n";
-//        expectedXml += "          <type>cheddar</type>\n";
-//        expectedXml += "          <price>2</price>\n";
-//        expectedXml += "          <oldPrice>0</oldPrice>\n";
-//        expectedXml += "        </org.drools.Cheese>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
-//        expectedXml += "      </row>\n";
-//        expectedXml += "    </query-results>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <result identifier='cheeses2'>\n";
-//        expectedXml += "    <query-results>\n";
-//        expectedXml += "      <identifiers>\n";
-//        expectedXml += "        <identifier>stilton</identifier>\n";
-//        expectedXml += "        <identifier>cheddar</identifier>\n";
-//        expectedXml += "      </identifiers>\n";
-//        expectedXml += "      <row>\n";
-//        row = it2.next();
-//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row/org.drools.Cheese\"/>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
-//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row/org.drools.Cheese[2]\"/>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
-//        expectedXml += "      </row>\n";
-//        expectedXml += "      <row>\n";
-//        row = it2.next();
-//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row[2]/org.drools.Cheese\"/>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
-//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row[2]/org.drools.Cheese[2]\"/>\n";
-//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
-//        expectedXml += "      </row>\n";
-//        expectedXml += "    </query-results>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//
-//        ExecutionResults batchResult = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
-//
-//        Cheese stilton1 = new Cheese( "stilton",
-//                                      1 );
-//        Cheese cheddar1 = new Cheese( "cheddar",
-//                                      1 );
-//        Cheese stilton2 = new Cheese( "stilton",
-//                                      2 );
-//        Cheese cheddar2 = new Cheese( "cheddar",
-//                                      2 );
-//
-//        Set set = new HashSet();
-//        List list = new ArrayList();
-//        list.add( stilton1 );
-//        list.add( cheddar1 );
-//        set.add( list );
-//
-//        list = new ArrayList();
-//        list.add( stilton2 );
-//        list.add( cheddar2 );
-//        set.add( list );
-//
-//        org.drools.runtime.rule.QueryResults results = (org.drools.runtime.rule.QueryResults) batchResult.getValue( "cheeses" );
-//        assertEquals( 2,
-//                      results.size() );
-//        assertEquals( 2,
-//                      results.getIdentifiers().length );
-//        Set newSet = new HashSet();
-//        for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
-//            list = new ArrayList();
-//            list.add( result.get( "stilton" ) );
-//            list.add( result.get( "cheddar" ) );
-//            newSet.add( list );
-//        }
-//        assertEquals( set,
-//                      newSet );
-//    }
-//
-//    public void testManualFireAllRules() throws Exception {
-//        String str = "";
-//        str += "package org.drools \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "global java.util.List list \n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Cheese() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
-//        str += "    list.add( $c );";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <set-global identifier='list' out='true'>";
-//        inXml += "    <list/>";
-//        inXml += "  </set-global>";
-//        inXml += "  <insert-elements>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>30</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert-elements>";
-//        inXml += "  <fire-all-rules />";
-//        inXml += "  <insert out-identifier='outBrie'>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>brie</type>";
-//        inXml += "      <price>10</price>";
-//        inXml += "      <oldPrice>5</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "</batch-execution>";
-//
-//        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipeline( ksession ).insert( inXml,
-//                                        resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        FactHandle factHandle = (FactHandle) ((ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml )).getFactHandle( "outBrie" );
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier='list'>\n";
-//        expectedXml += "    <list>\n";
-//        expectedXml += "      <org.drools.Cheese>\n";
-//        expectedXml += "        <type>stilton</type>\n";
-//        expectedXml += "        <price>35</price>\n";
-//        expectedXml += "        <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      </org.drools.Cheese>\n";
-//        expectedXml += "      <org.drools.Cheese>\n";
-//        expectedXml += "        <type>stilton</type>\n";
-//        expectedXml += "        <price>30</price>\n";
-//        expectedXml += "        <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      </org.drools.Cheese>\n";
-//        expectedXml += "    </list>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <result identifier='outBrie'>\n";
-//        expectedXml += "    <org.drools.Cheese>\n";
-//        expectedXml += "      <type>brie</type>\n";
-//        expectedXml += "      <price>10</price>\n";
-//        expectedXml += "      <oldPrice>5</oldPrice>\n";
-//        expectedXml += "    </org.drools.Cheese>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <fact-handle identifier=\"outBrie\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
-//        expectedXml += "</execution-results>\n";
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//
-//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
-//
-//        // brie should not have been added to the list
-//        List list = (List) result.getValue( "list" );
-//        Cheese stilton25 = new Cheese( "stilton",
-//                                       30 );
-//        Cheese stilton30 = new Cheese( "stilton",
-//                                       35 );
-//
-//        Set expectedList = new HashSet();
-//        expectedList.add( stilton25 );
-//        expectedList.add( stilton30 );
-//
-//        assertEquals( expectedList,
-//                      new HashSet( list ) );
-//
-//        // brie should not have changed
-//        Cheese brie10 = new Cheese( "brie",
-//                                    10 );
-//        brie10.setOldPrice( 5 );
-//        assertEquals( brie10,
-//                      result.getValue( "outBrie" ) );
-//    }
-//
-//    public void testProcess() throws SAXException,
-//                             IOException {
-//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-//
-//        String str = "";
-//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
-//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
-//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
-//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
-//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
-//        str += "\n";
-//        str += "  <header>\n";
-//        str += "    <imports>\n";
-//        str += "      <import name=\"org.drools.TestVariable\" />\n";
-//        str += "    </imports>\n";
-//        str += "    <globals>\n";
-//        str += "      <global identifier=\"list\" type=\"java.util.List\" />\n";
-//        str += "    </globals>\n";
-//        str += "    <variables>\n";
-//        str += "      <variable name=\"person\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"TestVariable\" />\n";
-//        str += "      </variable>\n";
-//        str += "    </variables>\n";
-//        str += "  </header>\n";
-//        str += "\n";
-//        str += "  <nodes>\n";
-//        str += "    <start id=\"1\" name=\"Start\" />\n";
-//        str += "    <actionNode id=\"2\" name=\"MyActionNode\" >\n";
-//        str += "      <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Triggered\");\n";
-//        str += "list.add(person.name);\n";
-//        str += "</action>\n";
-//        str += "    </actionNode>\n";
-//        str += "    <end id=\"3\" name=\"End\" />\n";
-//        str += "  </nodes>\n";
-//        str += "\n";
-//        str += "  <connections>\n";
-//        str += "    <connection from=\"1\" to=\"2\" />\n";
-//        str += "    <connection from=\"2\" to=\"3\" />\n";
-//        str += "  </connections>\n" + "\n";
-//        str += "</process>";
-//
-//        Reader source = new StringReader( str );
-//        kbuilder.add( ResourceFactory.newReaderResource( source ),
-//                      ResourceType.DRF );
-//        if ( kbuilder.hasErrors() ) {
-//            fail( kbuilder.getErrors().toString() );
-//        }
-//
-//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-//        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-//
-//        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-//        List<String> list = new ArrayList<String>();
-//        ksession.setGlobal( "list",
-//                            list );
-//        TestVariable person = new TestVariable( "John Doe" );
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <start-process processId='org.drools.actions'>";
-//        inXml += "    <parameter identifier='person'>";
-//        inXml += "       <org.drools.TestVariable>";
-//        inXml += "         <name>John Doe</name>";
-//        inXml += "    </org.drools.TestVariable>";
-//        inXml += "    </parameter>";
-//        inXml += "  </start-process>";
-//        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
-//        inXml += "</batch-execution>";
-//
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipeline( ksession ).insert( inXml,
-//                                        resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        assertEquals( 1,
-//                      list.size() );
-//        assertEquals( "John Doe",
-//                      list.get( 0 ) );
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier=\"out-list\">\n";
-//        expectedXml += "    <list>\n";
-//        expectedXml += "      <string>John Doe</string>\n";
-//        expectedXml += "    </list>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//    }
-//
-//    public void testProcessInstanceSignalEvent() throws Exception {
-//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-//        String str = "";
-//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
-//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
-//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
-//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
-//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
-//        str += "\n";
-//        str += "  <header>\n";
-//        str += "    <variables>\n";
-//        str += "      <variable name=\"MyVar\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        <value>SomeText</value>\n";
-//        str += "      </variable>\n";
-//        str += "    </variables>\n";
-//        str += "  </header>\n";
-//        str += "\n";
-//        str += "  <nodes>\n";
-//        str += "    <start id=\"1\" name=\"Start\" />\n";
-//        str += "    <eventNode id=\"2\" name=\"Event\" variableName=\"MyVar\" >\n";
-//        str += "      <eventFilters>\n";
-//        str += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
-//        str += "      </eventFilters>\n";
-//        str += "    </eventNode>\n";
-//        str += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
-//        str += "    <end id=\"4\" name=\"End\" />\n";
-//        str += "  </nodes>\n";
-//        str += "\n";
-//        str += "  <connections>\n";
-//        str += "    <connection from=\"1\" to=\"3\" />\n";
-//        str += "    <connection from=\"2\" to=\"3\" />\n";
-//        str += "    <connection from=\"3\" to=\"4\" />\n";
-//        str += "  </connections>\n";
-//        str += "\n";
-//        str += "</process>";
-//
-//        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
-//                      ResourceType.DRF );
-//
-//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-//        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-//
-//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-//
-//        ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
-//        assertEquals( ProcessInstance.STATE_ACTIVE,
-//                      processInstance.getState() );
-//
-//        String inXml = "";
-//        inXml += "<signal-event process-instance-id= '" + processInstance.getId() + "' event-type='MyEvent'>";
-//        inXml += "    <string>MyValue</string>";
-//        inXml += "</signal-event>";
-//
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                new ResultHandlerImpl() );
-//
-//        assertEquals( ProcessInstance.STATE_COMPLETED,
-//                      processInstance.getState() );
-//        assertEquals( "MyValue",
-//                      ((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
-//    }
-//
-//    public void testProcessRuntimeSignalEvent() throws Exception {
-//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-//        String str = "";
-//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
-//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
-//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
-//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
-//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
-//        str += "\n";
-//        str += "  <header>\n";
-//        str += "    <variables>\n";
-//        str += "      <variable name=\"MyVar\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        <value>SomeText</value>\n";
-//        str += "      </variable>\n";
-//        str += "    </variables>\n";
-//        str += "  </header>\n";
-//        str += "\n";
-//        str += "  <nodes>\n";
-//        str += "    <start id=\"1\" name=\"Start\" />\n";
-//        str += "    <eventNode id=\"2\" name=\"Event\" scope=\"external\" variableName=\"MyVar\" >\n";
-//        str += "      <eventFilters>\n";
-//        str += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
-//        str += "      </eventFilters>\n";
-//        str += "    </eventNode>\n";
-//        str += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
-//        str += "    <end id=\"4\" name=\"End\" />\n";
-//        str += "  </nodes>\n";
-//        str += "\n";
-//        str += "  <connections>\n";
-//        str += "    <connection from=\"1\" to=\"3\" />\n";
-//        str += "    <connection from=\"2\" to=\"3\" />\n";
-//        str += "    <connection from=\"3\" to=\"4\" />\n";
-//        str += "  </connections>\n";
-//        str += "\n";
-//        str += "</process>";
-//
-//        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
-//                      ResourceType.DRF );
-//
-//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-//        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-//
-//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-//
-//        ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
-//        assertEquals( ProcessInstance.STATE_ACTIVE,
-//                      processInstance.getState() );
-//
-//        String inXml = "";
-//        inXml += "<signal-event event-type='MyEvent'>";
-//        inXml += "    <string>MyValue</string>";
-//        inXml += "</signal-event>";
-//
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                new ResultHandlerImpl() );
-//
-//        assertEquals( ProcessInstance.STATE_COMPLETED,
-//                      processInstance.getState() );
-//        assertEquals( "MyValue",
-//                      ((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
-//    }
-//
-//    public void testCompleteWorkItem() {
-//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-//
-//        String str = "";
-//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
-//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
-//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
-//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
-//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
-//        str += "\n";
-//        str += "  <header>\n";
-//        str += "    <variables>\n";
-//        str += "      <variable name=\"UserName\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        <value>John Doe</value>\n";
-//        str += "      </variable>\n";
-//        str += "      <variable name=\"Person\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
-//        str += "      </variable>\n";
-//        str += "      <variable name=\"MyObject\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
-//        str += "      </variable>\n";
-//        str += "      <variable name=\"Number\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
-//        str += "      </variable>\n";
-//        str += "    </variables>\n";
-//        str += "  </header>\n";
-//        str += "\n";
-//        str += "  <nodes>\n";
-//        str += "    <start id=\"1\" name=\"Start\" />\n";
-//        str += "    <workItem id=\"2\" name=\"HumanTask\" >\n";
-//        str += "      <work name=\"Human Task\" >\n";
-//        str += "        <parameter name=\"ActorId\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "          <value>#{UserName}</value>\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Content\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "          <value>#{Person.name}</value>\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"TaskName\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "          <value>Do something</value>\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Priority\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Comment\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Attachment\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
-//        str += "        </parameter>\n";
-//        str += "      </work>\n";
-//        str += "      <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
-//        str += "      <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
-//        str += "      <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
-//        str += "      <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
-//        str += "    </workItem>\n";
-//        str += "    <end id=\"3\" name=\"End\" />\n";
-//        str += "  </nodes>\n";
-//        str += "\n";
-//        str += "  <connections>\n";
-//        str += "    <connection from=\"1\" to=\"2\" />\n";
-//        str += "    <connection from=\"2\" to=\"3\" />\n";
-//        str += "  </connections>\n";
-//        str += "\n";
-//        str += "</process>";
-//
-//        Reader source = new StringReader( str );
-//        kbuilder.add( ResourceFactory.newReaderResource( source ),
-//                      ResourceType.DRF );
-//
-//        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
-//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-//        kbase.addKnowledgePackages( kpkgs );
-//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-//
-//        TestWorkItemHandler handler = new TestWorkItemHandler();
-//        ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
-//                                                               handler );
-//        Map<String, Object> parameters = new HashMap<String, Object>();
-//        parameters.put( "UserName",
-//                        "John Doe" );
-//        Person person = new Person();
-//        person.setName( "John Doe" );
-//        parameters.put( "Person",
-//                        person );
-//        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
-//                                                                                                   parameters );
-//        assertEquals( ProcessInstance.STATE_ACTIVE,
-//                      processInstance.getState() );
-//        WorkItem workItem = handler.getWorkItem();
-//        assertNotNull( workItem );
-//        assertEquals( "John Doe",
-//                      workItem.getParameter( "ActorId" ) );
-//        assertEquals( "John Doe",
-//                      workItem.getParameter( "Content" ) );
-//        assertEquals( "John Doe",
-//                      workItem.getParameter( "Comment" ) );
-//
-//        assertEquals( WorkItem.PENDING,
-//                      workItem.getState() );
-//
-//        String inXml = "";
-//        inXml = "<complete-work-item id='" + workItem.getId() + "' />";
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                new ResultHandlerImpl() );
-//
-//        assertEquals( WorkItem.COMPLETED,
-//                      workItem.getState() );
-//
-//        assertEquals( ProcessInstance.STATE_COMPLETED,
-//                      processInstance.getState() );
-//
-//        parameters = new HashMap<String, Object>();
-//        parameters.put( "UserName",
-//                        "Jane Doe" );
-//        parameters.put( "MyObject",
-//                        "SomeString" );
-//        person = new Person();
-//        person.setName( "Jane Doe" );
-//        parameters.put( "Person",
-//                        person );
-//        processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
-//                                                                           parameters );
-//        assertEquals( ProcessInstance.STATE_ACTIVE,
-//                      processInstance.getState() );
-//        workItem = handler.getWorkItem();
-//        assertNotNull( workItem );
-//        assertEquals( "Jane Doe",
-//                      workItem.getParameter( "ActorId" ) );
-//        assertEquals( "SomeString",
-//                      workItem.getParameter( "Attachment" ) );
-//        assertEquals( "Jane Doe",
-//                      workItem.getParameter( "Content" ) );
-//        assertEquals( "Jane Doe",
-//                      workItem.getParameter( "Comment" ) );
-//
-//        assertEquals( WorkItem.PENDING,
-//                      workItem.getState() );
-//
-//        inXml = "";
-//        inXml += "<complete-work-item id='" + workItem.getId() + "' >";
-//        inXml += "    <result identifier='Result'>";
-//        inXml += "        <string>SomeOtherString</string>";
-//        inXml += "    </result>";
-//        inXml += "</complete-work-item>";
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                new ResultHandlerImpl() );
-//
-//        assertEquals( WorkItem.COMPLETED,
-//                      workItem.getState() );
-//
-//        assertEquals( ProcessInstance.STATE_COMPLETED,
-//                      processInstance.getState() );
-//        assertEquals( "SomeOtherString",
-//                      processInstance.getVariable( "MyObject" ) );
-//        assertEquals( 15,
-//                      processInstance.getVariable( "Number" ) );
-//    }
-//
-//    public void testAbortWorkItem() {
-//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-//
-//        String str = "";
-//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
-//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
-//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
-//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
-//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
-//        str += "\n";
-//        str += "  <header>\n";
-//        str += "    <variables>\n";
-//        str += "      <variable name=\"UserName\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        <value>John Doe</value>\n";
-//        str += "      </variable>\n";
-//        str += "      <variable name=\"Person\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
-//        str += "      </variable>\n";
-//        str += "      <variable name=\"MyObject\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
-//        str += "      </variable>\n";
-//        str += "      <variable name=\"Number\" >\n";
-//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
-//        str += "      </variable>\n";
-//        str += "    </variables>\n";
-//        str += "  </header>\n";
-//        str += "\n";
-//        str += "  <nodes>\n";
-//        str += "    <start id=\"1\" name=\"Start\" />\n";
-//        str += "    <workItem id=\"2\" name=\"HumanTask\" >\n";
-//        str += "      <work name=\"Human Task\" >\n";
-//        str += "        <parameter name=\"ActorId\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "          <value>#{UserName}</value>\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Content\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "          <value>#{Person.name}</value>\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"TaskName\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "          <value>Do something</value>\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Priority\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Comment\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
-//        str += "        </parameter>\n";
-//        str += "        <parameter name=\"Attachment\" >\n";
-//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
-//        str += "        </parameter>\n";
-//        str += "      </work>\n";
-//        str += "      <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
-//        str += "      <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
-//        str += "      <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
-//        str += "      <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
-//        str += "    </workItem>\n";
-//        str += "    <end id=\"3\" name=\"End\" />\n";
-//        str += "  </nodes>\n";
-//        str += "\n";
-//        str += "  <connections>\n";
-//        str += "    <connection from=\"1\" to=\"2\" />\n";
-//        str += "    <connection from=\"2\" to=\"3\" />\n";
-//        str += "  </connections>\n";
-//        str += "\n";
-//        str += "</process>";
-//
-//        Reader source = new StringReader( str );
-//        kbuilder.add( ResourceFactory.newReaderResource( source ),
-//                      ResourceType.DRF );
-//
-//        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
-//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-//        kbase.addKnowledgePackages( kpkgs );
-//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-//
-//        TestWorkItemHandler handler = new TestWorkItemHandler();
-//        ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
-//                                                               handler );
-//        Map<String, Object> parameters = new HashMap<String, Object>();
-//        parameters.put( "UserName",
-//                        "John Doe" );
-//        Person person = new Person();
-//        person.setName( "John Doe" );
-//        parameters.put( "Person",
-//                        person );
-//        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
-//                                                                                                   parameters );
-//        assertEquals( ProcessInstance.STATE_ACTIVE,
-//                      processInstance.getState() );
-//        WorkItem workItem = handler.getWorkItem();
-//        assertNotNull( workItem );
-//
-//        assertEquals( WorkItem.PENDING,
-//                      workItem.getState() );
-//
-//        String inXml = "<abort-work-item id='" + workItem.getId() + "' />";
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                new ResultHandlerImpl() );
-//
-//        assertEquals( WorkItem.ABORTED,
-//                      workItem.getState() );
-//    }
-//
-//    public static class TestWorkItemHandler
-//        implements
-//        WorkItemHandler {
-//        private WorkItem workItem;
-//
-//        public void executeWorkItem(WorkItem workItem,
-//                                    WorkItemManager manager) {
-//            this.workItem = workItem;
-//        }
-//
-//        public void abortWorkItem(WorkItem workItem,
-//                                  WorkItemManager manager) {
-//        }
-//
-//        public WorkItem getWorkItem() {
-//            return workItem;
-//        }
-//    }
-//
-//    public void testInsertObjectWithDeclaredFact() throws Exception {
-//        String str = "";
-//        str += "package org.foo \n";
-//        str += "declare Whee \n\ttype: String\n\tprice: Integer\n\toldPrice: Integer\nend\n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Whee() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <insert out-identifier='outStilton'>";
-//        inXml += "    <org.foo.Whee>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.foo.Whee>";
-//        inXml += "  </insert>";
-//        inXml += "  <fire-all-rules />";
-//        inXml += "</batch-execution>";
-//
-//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        ClassLoader cl = ((InternalRuleBase) ((StatefulKnowledgeSessionImpl) ksession).getRuleBase()).getRootClassLoader();
-//        XStream xstream = BatchExecutionHelper.newXStreamMarshaller();
-//        xstream.setClassLoader( cl );
-//        FactHandle factHandle = (FactHandle) ((ExecutionResults) xstream.fromXML( outXml )).getFactHandle( "outStilton" );
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier=\"outStilton\">\n";
-//        expectedXml += "    <org.foo.Whee>\n";
-//        expectedXml += "      <type>stilton</type>\n";
-//        expectedXml += "      <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      <price>30</price>\n";
-//        expectedXml += "    </org.foo.Whee>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <fact-handle identifier=\"outStilton\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//
-//    }
-//
-//    public void testInsertObjectStateful() throws Exception {
-//        String str = "";
-//        str += "package org.foo \n";
-//        str += "declare Whee \n\ttype: String\n\tprice: Integer\n\toldPrice: Integer\nend\n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Whee(price < 30) \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n update($c);\n";
-//        str += "end\n";
-//        str += "query results\n";
-//        str += "    w: Whee(price == 30)";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <insert>";
-//        inXml += "    <org.foo.Whee>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.foo.Whee>";
-//        inXml += "  </insert>";
-//        inXml += "</batch-execution>";
-//
-//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                resultHandler );
-//
-//        getPipelineStateful( ksession ).insert( "<batch-execution><query out-identifier='matchingthings' name='results'/></batch-execution>",
-//                                                resultHandler );
-//        String outXml = (String) resultHandler.getObject();
-//
-//        //we have not fired the rules yet
-//        assertFalse( outXml.indexOf( "<price>30</price>" ) > -1 );
-//
-//        //lets send a command to execute them then
-//        inXml = "";
-//        inXml += "<batch-execution>";
-//        inXml += "  <fire-all-rules max='100'/>";
-//        inXml += "</batch-execution>";
-//        getPipelineStateful( ksession ).insert( inXml,
-//                                                resultHandler );
-//        //ksession.fireAllRules();
-//
-//        //ok lets try that again...
-//        getPipelineStateful( ksession ).insert( "<batch-execution><query out-identifier='matchingthings' name='results'/></batch-execution>",
-//                                                resultHandler );
-//        outXml = (String) resultHandler.getObject();
-//        assertTrue( outXml.indexOf( "<price>30</price>" ) > -1 );
-//    }
-//
-//    public void testVsmPipeline() throws Exception {
-//        String str = "";
-//        str += "package org.drools \n";
-//        str += "import org.drools.Cheese \n";
-//        str += "rule rule1 \n";
-//        str += "  when \n";
-//        str += "    $c : Cheese() \n";
-//        str += " \n";
-//        str += "  then \n";
-//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
-//        str += "end\n";
-//
-//        String inXml = "";
-//        inXml += "<batch-execution lookup=\"ksession1\" >";
-//        inXml += "  <insert out-identifier='outStilton'>";
-//        inXml += "    <org.drools.Cheese>";
-//        inXml += "      <type>stilton</type>";
-//        inXml += "      <price>25</price>";
-//        inXml += "      <oldPrice>0</oldPrice>";
-//        inXml += "    </org.drools.Cheese>";
-//        inXml += "  </insert>";
-//        inXml += "  <fire-all-rules />";
-//        inXml += "</batch-execution>";
-//
-//        LocalConnection connection = new LocalConnection();
-//        ExecutionNode node = connection.getExecutionNode(null);
-//
-//        StatefulKnowledgeSession ksession = getExecutionNodeSessionStateful(node, ResourceFactory.newByteArrayResource( str.getBytes() ) );
-//
-//        node.get(DirectoryLookupFactoryService.class).register("ksession1", ksession);
-//
-//        XStreamResolverStrategy xstreamStrategy = new XStreamResolverStrategy() {
-//            public XStream lookup(String name) {
-//                return BatchExecutionHelper.newXStreamMarshaller();
-//            }
-//        };
-//
-//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
-//        getPipelineSessionStateful(node, xstreamStrategy).insert(inXml, resultHandler);
-//        String outXml = (String) resultHandler.getObject();
-//
-//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
-//        Cheese stilton = (Cheese) result.getValue( "outStilton" );
-//        assertEquals( 30,
-//                      stilton.getPrice() );
-//
-//        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
-//        stilton = (Cheese) ksession.getObject( factHandle );
-//        assertEquals( 30,
-//                      stilton.getPrice() );
-//
-//        String expectedXml = "";
-//        expectedXml += "<execution-results>\n";
-//        expectedXml += "  <result identifier=\"outStilton\">\n";
-//        expectedXml += "    <org.drools.Cheese>\n";
-//        expectedXml += "      <type>stilton</type>\n";
-//        expectedXml += "      <oldPrice>0</oldPrice>\n";
-//        expectedXml += "      <price>30</price>\n";
-//        expectedXml += "    </org.drools.Cheese>\n";
-//        expectedXml += "  </result>\n";
-//        expectedXml += "  <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
-//        expectedXml += "</execution-results>\n";
-//
-//        assertXMLEqual( expectedXml,
-//                        outXml );
-//    }
-//
-//    private Pipeline getPipeline(StatelessKnowledgeSession ksession) {
-//        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
-//
-//        Action assignResult = PipelineFactory.newAssignObjectAsResult();
-//        assignResult.setReceiver( executeResultHandler );
-//
-//        Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
-//        outTransformer.setReceiver( assignResult );
-//
-//        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
-//        batchExecution.setReceiver( outTransformer );
-//
-//        Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
-//        inTransformer.setReceiver( batchExecution );
-//
-//        Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
-//        pipeline.setReceiver( inTransformer );
-//
-//        return pipeline;
-//    }
-//
-//    private Pipeline getPipelineSessionStateful(ExecutionNode node, XStreamResolverStrategy xstreamResolverStrategy) {
-//        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
-//
-//        Action assignResult = PipelineFactory.newAssignObjectAsResult();
-//        assignResult.setReceiver( executeResultHandler );
-//
-//        //Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
-//        Transformer outTransformer = new XStreamToXmlGridTransformer();
-//        outTransformer.setReceiver( assignResult );
-//
-//        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
-//        batchExecution.setReceiver( outTransformer );
-//
-//        //Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
-//        Transformer inTransformer = new XStreamFromXmlGridTransformer( xstreamResolverStrategy );
-//        inTransformer.setReceiver( batchExecution );
-//
-////        Transformer domTransformer = new ToXmlNodeTransformer();
-////        domTransformer.setReceiver( inTransformer );
-//
-//        //Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
-//        Pipeline pipeline = new ExecutionNodePipelineImpl( node );
-//
-//        pipeline.setReceiver( inTransformer );
-//
-//        return pipeline;
-//    }
-//
-//    private Pipeline getPipelineStateful(StatefulKnowledgeSession ksession) {
-//        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
-//
-//        Action assignResult = PipelineFactory.newAssignObjectAsResult();
-//        assignResult.setReceiver( executeResultHandler );
-//
-//        Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
-//        outTransformer.setReceiver( assignResult );
-//
-//        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
-//        batchExecution.setReceiver( outTransformer );
-//
-//        Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
-//        inTransformer.setReceiver( batchExecution );
-//
-//        Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
-//        pipeline.setReceiver( inTransformer );
-//
-//        return pipeline;
-//    }
-//
-//    public static class ResultHandlerImpl
-//        implements
-//        ResultHandler {
-//        Object object;
-//
-//        public void handleResult(Object object) {
-//            this.object = object;
-//        }
-//
-//        public Object getObject() {
-//            return this.object;
-//        }
-//    }
-//
-    private StatelessKnowledgeSession getSession2(Resource resource) throws Exception {
+
+    public void testInsertElementsWithReturnObjects() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "     list.add( $c );";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list' out='true' >";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <insert-elements out-identifier='myfacts' return-objects='true'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>30</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert-elements>";
+        inXml += "  <fire-all-rules/>";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        Collection< ? extends FactHandle> factHandles = ksession.getFactHandles();
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier='list'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>35</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>30</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+
+        expectedXml += "  <result identifier=\"myfacts\">\n";
+        expectedXml += "  <list>\n";
+        expectedXml += "    <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese[2]\"/>\n";
+        expectedXml += "    <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese\"/>\n";
+        expectedXml += "  </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handles identifier=\"myfacts\">\n";
+        for ( FactHandle factHandle : factHandles ) {
+            if ( ((Cheese) ksession.getObject( factHandle )).getPrice() == 30 ) {
+                expectedXml += "  <fact-handle external-form=\"" + factHandle.toExternalForm() + "\"/>\n";
+            }
+        }
+
+        for ( FactHandle factHandle : factHandles ) {
+            if ( ((Cheese) ksession.getObject( factHandle )).getPrice() == 35 ) {
+                expectedXml += "  <fact-handle external-form=\"" + factHandle.toExternalForm() + "\"/>\n";
+            }
+        }
+        expectedXml += "  </fact-handles>\n";
+
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+
+        List list = (List) result.getValue( "list" );
+        Cheese stilton25 = new Cheese( "stilton",
+                                       30 );
+        Cheese stilton30 = new Cheese( "stilton",
+                                       35 );
+
+        Set expectedList = new HashSet();
+        expectedList.add( stilton25 );
+        expectedList.add( stilton30 );
+
+        assertEquals( expectedList,
+                      new HashSet( list ) );
+    }
+
+    public void testSetGlobal() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list1 \n";
+        str += "global java.util.List list2 \n";
+        str += "global java.util.List list3 \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( 30 ); \n";
+        str += "    list1.add( $c ); \n";
+        str += "    list2.add( $c ); \n";
+        str += "    list3.add( $c ); \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list1'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <set-global identifier='list2' out='true'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <set-global identifier='list3' out-identifier='outList3'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>5</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "  </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "</batch-execution>";
+
+        StatelessKnowledgeSession ksession = getStatelessKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier='list2'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>30</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <result identifier='outList3'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese reference='../../../result/list/org.drools.Cheese'/>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        Cheese stilton = new Cheese( "stilton",
+                                     30 );
+
+        assertNull( result.getValue( "list1" ) );
+
+        List list2 = (List) result.getValue( "list2" );
+        assertEquals( 1,
+                      list2.size() );
+        assertEquals( stilton,
+                      list2.get( 0 ) );
+
+        List list3 = (List) result.getValue( "outList3" );
+        assertEquals( 1,
+                      list3.size() );
+        assertEquals( stilton,
+                      list3.get( 0 ) );
+    }
+
+    public void testGetGlobal() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    list.add( $c ); \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
+        inXml += "</batch-execution>";
+
+        StatelessKnowledgeSession ksession = getStatelessKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);        
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"out-list\">\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>25</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+    }
+
+    public void testGetObjects() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert-elements>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>30</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert-elements>";
+        inXml += "  <get-objects out-identifier='list' />";
+        inXml += "</batch-execution>";
+
+        StatelessKnowledgeSession ksession = getStatelessKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>";
+        expectedXml += "  <result identifier='list'>";
+        expectedXml += "    <list>";
+        expectedXml += "      <org.drools.Cheese>";
+        expectedXml += "        <type>stilton</type>";
+        expectedXml += "        <price>30</price>";
+        expectedXml += "        <oldPrice>0</oldPrice>";
+        expectedXml += "      </org.drools.Cheese>";
+        expectedXml += "      <org.drools.Cheese>";
+        expectedXml += "        <type>stilton</type>";
+        expectedXml += "        <price>35</price>";
+        expectedXml += "        <oldPrice>0</oldPrice>";
+        expectedXml += "      </org.drools.Cheese>";
+        expectedXml += "    </list>";
+        expectedXml += "  </result>";
+        expectedXml += "</execution-results>";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        List list = (List) result.getValue( "list" );
+        Cheese stilton25 = new Cheese( "stilton",
+                                       30 );
+        Cheese stilton30 = new Cheese( "stilton",
+                                       35 );
+
+        Set expectedList = new HashSet();
+        expectedList.add( stilton25 );
+        expectedList.add( stilton30 );
+
+        assertEquals( expectedList,
+                      new HashSet( list ) );
+    }
+
+    public void testQuery() throws Exception {
+        String str = "";
+        str += "package org.drools.test  \n";
+        str += "import org.drools.Cheese \n";
+        str += "query cheeses \n";
+        str += "    stilton : Cheese(type == 'stilton') \n";
+        str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
+        str += "end\n";
+        str += "query cheesesWithParams(String a, String b) \n";
+        str += "    stilton : Cheese(type == a) \n";
+        str += "    cheddar : Cheese(type == b, price == stilton.price) \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>1</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>2</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>cheddar</type>";
+        inXml += "      <price>1</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>cheddar</type>";
+        inXml += "      <price>2</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <query out-identifier='cheeses' name='cheeses'/>";
+        inXml += "  <query out-identifier='cheeses2' name='cheesesWithParams'>";
+        inXml += "    <string>stilton</string>";
+        inXml += "    <string>cheddar</string>";
+        inXml += "  </query>";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        Iterator<QueryResultsRow> it1 = ksession.getQueryResults( "cheeses" ).iterator();
+        Iterator<QueryResultsRow> it2 = ksession.getQueryResults( "cheesesWithParams",
+                                                                  new String[]{"stilton", "cheddar"} ).iterator();
+        QueryResultsRow row = null;
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier='cheeses'>\n";
+        expectedXml += "    <query-results>\n";
+        expectedXml += "      <identifiers>\n";
+        expectedXml += "        <identifier>stilton</identifier>\n";
+        expectedXml += "        <identifier>cheddar</identifier>\n";
+        expectedXml += "      </identifiers>\n";
+        expectedXml += "      <row>\n";
+        row = it1.next();
+        expectedXml += "        <org.drools.Cheese>\n";
+        expectedXml += "          <type>stilton</type>\n";
+        expectedXml += "          <price>1</price>\n";
+        expectedXml += "          <oldPrice>0</oldPrice>\n";
+        expectedXml += "        </org.drools.Cheese>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+        expectedXml += "        <org.drools.Cheese>\n";
+        expectedXml += "          <type>cheddar</type>\n";
+        expectedXml += "          <price>1</price>\n";
+        expectedXml += "          <oldPrice>0</oldPrice>\n";
+        expectedXml += "        </org.drools.Cheese>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+        expectedXml += "      </row>\n";
+        expectedXml += "      <row>\n";
+        row = it1.next();
+        expectedXml += "        <org.drools.Cheese>\n";
+        expectedXml += "          <type>stilton</type>\n";
+        expectedXml += "          <price>2</price>\n";
+        expectedXml += "          <oldPrice>0</oldPrice>\n";
+        expectedXml += "        </org.drools.Cheese>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+        expectedXml += "        <org.drools.Cheese>\n";
+        expectedXml += "          <type>cheddar</type>\n";
+        expectedXml += "          <price>2</price>\n";
+        expectedXml += "          <oldPrice>0</oldPrice>\n";
+        expectedXml += "        </org.drools.Cheese>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+        expectedXml += "      </row>\n";
+        expectedXml += "    </query-results>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <result identifier='cheeses2'>\n";
+        expectedXml += "    <query-results>\n";
+        expectedXml += "      <identifiers>\n";
+        expectedXml += "        <identifier>stilton</identifier>\n";
+        expectedXml += "        <identifier>cheddar</identifier>\n";
+        expectedXml += "      </identifiers>\n";
+        expectedXml += "      <row>\n";
+        row = it2.next();
+        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row/org.drools.Cheese\"/>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row/org.drools.Cheese[2]\"/>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+        expectedXml += "      </row>\n";
+        expectedXml += "      <row>\n";
+        row = it2.next();
+        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row[2]/org.drools.Cheese\"/>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row[2]/org.drools.Cheese[2]\"/>\n";
+        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+        expectedXml += "      </row>\n";
+        expectedXml += "    </query-results>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        ExecutionResults batchResult = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+
+        Cheese stilton1 = new Cheese( "stilton",
+                                      1 );
+        Cheese cheddar1 = new Cheese( "cheddar",
+                                      1 );
+        Cheese stilton2 = new Cheese( "stilton",
+                                      2 );
+        Cheese cheddar2 = new Cheese( "cheddar",
+                                      2 );
+
+        Set set = new HashSet();
+        List list = new ArrayList();
+        list.add( stilton1 );
+        list.add( cheddar1 );
+        set.add( list );
+
+        list = new ArrayList();
+        list.add( stilton2 );
+        list.add( cheddar2 );
+        set.add( list );
+
+        org.drools.runtime.rule.QueryResults results = (org.drools.runtime.rule.QueryResults) batchResult.getValue( "cheeses" );
+        assertEquals( 2,
+                      results.size() );
+        assertEquals( 2,
+                      results.getIdentifiers().length );
+        Set newSet = new HashSet();
+        for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
+            list = new ArrayList();
+            list.add( result.get( "stilton" ) );
+            list.add( result.get( "cheddar" ) );
+            newSet.add( list );
+        }
+        assertEquals( set,
+                      newSet );
+    }
+
+    public void testManualFireAllRules() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "    list.add( $c );";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list' out='true'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <insert-elements>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>30</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert-elements>";
+        inXml += "  <fire-all-rules />";
+        inXml += "  <insert out-identifier='outBrie'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>brie</type>";
+        inXml += "      <price>10</price>";
+        inXml += "      <oldPrice>5</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "</batch-execution>";
+
+        StatelessKnowledgeSession ksession = getStatelessKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        FactHandle factHandle = (FactHandle) ((ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml )).getFactHandle( "outBrie" );
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier='list'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>35</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>30</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <result identifier='outBrie'>\n";
+        expectedXml += "    <org.drools.Cheese>\n";
+        expectedXml += "      <type>brie</type>\n";
+        expectedXml += "      <price>10</price>\n";
+        expectedXml += "      <oldPrice>5</oldPrice>\n";
+        expectedXml += "    </org.drools.Cheese>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handle identifier=\"outBrie\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+
+        // brie should not have been added to the list
+        List list = (List) result.getValue( "list" );
+        Cheese stilton25 = new Cheese( "stilton",
+                                       30 );
+        Cheese stilton30 = new Cheese( "stilton",
+                                       35 );
+
+        Set expectedList = new HashSet();
+        expectedList.add( stilton25 );
+        expectedList.add( stilton30 );
+
+        assertEquals( expectedList,
+                      new HashSet( list ) );
+
+        // brie should not have changed
+        Cheese brie10 = new Cheese( "brie",
+                                    10 );
+        brie10.setOldPrice( 5 );
+        assertEquals( brie10,
+                      result.getValue( "outBrie" ) );
+    }
+
+    public void testProcess() throws SAXException,
+                             IOException {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+        String str = "";
+        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+        str += "\n";
+        str += "  <header>\n";
+        str += "    <imports>\n";
+        str += "      <import name=\"org.drools.TestVariable\" />\n";
+        str += "    </imports>\n";
+        str += "    <globals>\n";
+        str += "      <global identifier=\"list\" type=\"java.util.List\" />\n";
+        str += "    </globals>\n";
+        str += "    <variables>\n";
+        str += "      <variable name=\"person\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"TestVariable\" />\n";
+        str += "      </variable>\n";
+        str += "    </variables>\n";
+        str += "  </header>\n";
+        str += "\n";
+        str += "  <nodes>\n";
+        str += "    <start id=\"1\" name=\"Start\" />\n";
+        str += "    <actionNode id=\"2\" name=\"MyActionNode\" >\n";
+        str += "      <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Triggered\");\n";
+        str += "list.add(person.name);\n";
+        str += "</action>\n";
+        str += "    </actionNode>\n";
+        str += "    <end id=\"3\" name=\"End\" />\n";
+        str += "  </nodes>\n";
+        str += "\n";
+        str += "  <connections>\n";
+        str += "    <connection from=\"1\" to=\"2\" />\n";
+        str += "    <connection from=\"2\" to=\"3\" />\n";
+        str += "  </connections>\n" + "\n";
+        str += "</process>";
+
+        Reader source = new StringReader( str );
+        kbuilder.add( ResourceFactory.newReaderResource( source ),
+                      ResourceType.DRF );
+        if ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
+        setExec( ksession );
+        List<String> list = new ArrayList<String>();
+        ksession.setGlobal( "list",
+                            list );
+        TestVariable person = new TestVariable( "John Doe" );
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <start-process processId='org.drools.actions'>";
+        inXml += "    <parameter identifier='person'>";
+        inXml += "       <org.drools.TestVariable>";
+        inXml += "         <name>John Doe</name>";
+        inXml += "    </org.drools.TestVariable>";
+        inXml += "    </parameter>";
+        inXml += "  </start-process>";
+        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
+        inXml += "</batch-execution>";
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( "John Doe",
+                      list.get( 0 ) );
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"out-list\">\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <string>John Doe</string>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+    }
+
+    public void testProcessInstanceSignalEvent() throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        String str = "";
+        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+        str += "\n";
+        str += "  <header>\n";
+        str += "    <variables>\n";
+        str += "      <variable name=\"MyVar\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        <value>SomeText</value>\n";
+        str += "      </variable>\n";
+        str += "    </variables>\n";
+        str += "  </header>\n";
+        str += "\n";
+        str += "  <nodes>\n";
+        str += "    <start id=\"1\" name=\"Start\" />\n";
+        str += "    <eventNode id=\"2\" name=\"Event\" variableName=\"MyVar\" >\n";
+        str += "      <eventFilters>\n";
+        str += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+        str += "      </eventFilters>\n";
+        str += "    </eventNode>\n";
+        str += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+        str += "    <end id=\"4\" name=\"End\" />\n";
+        str += "  </nodes>\n";
+        str += "\n";
+        str += "  <connections>\n";
+        str += "    <connection from=\"1\" to=\"3\" />\n";
+        str += "    <connection from=\"2\" to=\"3\" />\n";
+        str += "    <connection from=\"3\" to=\"4\" />\n";
+        str += "  </connections>\n";
+        str += "\n";
+        str += "</process>";
+
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRF );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+        ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
+        assertEquals( ProcessInstance.STATE_ACTIVE,
+                      processInstance.getState() );
+
+        String inXml = "";
+        inXml += "<signal-event process-instance-id= '" + processInstance.getId() + "' event-type='MyEvent'>";
+        inXml += "    <string>MyValue</string>";
+        inXml += "</signal-event>";
+
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertEquals( ProcessInstance.STATE_COMPLETED,
+                      processInstance.getState() );
+        assertEquals( "MyValue",
+                      ((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
+    }
+
+    public void testProcessRuntimeSignalEvent() throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        String str = "";
+        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+        str += "\n";
+        str += "  <header>\n";
+        str += "    <variables>\n";
+        str += "      <variable name=\"MyVar\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        <value>SomeText</value>\n";
+        str += "      </variable>\n";
+        str += "    </variables>\n";
+        str += "  </header>\n";
+        str += "\n";
+        str += "  <nodes>\n";
+        str += "    <start id=\"1\" name=\"Start\" />\n";
+        str += "    <eventNode id=\"2\" name=\"Event\" scope=\"external\" variableName=\"MyVar\" >\n";
+        str += "      <eventFilters>\n";
+        str += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+        str += "      </eventFilters>\n";
+        str += "    </eventNode>\n";
+        str += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+        str += "    <end id=\"4\" name=\"End\" />\n";
+        str += "  </nodes>\n";
+        str += "\n";
+        str += "  <connections>\n";
+        str += "    <connection from=\"1\" to=\"3\" />\n";
+        str += "    <connection from=\"2\" to=\"3\" />\n";
+        str += "    <connection from=\"3\" to=\"4\" />\n";
+        str += "  </connections>\n";
+        str += "\n";
+        str += "</process>";
+
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRF );
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+        ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
+        assertEquals( ProcessInstance.STATE_ACTIVE,
+                      processInstance.getState() );
+
+        String inXml = "";
+        inXml += "<signal-event event-type='MyEvent'>";
+        inXml += "    <string>MyValue</string>";
+        inXml += "</signal-event>";
+
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertEquals( ProcessInstance.STATE_COMPLETED,
+                      processInstance.getState() );
+        assertEquals( "MyValue",
+                      ((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
+    }
+
+    public void testCompleteWorkItem() {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+        String str = "";
+        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+        str += "\n";
+        str += "  <header>\n";
+        str += "    <variables>\n";
+        str += "      <variable name=\"UserName\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        <value>John Doe</value>\n";
+        str += "      </variable>\n";
+        str += "      <variable name=\"Person\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
+        str += "      </variable>\n";
+        str += "      <variable name=\"MyObject\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+        str += "      </variable>\n";
+        str += "      <variable name=\"Number\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
+        str += "      </variable>\n";
+        str += "    </variables>\n";
+        str += "  </header>\n";
+        str += "\n";
+        str += "  <nodes>\n";
+        str += "    <start id=\"1\" name=\"Start\" />\n";
+        str += "    <workItem id=\"2\" name=\"HumanTask\" >\n";
+        str += "      <work name=\"Human Task\" >\n";
+        str += "        <parameter name=\"ActorId\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "          <value>#{UserName}</value>\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Content\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "          <value>#{Person.name}</value>\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"TaskName\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "          <value>Do something</value>\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Priority\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Comment\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Attachment\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+        str += "        </parameter>\n";
+        str += "      </work>\n";
+        str += "      <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
+        str += "      <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
+        str += "      <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
+        str += "      <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
+        str += "    </workItem>\n";
+        str += "    <end id=\"3\" name=\"End\" />\n";
+        str += "  </nodes>\n";
+        str += "\n";
+        str += "  <connections>\n";
+        str += "    <connection from=\"1\" to=\"2\" />\n";
+        str += "    <connection from=\"2\" to=\"3\" />\n";
+        str += "  </connections>\n";
+        str += "\n";
+        str += "</process>";
+
+        Reader source = new StringReader( str );
+        kbuilder.add( ResourceFactory.newReaderResource( source ),
+                      ResourceType.DRF );
+
+        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kpkgs );
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+        TestWorkItemHandler handler = new TestWorkItemHandler();
+        ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
+                                                               handler );
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put( "UserName",
+                        "John Doe" );
+        Person person = new Person();
+        person.setName( "John Doe" );
+        parameters.put( "Person",
+                        person );
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+                                                                                                   parameters );
+        assertEquals( ProcessInstance.STATE_ACTIVE,
+                      processInstance.getState() );
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        assertEquals( "John Doe",
+                      workItem.getParameter( "ActorId" ) );
+        assertEquals( "John Doe",
+                      workItem.getParameter( "Content" ) );
+        assertEquals( "John Doe",
+                      workItem.getParameter( "Comment" ) );
+
+        assertEquals( WorkItem.PENDING,
+                      workItem.getState() );
+
+        String inXml = "";
+        inXml = "<complete-work-item id='" + workItem.getId() + "' />";
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertEquals( WorkItem.COMPLETED,
+                      workItem.getState() );
+
+        assertEquals( ProcessInstance.STATE_COMPLETED,
+                      processInstance.getState() );
+
+        parameters = new HashMap<String, Object>();
+        parameters.put( "UserName",
+                        "Jane Doe" );
+        parameters.put( "MyObject",
+                        "SomeString" );
+        person = new Person();
+        person.setName( "Jane Doe" );
+        parameters.put( "Person",
+                        person );
+        processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+                                                                           parameters );
+        assertEquals( ProcessInstance.STATE_ACTIVE,
+                      processInstance.getState() );
+        workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+        assertEquals( "Jane Doe",
+                      workItem.getParameter( "ActorId" ) );
+        assertEquals( "SomeString",
+                      workItem.getParameter( "Attachment" ) );
+        assertEquals( "Jane Doe",
+                      workItem.getParameter( "Content" ) );
+        assertEquals( "Jane Doe",
+                      workItem.getParameter( "Comment" ) );
+
+        assertEquals( WorkItem.PENDING,
+                      workItem.getState() );
+
+        inXml = "";
+        inXml += "<complete-work-item id='" + workItem.getId() + "' >";
+        inXml += "    <result identifier='Result'>";
+        inXml += "        <string>SomeOtherString</string>";
+        inXml += "    </result>";
+        inXml += "</complete-work-item>";
+
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertEquals( WorkItem.COMPLETED,
+                      workItem.getState() );
+
+        assertEquals( ProcessInstance.STATE_COMPLETED,
+                      processInstance.getState() );
+        assertEquals( "SomeOtherString",
+                      processInstance.getVariable( "MyObject" ) );
+        assertEquals( 15,
+                      processInstance.getVariable( "Number" ) );
+    }
+
+    public void testAbortWorkItem() {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+        String str = "";
+        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+        str += "\n";
+        str += "  <header>\n";
+        str += "    <variables>\n";
+        str += "      <variable name=\"UserName\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        <value>John Doe</value>\n";
+        str += "      </variable>\n";
+        str += "      <variable name=\"Person\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
+        str += "      </variable>\n";
+        str += "      <variable name=\"MyObject\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+        str += "      </variable>\n";
+        str += "      <variable name=\"Number\" >\n";
+        str += "        <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
+        str += "      </variable>\n";
+        str += "    </variables>\n";
+        str += "  </header>\n";
+        str += "\n";
+        str += "  <nodes>\n";
+        str += "    <start id=\"1\" name=\"Start\" />\n";
+        str += "    <workItem id=\"2\" name=\"HumanTask\" >\n";
+        str += "      <work name=\"Human Task\" >\n";
+        str += "        <parameter name=\"ActorId\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "          <value>#{UserName}</value>\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Content\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "          <value>#{Person.name}</value>\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"TaskName\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "          <value>Do something</value>\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Priority\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Comment\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+        str += "        </parameter>\n";
+        str += "        <parameter name=\"Attachment\" >\n";
+        str += "          <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+        str += "        </parameter>\n";
+        str += "      </work>\n";
+        str += "      <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
+        str += "      <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
+        str += "      <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
+        str += "      <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
+        str += "    </workItem>\n";
+        str += "    <end id=\"3\" name=\"End\" />\n";
+        str += "  </nodes>\n";
+        str += "\n";
+        str += "  <connections>\n";
+        str += "    <connection from=\"1\" to=\"2\" />\n";
+        str += "    <connection from=\"2\" to=\"3\" />\n";
+        str += "  </connections>\n";
+        str += "\n";
+        str += "</process>";
+
+        Reader source = new StringReader( str );
+        kbuilder.add( ResourceFactory.newReaderResource( source ),
+                      ResourceType.DRF );
+
+        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kpkgs );
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+        TestWorkItemHandler handler = new TestWorkItemHandler();
+        ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
+                                                               handler );
+        Map<String, Object> parameters = new HashMap<String, Object>();
+        parameters.put( "UserName",
+                        "John Doe" );
+        Person person = new Person();
+        person.setName( "John Doe" );
+        parameters.put( "Person",
+                        person );
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+                                                                                                   parameters );
+        assertEquals( ProcessInstance.STATE_ACTIVE,
+                      processInstance.getState() );
+        WorkItem workItem = handler.getWorkItem();
+        assertNotNull( workItem );
+
+        assertEquals( WorkItem.PENDING,
+                      workItem.getState() );
+
+        String inXml = "<abort-work-item id='" + workItem.getId() + "' />";
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertEquals( WorkItem.ABORTED,
+                      workItem.getState() );
+    }
+
+    public static class TestWorkItemHandler
+        implements
+        WorkItemHandler {
+        private WorkItem workItem;
+
+        public void executeWorkItem(WorkItem workItem,
+                                    WorkItemManager manager) {
+            this.workItem = workItem;
+        }
+
+        public void abortWorkItem(WorkItem workItem,
+                                  WorkItemManager manager) {
+        }
+
+        public WorkItem getWorkItem() {
+            return workItem;
+        }
+    }
+
+    public void testInsertObjectWithDeclaredFact() throws Exception {
+        String str = "";
+        str += "package org.foo \n";
+        str += "declare Whee \n\ttype: String\n\tprice: Integer\n\toldPrice: Integer\nend\n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Whee() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='outStilton'>";
+        inXml += "    <org.foo.Whee>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.foo.Whee>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        ClassLoader cl = ((InternalRuleBase) ((StatefulKnowledgeSessionImpl) ksession).getRuleBase()).getRootClassLoader();
+        XStream xstream = BatchExecutionHelper.newXStreamMarshaller();
+        xstream.setClassLoader( cl );
+        FactHandle factHandle = (FactHandle) ((ExecutionResults) xstream.fromXML( outXml )).getFactHandle( "outStilton" );
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"outStilton\">\n";
+        expectedXml += "    <org.foo.Whee>\n";
+        expectedXml += "      <type>stilton</type>\n";
+        expectedXml += "      <oldPrice>0</oldPrice>\n";
+        expectedXml += "      <price>30</price>\n";
+        expectedXml += "    </org.foo.Whee>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handle identifier=\"outStilton\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+    }
+
+    public void testInsertObjectStateful() throws Exception {
+        String str = "";
+        str += "package org.foo \n";
+        str += "declare Whee \n\ttype: String\n\tprice: Integer\n\toldPrice: Integer\nend\n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Whee(price < 30) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n update($c);\n";
+        str += "end\n";
+        str += "query results\n";
+        str += "    w: Whee(price == 30)";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert>";
+        inXml += "    <org.foo.Whee>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.foo.Whee>";
+        inXml += "  </insert>";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+
+        outXml = template.requestBody("direct:exec", "<batch-execution><query out-identifier='matchingthings' name='results'/></batch-execution>", String.class);
+
+        //we have not fired the rules yet
+        assertFalse( outXml.indexOf( "<price>30</price>" ) > -1 );
+
+        //lets send a command to execute them then
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <fire-all-rules max='100'/>";
+        inXml += "</batch-execution>";
+        template.requestBody("direct:exec", inXml, String.class);
+        //ksession.fireAllRules();
+
+        //ok lets try that again...
+        outXml = template.requestBody("direct:exec", "<batch-execution><query out-identifier='matchingthings' name='results'/></batch-execution>", String.class);
+        assertTrue( outXml.indexOf( "<price>30</price>" ) > -1 );
+    }
+
+    public void testExecutionNodeLookup() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution lookup=\"ksession1\" >";
+        inXml += "  <insert out-identifier='outStilton'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+
+        StatefulKnowledgeSession ksession = getStatefulKnowledgeSession( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:execWithLookup", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+        stilton = (Cheese) ksession.getObject( factHandle );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"outStilton\">\n";
+        expectedXml += "    <org.drools.Cheese>\n";
+        expectedXml += "      <type>stilton</type>\n";
+        expectedXml += "      <oldPrice>0</oldPrice>\n";
+        expectedXml += "      <price>30</price>\n";
+        expectedXml += "    </org.drools.Cheese>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+    }
+
+    private StatelessKnowledgeSession getStatelessKnowledgeSession(Resource resource) throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
         kbuilder.add( resource,
                       ResourceType.DRL );
 
@@ -1983,7 +1879,7 @@
         return session;
     }
 
-    private StatefulKnowledgeSession getSessionStateful(Resource resource) throws Exception {
+    private StatefulKnowledgeSession getStatefulKnowledgeSession(Resource resource) throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
         kbuilder.add( resource,
                       ResourceType.DRL );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java	2010-07-28 04:39:28 UTC (rev 34242)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java	2010-07-28 05:26:10 UTC (rev 34243)
@@ -83,36 +83,33 @@
 
         xstream.setMode( XStream.NO_REFERENCES );
 
-        xstream.registerConverter( new JSonFactHandleConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonBatchExecutionResultConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonInsertConverter( xstream.getMapper(),
-                                                            xstream.getReflectionProvider() ) );
-        xstream.registerConverter( new JSonFireAllRulesConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonBatchExecutionCommandConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new CommandsContainerConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonGetObjectConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonRetractConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonModifyConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonSetGlobalConverter( xstream.getMapper(),
-                                                               xstream.getReflectionProvider() ) );
-        xstream.registerConverter( new JSonInsertElementsConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonGetGlobalConverter( xstream.getMapper(),
-                                                               xstream.getReflectionProvider() ) );
-        xstream.registerConverter( new JSonGetObjectsConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonQueryConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonQueryResultsConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new RowItemConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonStartProcessConvert( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonSignalEventConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonCompleteWorkItemConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new JSonAbortWorkItemConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new JSonFactHandleConverter( xstream ) );
+        xstream.registerConverter( new JSonBatchExecutionResultConverter( xstream ) );
+        xstream.registerConverter( new JSonInsertConverter( xstream ) );
+        xstream.registerConverter( new JSonFireAllRulesConverter( xstream ) );
+        xstream.registerConverter( new JSonBatchExecutionCommandConverter( xstream ) );
+        xstream.registerConverter( new CommandsContainerConverter( xstream ) );
+        xstream.registerConverter( new JSonGetObjectConverter( xstream ) );
+        xstream.registerConverter( new JSonRetractConverter( xstream ) );
+        xstream.registerConverter( new JSonModifyConverter( xstream ) );
+        xstream.registerConverter( new JSonSetGlobalConverter( xstream ) );
+        xstream.registerConverter( new JSonInsertElementsConverter( xstream ) );
+        xstream.registerConverter( new JSonGetGlobalConverter( xstream ) );
+        xstream.registerConverter( new JSonGetObjectsConverter( xstream ) );
+        xstream.registerConverter( new JSonQueryConverter( xstream ) );
+        xstream.registerConverter( new JSonQueryResultsConverter( xstream ) );
+        xstream.registerConverter( new RowItemConverter( xstream ) );
+        xstream.registerConverter( new JSonStartProcessConvert( xstream ) );
+        xstream.registerConverter( new JSonSignalEventConverter( xstream ) );
+        xstream.registerConverter( new JSonCompleteWorkItemConverter( xstream ) );
+        xstream.registerConverter( new JSonAbortWorkItemConverter( xstream ) );
 
         return xstream;
     }
 
     public static class CommandsContainerConverter extends AbstractCollectionConverter {
-        public CommandsContainerConverter(Mapper mapper) {
-            super( mapper );
+        public CommandsContainerConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public boolean canConvert(Class type) {
@@ -140,8 +137,8 @@
     }
 
     public static class RowItemConverter extends AbstractCollectionConverter {
-        public RowItemConverter(Mapper mapper) {
-            super( mapper );
+        public RowItemConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public boolean canConvert(Class type) {
@@ -228,8 +225,8 @@
         implements
         Converter {
 
-        public JSonBatchExecutionCommandConverter(Mapper mapper) {
-            super( mapper );
+        public JSonBatchExecutionCommandConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -285,10 +282,8 @@
         implements
         Converter {
 
-        public JSonInsertConverter(Mapper mapper,
-                                   ReflectionProvider reflectionProvider) {
-            super( mapper,
-                   reflectionProvider );
+        public JSonInsertConverter(XStream xstream) {
+            super( xstream );
         }
 
         public void marshal(Object object,
@@ -341,8 +336,8 @@
     public static class JSonFactHandleConverter extends AbstractCollectionConverter
         implements
         Converter {
-        public JSonFactHandleConverter(Mapper mapper) {
-            super( mapper );
+        public JSonFactHandleConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public boolean canConvert(Class aClass) {
@@ -371,8 +366,8 @@
         implements
         Converter {
 
-        public JSonFireAllRulesConverter(Mapper mapper) {
-            super( mapper );
+        public JSonFireAllRulesConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -387,8 +382,8 @@
             }
             
             if ( cmd.getOutIdentifier() != null ) {
-            	writer.startNode( "out-identifier" );
-            	writer.setValue( cmd.getOutIdentifier() );
+                writer.startNode( "out-identifier" );
+                writer.setValue( cmd.getOutIdentifier() );
                 writer.endNode();
             }
         }
@@ -402,7 +397,7 @@
                 if ( "max".equals( reader.getNodeName() ) ) {
                     max = reader.getValue();
                 } else if ( "out-identifier".equals( reader.getNodeName() ) ) {
-                	outIdentifier = reader.getValue();
+                    outIdentifier = reader.getValue();
                 } else {
                     throw new IllegalArgumentException( "fire-all-rules does not support the child element name=''" + reader.getNodeName() + "' value=" + reader.getValue() + "'" );
                 }
@@ -417,7 +412,7 @@
                 cmd = new FireAllRulesCommand();
             }
             if ( outIdentifier != null ) {
-            	cmd.setOutIdentifier(outIdentifier);
+                cmd.setOutIdentifier(outIdentifier);
             }
             return cmd;
         }
@@ -431,8 +426,8 @@
         implements
         Converter {
 
-        public JSonGetObjectConverter(Mapper mapper) {
-            super( mapper );
+        public JSonGetObjectConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -481,8 +476,8 @@
         implements
         Converter {
 
-        public JSonRetractConverter(Mapper mapper) {
-            super( mapper );
+        public JSonRetractConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -514,8 +509,8 @@
         implements
         Converter {
 
-        public JSonModifyConverter(Mapper mapper) {
-            super( mapper );
+        public JSonModifyConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -576,8 +571,8 @@
         implements
         Converter {
 
-        public JSonInsertElementsConverter(Mapper mapper) {
-            super( mapper );
+        public JSonInsertElementsConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -648,8 +643,8 @@
         implements
         Converter {
 
-        public JSonBatchExecutionResultConverter(Mapper mapper) {
-            super( mapper );
+        public JSonBatchExecutionResultConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -788,11 +783,9 @@
         protected Mapper             mapper;
         protected ReflectionProvider reflectionProvider;
 
-        public BaseConverter(Mapper mapper,
-                             ReflectionProvider reflectionProvider) {
-            super();
-            this.mapper = mapper;
-            this.reflectionProvider = reflectionProvider;
+        public BaseConverter(XStream xstream) {
+            this.mapper = xstream.getMapper();
+            this.reflectionProvider = xstream.getReflectionProvider();
         }
 
         protected void writeValue(HierarchicalStreamWriter writer,
@@ -828,10 +821,8 @@
         implements
         Converter {
 
-        public JSonSetGlobalConverter(Mapper mapper,
-                                      ReflectionProvider reflectionProvider) {
-            super( mapper,
-                   reflectionProvider );
+        public JSonSetGlobalConverter(XStream xstream) {
+            super( xstream );
         }
 
         public void marshal(Object object,
@@ -905,10 +896,8 @@
         implements
         Converter {
 
-        public JSonGetGlobalConverter(Mapper mapper,
-                                      ReflectionProvider reflectionProvider) {
-            super( mapper,
-                   reflectionProvider );
+        public JSonGetGlobalConverter(XStream xstream) {
+            super( xstream );
         }
 
         public void marshal(Object object,
@@ -962,8 +951,8 @@
         implements
         Converter {
 
-        public JSonGetObjectsConverter(Mapper mapper) {
-            super( mapper );
+        public JSonGetObjectsConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -1005,8 +994,8 @@
         implements
         Converter {
 
-        public JSonQueryConverter(Mapper mapper) {
-            super( mapper );
+        public JSonQueryConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -1079,8 +1068,8 @@
         implements
         Converter {
 
-        public JSonQueryResultsConverter(Mapper mapper) {
-            super( mapper );
+        public JSonQueryResultsConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -1167,8 +1156,8 @@
         implements
         Converter {
 
-        public JSonStartProcessConvert(Mapper mapper) {
-            super( mapper );
+        public JSonStartProcessConvert(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -1220,8 +1209,8 @@
         implements
         Converter {
 
-        public JSonSignalEventConverter(Mapper mapper) {
-            super( mapper );
+        public JSonSignalEventConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -1297,8 +1286,8 @@
         implements
         Converter {
 
-        public JSonCompleteWorkItemConverter(Mapper mapper) {
-            super( mapper );
+        public JSonCompleteWorkItemConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,
@@ -1352,8 +1341,8 @@
         implements
         Converter {
 
-        public JSonAbortWorkItemConverter(Mapper mapper) {
-            super( mapper );
+        public JSonAbortWorkItemConverter(XStream xstream) {
+            super( xstream.getMapper() );
         }
 
         public void marshal(Object object,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java	2010-07-28 04:39:28 UTC (rev 34242)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java	2010-07-28 05:26:10 UTC (rev 34243)
@@ -74,918 +74,917 @@
         xstream.addImplicitCollection( BatchExecutionCommand.class,
                                        "commands" );
         
-        xstream.registerConverter( new InsertConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new RetractConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new ModifyConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new GetObjectConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new InsertElementsConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new FireAllRulesConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new StartProcessConvert( xstream.getMapper() ) );
-        xstream.registerConverter( new SignalEventConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new CompleteWorkItemConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new AbortWorkItemConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new GetGlobalConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new GetObjectsConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new BatchExecutionResultConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new QueryResultsConverter( xstream.getMapper() ) );
-        xstream.registerConverter( new FactHandleConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new InsertConverter( xstream ) );
+        xstream.registerConverter( new RetractConverter( xstream ) );
+        xstream.registerConverter( new ModifyConverter( xstream ) );
+        xstream.registerConverter( new GetObjectConverter( xstream ) );
+        xstream.registerConverter( new InsertElementsConverter( xstream ) );
+        xstream.registerConverter( new FireAllRulesConverter( xstream ) );
+        xstream.registerConverter( new StartProcessConvert( xstream ) );
+        xstream.registerConverter( new SignalEventConverter( xstream ) );
+        xstream.registerConverter( new CompleteWorkItemConverter( xstream ) );
+        xstream.registerConverter( new AbortWorkItemConverter( xstream ) );
+        xstream.registerConverter( new QueryConverter( xstream ) );
+        xstream.registerConverter( new SetGlobalConverter( xstream ) );
+        xstream.registerConverter( new GetGlobalConverter( xstream ) );
+        xstream.registerConverter( new GetObjectsConverter( xstream ) );
+        xstream.registerConverter( new BatchExecutionResultConverter( xstream ) );
+        xstream.registerConverter( new QueryResultsConverter( xstream ) );
+        xstream.registerConverter( new FactHandleConverter( xstream ) );
     
         return xstream;
     }
     
     
-    public static class InsertConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public static class InsertConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-        public InsertConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public InsertConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            InsertObjectCommand cmd = (InsertObjectCommand) object;
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      InsertObjectCommand cmd = (InsertObjectCommand) object;
+      if ( cmd.getOutIdentifier() != null ) {
+          writer.addAttribute( "out-identifier",
+                               cmd.getOutIdentifier() );
 
-                writer.addAttribute( "return-object",
-                                     Boolean.toString( cmd.isReturnObject() ) );
+          writer.addAttribute( "return-object",
+                               Boolean.toString( cmd.isReturnObject() ) );
 
-            }
-            writeItem( cmd.getObject(),
-                       context,
-                       writer );
-        }
+      }
+      writeItem( cmd.getObject(),
+                 context,
+                 writer );
+  }
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifierOut = reader.getAttribute( "out-identifier" );
-            String returnObject = reader.getAttribute( "return-object" );
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String identifierOut = reader.getAttribute( "out-identifier" );
+      String returnObject = reader.getAttribute( "return-object" );
 
-            reader.moveDown();
-            Object object = readItem( reader,
-                                      context,
-                                      null );
-            reader.moveUp();
-            InsertObjectCommand cmd = new InsertObjectCommand( object );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-                if ( returnObject != null ) {
-                    cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
-                }
-            }
-            return cmd;
-        }
+      reader.moveDown();
+      Object object = readItem( reader,
+                                context,
+                                null );
+      reader.moveUp();
+      InsertObjectCommand cmd = new InsertObjectCommand( object );
+      if ( identifierOut != null ) {
+          cmd.setOutIdentifier( identifierOut );
+          if ( returnObject != null ) {
+              cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
+          }
+      }
+      return cmd;
+  }
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( InsertObjectCommand.class );
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( InsertObjectCommand.class );
+  }
 
-    }
+}
 
-    public static class FactHandleConverter
-        implements
-        Converter {
-        private Mapper mapper;
+public static class FactHandleConverter
+  implements
+  Converter {
+  private Mapper mapper;
 
-        public FactHandleConverter(Mapper mapper) {
-            this.mapper = mapper;
-        }
+  public FactHandleConverter(XStream xstream) {
+      this.mapper = mapper;
+  }
 
-        public boolean canConvert(Class aClass) {
-            return FactHandle.class.isAssignableFrom( aClass );
-        }
+  public boolean canConvert(Class aClass) {
+      return FactHandle.class.isAssignableFrom( aClass );
+  }
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext marshallingContext) {
-            FactHandle fh = (FactHandle) object;
-            //writer.startNode("fact-handle");
-            writer.addAttribute( "external-form",
-                                 fh.toExternalForm() );
-            //writer.endNode();
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext marshallingContext) {
+      FactHandle fh = (FactHandle) object;
+      //writer.startNode("fact-handle");
+      writer.addAttribute( "external-form",
+                           fh.toExternalForm() );
+      //writer.endNode();
+  }
 
-        public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader,
-                                UnmarshallingContext unmarshallingContext) {
-            throw new UnsupportedOperationException( "Unable to unmarshal fact handles." );
-        }
-    }
+  public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader,
+                          UnmarshallingContext unmarshallingContext) {
+      throw new UnsupportedOperationException( "Unable to unmarshal fact handles." );
+  }
+}
 
-    public static class ModifyConverter
-        implements
-        Converter {
+public static class ModifyConverter
+  implements
+  Converter {
 
-        public ModifyConverter(Mapper mapper) {
+  public ModifyConverter(XStream xstream) {
+  }
 
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      ModifyCommand cmd = (ModifyCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            ModifyCommand cmd = (ModifyCommand) object;
+      writer.addAttribute( "fact-handle",
+                           cmd.getFactHandle().toExternalForm() );
 
-            writer.addAttribute( "fact-handle",
-                                 cmd.getFactHandle().toExternalForm() );
+      for ( Setter setter : cmd.getSetters() ) {
+          writer.startNode( "set" );
+          writer.addAttribute( "accessor",
+                               setter.getAccessor() );
+          writer.addAttribute( "value",
+                               setter.getValue() );
+          writer.endNode();
+      }
+  }
 
-            for ( Setter setter : cmd.getSetters() ) {
-                writer.startNode( "set" );
-                writer.addAttribute( "accessor",
-                                     setter.getAccessor() );
-                writer.addAttribute( "value",
-                                     setter.getValue() );
-                writer.endNode();
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
+      List<Setter> setters = new ArrayList();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          Setter setter = CommandFactory.newSetter( reader.getAttribute( "accessor" ),
+                                                    reader.getAttribute( "value" ) );
+          setters.add( setter );
+          reader.moveUp();
+      }
 
-            List<Setter> setters = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                Setter setter = CommandFactory.newSetter( reader.getAttribute( "accessor" ),
-                                                          reader.getAttribute( "value" ) );
-                setters.add( setter );
-                reader.moveUp();
-            }
+      Command cmd = CommandFactory.newModify( factHandle,
+                                              setters );
+      return cmd;
+  }
 
-            Command cmd = CommandFactory.newModify( factHandle,
-                                                    setters );
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( ModifyCommand.class );
+  }
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( ModifyCommand.class );
-        }
+}
 
-    }
+public static class RetractConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class RetractConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public RetractConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public RetractConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      RetractCommand cmd = (RetractCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            RetractCommand cmd = (RetractCommand) object;
+      writer.addAttribute( "fact-handle",
+                           cmd.getFactHandle().toExternalForm() );
+  }
 
-            writer.addAttribute( "fact-handle",
-                                 cmd.getFactHandle().toExternalForm() );
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
+      Command cmd = CommandFactory.newRetract( factHandle );
 
-            Command cmd = CommandFactory.newRetract( factHandle );
+      return cmd;
+  }
 
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( RetractCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( RetractCommand.class );
-        }
-    }
+public static class InsertElementsConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class InsertElementsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public InsertElementsConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public InsertElementsConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      InsertElementsCommand cmd = (InsertElementsCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            InsertElementsCommand cmd = (InsertElementsCommand) object;
+      if ( cmd.getOutIdentifier() != null ) {
+          writer.addAttribute( "out-identifier",
+                               cmd.getOutIdentifier() );
 
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
+          writer.addAttribute( "return-objects",
+                               Boolean.toString( cmd.isReturnObject() ) );
 
-                writer.addAttribute( "return-objects",
-                                     Boolean.toString( cmd.isReturnObject() ) );
+      }
 
-            }
+      for ( Object element : cmd.getObjects() ) {
+          writeItem( element,
+                     context,
+                     writer );
+      }
+  }
 
-            for ( Object element : cmd.getObjects() ) {
-                writeItem( element,
-                           context,
-                           writer );
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String identifierOut = reader.getAttribute( "out-identifier" );
+      String returnObject = reader.getAttribute( "return-objects" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifierOut = reader.getAttribute( "out-identifier" );
-            String returnObject = reader.getAttribute( "return-objects" );
+      List objects = new ArrayList();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          Object object = readItem( reader,
+                                    context,
+                                    null );
+          reader.moveUp();
+          objects.add( object );
+      }
 
-            List objects = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                Object object = readItem( reader,
-                                          context,
-                                          null );
-                reader.moveUp();
-                objects.add( object );
-            }
+      InsertElementsCommand cmd = new InsertElementsCommand( objects );
+      if ( identifierOut != null ) {
+          cmd.setOutIdentifier( identifierOut );
+          if ( returnObject != null ) {
+              cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
+          }
+      }
+      return cmd;
+  }
 
-            InsertElementsCommand cmd = new InsertElementsCommand( objects );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-                if ( returnObject != null ) {
-                    cmd.setReturnObject( Boolean.parseBoolean( returnObject ) );
-                }
-            }
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( InsertElementsCommand.class );
+  }
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( InsertElementsCommand.class );
-        }
+}
 
-    }
+public static class SetGlobalConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class SetGlobalConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public SetGlobalConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public SetGlobalConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      SetGlobalCommand cmd = (SetGlobalCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            SetGlobalCommand cmd = (SetGlobalCommand) object;
+      writer.addAttribute( "identifier",
+                           cmd.getIdentifier() );
 
-            writer.addAttribute( "identifier",
-                                 cmd.getIdentifier() );
+      if ( cmd.getOutIdentifier() != null ) {
+          writer.addAttribute( "out-identifier",
+                               cmd.getOutIdentifier() );
+      } else if ( cmd.isOut() ) {
+          writer.addAttribute( "out",
+                               Boolean.toString( cmd.isOut() ) );
+      }
 
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            } else if ( cmd.isOut() ) {
-                writer.addAttribute( "out",
-                                     Boolean.toString( cmd.isOut() ) );
-            }
+      writeItem( cmd.getObject(),
+                 context,
+                 writer );
+  }
 
-            writeItem( cmd.getObject(),
-                       context,
-                       writer );
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String identifier = reader.getAttribute( "identifier" );
+      String out = reader.getAttribute( "out" );
+      String identifierOut = reader.getAttribute( "out-identifier" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifier = reader.getAttribute( "identifier" );
-            String out = reader.getAttribute( "out" );
-            String identifierOut = reader.getAttribute( "out-identifier" );
+      reader.moveDown();
+      Object object = readItem( reader,
+                                context,
+                                null );
+      reader.moveUp();
+      SetGlobalCommand cmd = new SetGlobalCommand( identifier,
+                                                   object );
+      if ( identifierOut != null ) {
+          cmd.setOutIdentifier( identifierOut );
+      } else if ( out != null ) {
+          cmd.setOut( Boolean.parseBoolean( out ) );
+      }
+      return cmd;
+  }
 
-            reader.moveDown();
-            Object object = readItem( reader,
-                                      context,
-                                      null );
-            reader.moveUp();
-            SetGlobalCommand cmd = new SetGlobalCommand( identifier,
-                                                         object );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            } else if ( out != null ) {
-                cmd.setOut( Boolean.parseBoolean( out ) );
-            }
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( SetGlobalCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( SetGlobalCommand.class );
-        }
-    }
+public static class GetObjectConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class GetObjectConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public GetObjectConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public GetObjectConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      GetObjectCommand cmd = (GetObjectCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetObjectCommand cmd = (GetObjectCommand) object;
+      writer.addAttribute( "fact-handle",
+                           cmd.getFactHandle().toExternalForm() );
 
-            writer.addAttribute( "fact-handle",
-                                 cmd.getFactHandle().toExternalForm() );
+      if ( cmd.getOutIdentifier() != null ) {
+          writer.addAttribute( "out-identifier",
+                               cmd.getOutIdentifier() );
+      }
+  }
 
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
+      String identifierOut = reader.getAttribute( "out-identifier" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
-            String identifierOut = reader.getAttribute( "out-identifier" );
+      GetObjectCommand cmd = new GetObjectCommand( factHandle );
+      if ( identifierOut != null ) {
+          cmd.setOutIdentifier( identifierOut );
+      }
+      return cmd;
+  }
 
-            GetObjectCommand cmd = new GetObjectCommand( factHandle );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            }
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( GetObjectCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetObjectCommand.class );
-        }
-    }
+public static class GetGlobalConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class GetGlobalConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public GetGlobalConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public GetGlobalConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      GetGlobalCommand cmd = (GetGlobalCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetGlobalCommand cmd = (GetGlobalCommand) object;
+      writer.addAttribute( "identifier",
+                           cmd.getIdentifier() );
 
-            writer.addAttribute( "identifier",
-                                 cmd.getIdentifier() );
+      if ( cmd.getOutIdentifier() != null ) {
+          writer.addAttribute( "out-identifier",
+                               cmd.getOutIdentifier() );
+      }
+  }
 
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String identifier = reader.getAttribute( "identifier" );
+      String identifierOut = reader.getAttribute( "out-identifier" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifier = reader.getAttribute( "identifier" );
-            String identifierOut = reader.getAttribute( "out-identifier" );
+      GetGlobalCommand cmd = new GetGlobalCommand( identifier );
+      if ( identifierOut != null ) {
+          cmd.setOutIdentifier( identifierOut );
+      }
+      return cmd;
+  }
 
-            GetGlobalCommand cmd = new GetGlobalCommand( identifier );
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            }
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( GetGlobalCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetGlobalCommand.class );
-        }
-    }
+public static class GetObjectsConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class GetObjectsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public GetObjectsConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public GetObjectsConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      GetObjectsCommand cmd = (GetObjectsCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            GetObjectsCommand cmd = (GetObjectsCommand) object;
+      if ( cmd.getOutIdentifier() != null ) {
+          writer.addAttribute( "out-identifier",
+                               cmd.getOutIdentifier() );
+      }
+  }
 
-            if ( cmd.getOutIdentifier() != null ) {
-                writer.addAttribute( "out-identifier",
-                                     cmd.getOutIdentifier() );
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String identifierOut = reader.getAttribute( "out-identifier" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String identifierOut = reader.getAttribute( "out-identifier" );
+      GetObjectsCommand cmd = new GetObjectsCommand();
+      if ( identifierOut != null ) {
+          cmd.setOutIdentifier( identifierOut );
+      }
+      return cmd;
+  }
 
-            GetObjectsCommand cmd = new GetObjectsCommand();
-            if ( identifierOut != null ) {
-                cmd.setOutIdentifier( identifierOut );
-            }
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( GetObjectsCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( GetObjectsCommand.class );
-        }
-    }
+public static class FireAllRulesConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class FireAllRulesConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public FireAllRulesConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public FireAllRulesConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      FireAllRulesCommand cmd = (FireAllRulesCommand) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            FireAllRulesCommand cmd = (FireAllRulesCommand) object;
+      if ( cmd.getMax() != -1 ) {
+          writer.addAttribute( "max",
+                               Integer.toString( cmd.getMax() ) );
+      }
+      
+      if ( cmd.getOutIdentifier() != null) {
+          writer.addAttribute( "out-identifier",
+                              cmd.getOutIdentifier());
+      }
+  }
 
-            if ( cmd.getMax() != -1 ) {
-                writer.addAttribute( "max",
-                                     Integer.toString( cmd.getMax() ) );
-            }
-            
-            if ( cmd.getOutIdentifier() != null) {
-            	writer.addAttribute( "out-identifier",
-            						cmd.getOutIdentifier());
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String max = reader.getAttribute( "max" );
+      String outIdentifier = reader.getAttribute( "out-identifier" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String max = reader.getAttribute( "max" );
-            String outIdentifier = reader.getAttribute( "out-identifier" );
+      FireAllRulesCommand cmd = null;
 
-            FireAllRulesCommand cmd = null;
+      if ( max != null ) {
+          cmd = new FireAllRulesCommand( Integer.parseInt( max ) );
+      } else {
+          cmd = new FireAllRulesCommand();
+      }
+      
+      if ( outIdentifier != null ) {
+          cmd.setOutIdentifier( outIdentifier );
+      }
+      
+      return cmd;
+  }
 
-            if ( max != null ) {
-                cmd = new FireAllRulesCommand( Integer.parseInt( max ) );
-            } else {
-                cmd = new FireAllRulesCommand();
-            }
-            
-            if ( outIdentifier != null ) {
-            	cmd.setOutIdentifier( outIdentifier );
-            }
-            
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( FireAllRulesCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( FireAllRulesCommand.class );
-        }
-    }
+public static class QueryConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class QueryConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public QueryConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public QueryConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      QueryCommand cmd = (QueryCommand) object;
+      writer.addAttribute( "out-identifier",
+                           cmd.getOutIdentifier() );
+      writer.addAttribute( "name",
+                           cmd.getName() );
+      if ( cmd.getArguments() != null ) {
+          for ( Object arg : cmd.getArguments() ) {
+              writeItem( arg,
+                         context,
+                         writer );
+          }
+      }
+  }
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            QueryCommand cmd = (QueryCommand) object;
-            writer.addAttribute( "out-identifier",
-                                 cmd.getOutIdentifier() );
-            writer.addAttribute( "name",
-                                 cmd.getName() );
-            if ( cmd.getArguments() != null ) {
-                for ( Object arg : cmd.getArguments() ) {
-                    writeItem( arg,
-                               context,
-                               writer );
-                }
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      List<String> outs = new ArrayList<String>();
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            List<String> outs = new ArrayList<String>();
+      // Query cmd = null;
+      String outIdentifier = reader.getAttribute( "out-identifier" );
+      String name = reader.getAttribute( "name" );
+      List<Object> args = new ArrayList<Object>();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          Object arg = readItem( reader,
+                                 context,
+                                 null );
+          args.add( arg );
+          reader.moveUp();
+      }
+      QueryCommand cmd = new QueryCommand( outIdentifier,
+                                           name,
+                                           args.toArray( new Object[args.size()] ) );
 
-            // Query cmd = null;
-            String outIdentifier = reader.getAttribute( "out-identifier" );
-            String name = reader.getAttribute( "name" );
-            List<Object> args = new ArrayList<Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                Object arg = readItem( reader,
-                                       context,
-                                       null );
-                args.add( arg );
-                reader.moveUp();
-            }
-            QueryCommand cmd = new QueryCommand( outIdentifier,
-                                                 name,
-                                                 args.toArray( new Object[args.size()] ) );
+      return cmd;
+  }
 
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( QueryCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( QueryCommand.class );
-        }
-    }
+public static class StartProcessConvert extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class StartProcessConvert extends AbstractCollectionConverter
-        implements
-        Converter {
+  public StartProcessConvert(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public StartProcessConvert(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      StartProcessCommand cmd = (StartProcessCommand) object;
+      writer.addAttribute( "processId",
+                           cmd.getProcessId() );
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            StartProcessCommand cmd = (StartProcessCommand) object;
-            writer.addAttribute( "processId",
-                                 cmd.getProcessId() );
+      for ( Entry<String, Object> entry : cmd.getParameters().entrySet() ) {
+          writer.startNode( "parameter" );
+          writer.addAttribute( "identifier",
+                               entry.getKey() );
+          writeItem( entry.getValue(),
+                     context,
+                     writer );
+          writer.endNode();
+      }
+  }
 
-            for ( Entry<String, Object> entry : cmd.getParameters().entrySet() ) {
-                writer.startNode( "parameter" );
-                writer.addAttribute( "identifier",
-                                     entry.getKey() );
-                writeItem( entry.getValue(),
-                           context,
-                           writer );
-                writer.endNode();
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String processId = reader.getAttribute( "processId" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String processId = reader.getAttribute( "processId" );
+      HashMap<String, Object> params = new HashMap<String, Object>();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          String identifier = reader.getAttribute( "identifier" );
+          reader.moveDown();
+          Object value = readItem( reader,
+                                   context,
+                                   null );
+          reader.moveUp();
+          params.put( identifier,
+                      value );
+          reader.moveUp();
+      }
+      StartProcessCommand cmd = new StartProcessCommand();
+      cmd.setProcessId( processId );
+      cmd.setParameters( params );
 
-            HashMap<String, Object> params = new HashMap<String, Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String identifier = reader.getAttribute( "identifier" );
-                reader.moveDown();
-                Object value = readItem( reader,
-                                         context,
-                                         null );
-                reader.moveUp();
-                params.put( identifier,
-                            value );
-                reader.moveUp();
-            }
-            StartProcessCommand cmd = new StartProcessCommand();
-            cmd.setProcessId( processId );
-            cmd.setParameters( params );
+      return cmd;
+  }
 
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( StartProcessCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( StartProcessCommand.class );
-        }
-    }
+public static class SignalEventConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class SignalEventConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public SignalEventConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public SignalEventConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      SignalEventCommand cmd = (SignalEventCommand) object;
+      long processInstanceId = cmd.getProcessInstanceId();
+      String eventType = cmd.getEventType();
+      Object event = cmd.getEvent();
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            SignalEventCommand cmd = (SignalEventCommand) object;
-            long processInstanceId = cmd.getProcessInstanceId();
-            String eventType = cmd.getEventType();
-            Object event = cmd.getEvent();
+      if ( processInstanceId != -1 ) {
+          writer.addAttribute( "process-instance-id",
+                               Long.toString( processInstanceId ) );
+      }
 
-            if ( processInstanceId != -1 ) {
-                writer.addAttribute( "process-instance-id",
-                                     Long.toString( processInstanceId ) );
-            }
+      writer.addAttribute( "event-type",
+                           eventType );
 
-            writer.addAttribute( "event-type",
-                                 eventType );
+      writeItem( event,
+                 context,
+                 writer );
+  }
 
-            writeItem( event,
-                       context,
-                       writer );
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String processInstanceId = reader.getAttribute( "process-instance-id" );
+      String eventType = reader.getAttribute( "event-type" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String processInstanceId = reader.getAttribute( "process-instance-id" );
-            String eventType = reader.getAttribute( "event-type" );
+      reader.moveDown();
+      Object event = readItem( reader,
+                               context,
+                               null );
+      reader.moveUp();
 
-            reader.moveDown();
-            Object event = readItem( reader,
-                                     context,
-                                     null );
-            reader.moveUp();
+      Command cmd;
+      if ( processInstanceId != null ) {
+          cmd = CommandFactory.newSignalEvent( Long.parseLong( processInstanceId ),
+                                               eventType,
+                                               event );
+      } else {
+          cmd = CommandFactory.newSignalEvent( eventType,
+                                               event );
+      }
 
-            Command cmd;
-            if ( processInstanceId != null ) {
-                cmd = CommandFactory.newSignalEvent( Long.parseLong( processInstanceId ),
-                                                     eventType,
-                                                     event );
-            } else {
-                cmd = CommandFactory.newSignalEvent( eventType,
-                                                     event );
-            }
+      return cmd;
+  }
 
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( SignalEventCommand.class );
+  }
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( SignalEventCommand.class );
-        }
+}
 
-    }
+public static class CompleteWorkItemConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class CompleteWorkItemConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public CompleteWorkItemConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public CompleteWorkItemConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      CompleteWorkItemCommand cmd = (CompleteWorkItemCommand) object;
+      writer.addAttribute( "id",
+                           Long.toString( cmd.getWorkItemId() ) );
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            CompleteWorkItemCommand cmd = (CompleteWorkItemCommand) object;
-            writer.addAttribute( "id",
-                                 Long.toString( cmd.getWorkItemId() ) );
+      for ( Entry<String, Object> entry : cmd.getResults().entrySet() ) {
+          writer.startNode( "result" );
+          writer.addAttribute( "identifier",
+                               entry.getKey() );
+          writeItem( entry.getValue(),
+                     context,
+                     writer );
+          writer.endNode();
+      }
+  }
 
-            for ( Entry<String, Object> entry : cmd.getResults().entrySet() ) {
-                writer.startNode( "result" );
-                writer.addAttribute( "identifier",
-                                     entry.getKey() );
-                writeItem( entry.getValue(),
-                           context,
-                           writer );
-                writer.endNode();
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String id = reader.getAttribute( "id" );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String id = reader.getAttribute( "id" );
+      Map<String, Object> results = new HashMap<String, Object>();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          String identifier = reader.getAttribute( "identifier" );
+          reader.moveDown();
+          Object value = readItem( reader,
+                                   context,
+                                   null );
+          reader.moveUp();
+          results.put( identifier,
+                       value );
+          reader.moveUp();
+      }
 
-            Map<String, Object> results = new HashMap<String, Object>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                String identifier = reader.getAttribute( "identifier" );
-                reader.moveDown();
-                Object value = readItem( reader,
-                                         context,
-                                         null );
-                reader.moveUp();
-                results.put( identifier,
-                             value );
-                reader.moveUp();
-            }
+      Command cmd = CommandFactory.newCompleteWorkItem( Long.parseLong( id ),
+                                                        results );
 
-            Command cmd = CommandFactory.newCompleteWorkItem( Long.parseLong( id ),
-                                                              results );
+      return cmd;
+  }
 
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( CompleteWorkItemCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( CompleteWorkItemCommand.class );
-        }
-    }
+public static class AbortWorkItemConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class AbortWorkItemConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public AbortWorkItemConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public AbortWorkItemConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
+      writer.addAttribute( "id",
+                           Long.toString( cmd.getWorkItemId() ) );
+  }
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            AbortWorkItemCommand cmd = (AbortWorkItemCommand) object;
-            writer.addAttribute( "id",
-                                 Long.toString( cmd.getWorkItemId() ) );
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      String id = reader.getAttribute( "id" );
+      Command cmd = CommandFactory.newAbortWorkItem( Long.parseLong( id ) );
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            String id = reader.getAttribute( "id" );
-            Command cmd = CommandFactory.newAbortWorkItem( Long.parseLong( id ) );
+      return cmd;
+  }
 
-            return cmd;
-        }
+  public boolean canConvert(Class clazz) {
+      return clazz.equals( AbortWorkItemCommand.class );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return clazz.equals( AbortWorkItemCommand.class );
-        }
-    }
+public static class BatchExecutionResultConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class BatchExecutionResultConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public BatchExecutionResultConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public BatchExecutionResultConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      ExecutionResults result = (ExecutionResults) object;
+      for ( String identifier : result.getIdentifiers() ) {
+          writer.startNode( "result" );
+          writer.addAttribute( "identifier",
+                               identifier );
+          Object value = result.getValue( identifier );
+          writeItem( value,
+                     context,
+                     writer );
+          writer.endNode();
+      }
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            ExecutionResults result = (ExecutionResults) object;
-            for ( String identifier : result.getIdentifiers() ) {
-                writer.startNode( "result" );
-                writer.addAttribute( "identifier",
-                                     identifier );
-                Object value = result.getValue( identifier );
-                writeItem( value,
-                           context,
-                           writer );
-                writer.endNode();
-            }
+      for ( String identifier : ((ExecutionResultImpl) result).getFactHandles().keySet() ) {
+          Object handle = result.getFactHandle( identifier );
+          if ( handle instanceof FactHandle ) {
+              writer.startNode( "fact-handle" );
+              writer.addAttribute( "identifier",
+                                   identifier );
+              writer.addAttribute( "external-form",
+                                   ((FactHandle) handle).toExternalForm() );
 
-            for ( String identifier : ((ExecutionResultImpl) result).getFactHandles().keySet() ) {
-                Object handle = result.getFactHandle( identifier );
-                if ( handle instanceof FactHandle ) {
-                    writer.startNode( "fact-handle" );
-                    writer.addAttribute( "identifier",
-                                         identifier );
-                    writer.addAttribute( "external-form",
-                                         ((FactHandle) handle).toExternalForm() );
+              writer.endNode();
+          } else if ( handle instanceof Collection ) {
+              writer.startNode( "fact-handles" );
+              writer.addAttribute( "identifier",
+                                   identifier );
+              for ( FactHandle factHandle : (Collection<FactHandle>) handle ) {
+                  writer.startNode( "fact-handle" );
+                  writer.addAttribute( "external-form",
+                                       ((FactHandle) factHandle).toExternalForm() );
+                  writer.endNode();
+              }
 
-                    writer.endNode();
-                } else if ( handle instanceof Collection ) {
-                    writer.startNode( "fact-handles" );
-                    writer.addAttribute( "identifier",
-                                         identifier );
-                    for ( FactHandle factHandle : (Collection<FactHandle>) handle ) {
-                        writer.startNode( "fact-handle" );
-                        writer.addAttribute( "external-form",
-                                             ((FactHandle) factHandle).toExternalForm() );
-                        writer.endNode();
-                    }
+              writer.endNode();
+          }
 
-                    writer.endNode();
-                }
+      }
+  }
 
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      ExecutionResultImpl result = new ExecutionResultImpl();
+      Map results = result.getResults();
+      Map facts = result.getFactHandles();
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            ExecutionResultImpl result = new ExecutionResultImpl();
-            Map results = result.getResults();
-            Map facts = result.getFactHandles();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          if ( reader.getNodeName().equals( "result" ) ) {
+              String identifier = reader.getAttribute( "identifier" );
+              reader.moveDown();
+              Object value = readItem( reader,
+                                       context,
+                                       null );
+              results.put( identifier,
+                           value );
+              reader.moveUp();
+              reader.moveUp();
+          } else if ( reader.getNodeName().equals( "fact-handle" ) ) {
+              String identifier = reader.getAttribute( "identifier" );
+              facts.put( identifier,
+                         new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
+          } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
+              String identifier = reader.getAttribute( "identifier" );
+              List<FactHandle> list = new ArrayList();
+              while ( reader.hasMoreChildren() ) {
+                  reader.moveDown();
+                  list.add( new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
+                  reader.moveUp();
+              }
+              facts.put( identifier,
+                         list );
+          } else {
+              throw new IllegalArgumentException( "Element '" + reader.getNodeName() + "' is not supported here" );
+          }
+      }
 
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                if ( reader.getNodeName().equals( "result" ) ) {
-                    String identifier = reader.getAttribute( "identifier" );
-                    reader.moveDown();
-                    Object value = readItem( reader,
-                                             context,
-                                             null );
-                    results.put( identifier,
-                                 value );
-                    reader.moveUp();
-                    reader.moveUp();
-                } else if ( reader.getNodeName().equals( "fact-handle" ) ) {
-                    String identifier = reader.getAttribute( "identifier" );
-                    facts.put( identifier,
-                               new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
-                } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
-                    String identifier = reader.getAttribute( "identifier" );
-                    List<FactHandle> list = new ArrayList();
-                    while ( reader.hasMoreChildren() ) {
-                        reader.moveDown();
-                        list.add( new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
-                        reader.moveUp();
-                    }
-                    facts.put( identifier,
-                               list );
-                } else {
-                    throw new IllegalArgumentException( "Element '" + reader.getNodeName() + "' is not supported here" );
-                }
-            }
+      return result;
+  }
 
-            return result;
-        }
+  public boolean canConvert(Class clazz) {
+      return ExecutionResults.class.isAssignableFrom( clazz );
+  }
+}
 
-        public boolean canConvert(Class clazz) {
-            return ExecutionResults.class.isAssignableFrom( clazz );
-        }
-    }
+public static class QueryResultsConverter extends AbstractCollectionConverter
+  implements
+  Converter {
 
-    public static class QueryResultsConverter extends AbstractCollectionConverter
-        implements
-        Converter {
+  public QueryResultsConverter(XStream xstream) {
+      super( xstream.getMapper() );
+  }
 
-        public QueryResultsConverter(Mapper mapper) {
-            super( mapper );
-        }
+  public void marshal(Object object,
+                      HierarchicalStreamWriter writer,
+                      MarshallingContext context) {
+      QueryResults results = (QueryResults) object;
 
-        public void marshal(Object object,
-                            HierarchicalStreamWriter writer,
-                            MarshallingContext context) {
-            QueryResults results = (QueryResults) object;
+      // write out identifiers
+      List<String> originalIds = Arrays.asList( results.getIdentifiers() );
+      List<String> actualIds = new ArrayList();
+      if ( results instanceof NativeQueryResults ) {
+          for ( String identifier : originalIds ) {
+              // we don't want to marshall the query parameters
+              Declaration declr = ((NativeQueryResults) results).getDeclarations().get( identifier );
+              ObjectType objectType = declr.getPattern().getObjectType();
+              if ( objectType instanceof ClassObjectType ) {
+                  if ( ((ClassObjectType) objectType).getClassType() == DroolsQuery.class ) {
+                      continue;
+                  }
+              }
+              actualIds.add( identifier );
+          }
+      }
 
-            // write out identifiers
-            List<String> originalIds = Arrays.asList( results.getIdentifiers() );
-            List<String> actualIds = new ArrayList();
-            if ( results instanceof NativeQueryResults ) {
-                for ( String identifier : originalIds ) {
-                    // we don't want to marshall the query parameters
-                    Declaration declr = ((NativeQueryResults) results).getDeclarations().get( identifier );
-                    ObjectType objectType = declr.getPattern().getObjectType();
-                    if ( objectType instanceof ClassObjectType ) {
-                        if ( ((ClassObjectType) objectType).getClassType() == DroolsQuery.class ) {
-                            continue;
-                        }
-                    }
-                    actualIds.add( identifier );
-                }
-            }
+      String[] identifiers = actualIds.toArray( new String[actualIds.size()] );
 
-            String[] identifiers = actualIds.toArray( new String[actualIds.size()] );
+      writer.startNode( "identifiers" );
+      for ( int i = 0; i < identifiers.length; i++ ) {
+          writer.startNode( "identifier" );
+          writer.setValue( identifiers[i] );
+          writer.endNode();
+      }
+      writer.endNode();
 
-            writer.startNode( "identifiers" );
-            for ( int i = 0; i < identifiers.length; i++ ) {
-                writer.startNode( "identifier" );
-                writer.setValue( identifiers[i] );
-                writer.endNode();
-            }
-            writer.endNode();
+      for ( QueryResultsRow result : results ) {
+          writer.startNode( "row" );
+          for ( int i = 0; i < identifiers.length; i++ ) {
+              Object value = result.get( identifiers[i] );
+              FactHandle factHandle = result.getFactHandle( identifiers[i] );
+              writeItem( value,
+                         context,
+                         writer );
+              writer.startNode( "fact-handle" );
+              writer.addAttribute( "external-form",
+                                   ((FactHandle) factHandle).toExternalForm() );
+              writer.endNode();
+          }
+          writer.endNode();
+      }
+  }
 
-            for ( QueryResultsRow result : results ) {
-                writer.startNode( "row" );
-                for ( int i = 0; i < identifiers.length; i++ ) {
-                    Object value = result.get( identifiers[i] );
-                    FactHandle factHandle = result.getFactHandle( identifiers[i] );
-                    writeItem( value,
-                               context,
-                               writer );
-                    writer.startNode( "fact-handle" );
-                    writer.addAttribute( "external-form",
-                                         ((FactHandle) factHandle).toExternalForm() );
-                    writer.endNode();
-                }
-                writer.endNode();
-            }
-        }
+  public Object unmarshal(HierarchicalStreamReader reader,
+                          UnmarshallingContext context) {
+      reader.moveDown();
+      List<String> list = new ArrayList<String>();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          list.add( reader.getValue() );
+          reader.moveUp();
+      }
+      reader.moveUp();
 
-        public Object unmarshal(HierarchicalStreamReader reader,
-                                UnmarshallingContext context) {
-            reader.moveDown();
-            List<String> list = new ArrayList<String>();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                list.add( reader.getValue() );
-                reader.moveUp();
-            }
-            reader.moveUp();
+      HashMap<String, Integer> identifiers = new HashMap<String, Integer>();
+      for ( int i = 0; i < list.size(); i++ ) {
+          identifiers.put( list.get( i ),
+                           i );
+      }
 
-            HashMap<String, Integer> identifiers = new HashMap<String, Integer>();
-            for ( int i = 0; i < list.size(); i++ ) {
-                identifiers.put( list.get( i ),
-                                 i );
-            }
+      ArrayList<ArrayList<Object>> results = new ArrayList();
+      ArrayList<ArrayList<FactHandle>> resultHandles = new ArrayList();
+      while ( reader.hasMoreChildren() ) {
+          reader.moveDown();
+          ArrayList objects = new ArrayList();
+          ArrayList<FactHandle> handles = new ArrayList();
+          while ( reader.hasMoreChildren() ) {
+              reader.moveDown();
+              Object object = readItem( reader,
+                                        context,
+                                        null );
+              reader.moveUp();
 
-            ArrayList<ArrayList<Object>> results = new ArrayList();
-            ArrayList<ArrayList<FactHandle>> resultHandles = new ArrayList();
-            while ( reader.hasMoreChildren() ) {
-                reader.moveDown();
-                ArrayList objects = new ArrayList();
-                ArrayList<FactHandle> handles = new ArrayList();
-                while ( reader.hasMoreChildren() ) {
-                    reader.moveDown();
-                    Object object = readItem( reader,
-                                              context,
-                                              null );
-                    reader.moveUp();
+              reader.moveDown();
+              FactHandle handle = new DefaultFactHandle( reader.getAttribute( "external-form" ) );
+              reader.moveUp();
 
-                    reader.moveDown();
-                    FactHandle handle = new DefaultFactHandle( reader.getAttribute( "external-form" ) );
-                    reader.moveUp();
+              objects.add( object );
+              handles.add( handle );
+          }
+          results.add( objects );
+          resultHandles.add( handles );
+          reader.moveUp();
+      }
 
-                    objects.add( object );
-                    handles.add( handle );
-                }
-                results.add( objects );
-                resultHandles.add( handles );
-                reader.moveUp();
-            }
+      return new FlatQueryResults( identifiers,
+                                   results,
+                                   resultHandles );
+  }
 
-            return new FlatQueryResults( identifiers,
-                                         results,
-                                         resultHandles );
-        }
-
-        public boolean canConvert(Class clazz) {
-            return QueryResults.class.isAssignableFrom( clazz );
-        }
-    }    
+  public boolean canConvert(Class clazz) {
+      return QueryResults.class.isAssignableFrom( clazz );
+  }
+}   
 }



More information about the jboss-svn-commits mailing list