[jboss-svn-commits] JBL Code SVN: r21564 - in labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb: src/main/java/org/drools/dataloaders/jaxb and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 15 04:23:13 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-08-15 04:23:11 -0400 (Fri, 15 Aug 2008)
New Revision: 21564

Added:
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xml
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xsd
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test_Jaxb.drl
Modified:
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbHelper.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbStatefulSession.java
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/jaxb/DroolsJaxbTest.java
Log:
JBRULES-1686 XSD model generation and JAXB DataLoader
-XSD models now work :)

Modified: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath	2008-08-15 07:54:36 UTC (rev 21563)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath	2008-08-15 08:23:11 UTC (rev 21564)
@@ -14,7 +14,21 @@
   <classpathentry kind="src" path="/drools-compiler"/>
   <classpathentry kind="src" path="/drools-core"/>
   <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0/antlr-runtime-3.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/stringtemplate/3.1-b1/stringtemplate-3.1-b1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-project/2.0/maven-project-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-profile/2.0/maven-profile-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-model/2.0/maven-model-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/codehaus/plexus/plexus-container-default/1.0-alpha-8/plexus-container-default-1.0-alpha-8.jar"/>
+  <classpathentry kind="var" path="M2_REPO/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-artifact-manager/2.0/maven-artifact-manager-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-repository-metadata/2.0/maven-repository-metadata-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/maven-artifact/2.0/maven-artifact-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/maven/wagon/wagon-provider-api/1.0-alpha-5/wagon-provider-api-1.0-alpha-5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.0.1/antlr-3.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
   <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbHelper.java	2008-08-15 07:54:36 UTC (rev 21563)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbHelper.java	2008-08-15 08:23:11 UTC (rev 21564)
@@ -1,4 +1,5 @@
 package org.drools.dataloaders.jaxb;
+
 /*
  * Copyright 2005 JBoss Inc
  *
@@ -48,6 +49,7 @@
 import com.sun.codemodel.CodeWriter;
 import com.sun.codemodel.JCodeModel;
 import com.sun.codemodel.JPackage;
+import com.sun.tools.xjc.BadCommandLineException;
 import com.sun.tools.xjc.ErrorReceiver;
 import com.sun.tools.xjc.ModelLoader;
 import com.sun.tools.xjc.Options;
@@ -55,11 +57,20 @@
 import com.sun.tools.xjc.outline.Outline;
 
 public class DroolsJaxbHelper {
-    public static String[] addModel(Reader reader, PackageBuilder pkgBuilder, Options xjcOpts, String systemId) throws IOException {
+    public static String[] addModel(Reader reader,
+                                    PackageBuilder pkgBuilder,
+                                    Options xjcOpts,
+                                    String systemId) throws IOException {
         InputSource source = new InputSource( new CachingRewindableReader( reader ) );
         source.setSystemId( systemId.trim().startsWith( "." ) ? systemId : "." + systemId );
 
         xjcOpts.addGrammar( source );
+        
+        try {
+            xjcOpts.parseArguments( new String[] { "-npa" } );
+        } catch ( BadCommandLineException e ) {
+            throw new IllegalArgumentException("Unable to parse arguments", e);
+        }
 
         ErrorReceiver errorReceiver = new JaxbErrorReceiver4Drools();
 
@@ -77,66 +88,75 @@
         List<String> classNames = new ArrayList<String>();
         for ( Entry<String, byte[]> entry : codeWriter.getMap().entrySet() ) {
             String name = entry.getKey();
-            
-            if ( name.endsWith( "package-info.java" ) ) {
-                // this has no content and causes nullpointer in JDT
-                continue;
-            }                        
-            
+
             String pkgName = null;
             int dotPos = name.lastIndexOf( '.' );
-            pkgName = name.substring( 0, dotPos );     
+            pkgName = name.substring( 0,
+                                      dotPos );
+
+            if ( !name.endsWith( "package-info.java" ) ) {
+                classNames.add( pkgName );
+            }
             
-            classNames.add( pkgName );
-            
             dotPos = pkgName.lastIndexOf( '.' );
             if ( dotPos != -1 ) {
-                pkgName = pkgName.substring( 0, dotPos );
-            } 
-            
+                pkgName = pkgName.substring( 0,
+                                             dotPos );
+            }
+
             PackageRegistry pkgReg = pkgBuilder.getPackageRegistry( pkgName );
             if ( pkgReg == null ) {
                 pkgBuilder.addPackage( new PackageDescr( pkgName ) );
                 pkgReg = pkgBuilder.getPackageRegistry( pkgName );
             }
-            
-            JavaDialect dialect = ( JavaDialect ) pkgReg.getDialectCompiletimeRegistry().getDialect( "java" );
+
+            JavaDialect dialect = (JavaDialect) pkgReg.getDialectCompiletimeRegistry().getDialect( "java" );
             dialects.add( dialect );
-            dialect.addSrc( convertToResource( entry.getKey() ) , entry.getValue() );            
+            dialect.addSrc( convertToResource( entry.getKey() ),
+                            entry.getValue() );
         }
-        
+
         pkgBuilder.compileAll();
-        pkgBuilder.updateResults();  
-        
-        return (String[]) classNames.toArray( new String[ classNames.size() ] );       
+        pkgBuilder.updateResults();
+
+        return (String[]) classNames.toArray( new String[classNames.size()] );
     }
-    
-    public static JAXBContext newInstance(String[] classNames, RuleBase rb) throws JAXBException  {
-        return newInstance(classNames, Collections.<String,Object>emptyMap(), rb );
-    }    
-    
-    public static JAXBContext newInstance(String[] classNames, Map<String,?> properties, RuleBase rb) throws JAXBException {
-        ClassLoader classLoader = ((InternalRuleBase) rb).getCompositePackageClassLoader();
-        
+
+    public static JAXBContext newInstance(String[] classNames,
+                                          RuleBase rb) throws JAXBException {
+        return newInstance( classNames,
+                            Collections.<String, Object> emptyMap(),
+                            rb );
+    }
+
+    public static JAXBContext newInstance(String[] classNames,
+                                          Map<String, ? > properties,
+                                          RuleBase rb) throws JAXBException {
+        ClassLoader classLoader = ((InternalRuleBase) rb).getRootClassLoader();
+
         Class[] classes = new Class[classNames.length];
         int i = 0;
         try {
-            for (i = 0; i < classNames.length; i++ ) {
+            for ( i = 0; i < classNames.length; i++ ) {
                 classes[i] = classLoader.loadClass( classNames[i] );
-                
             }
-        } catch ( ClassNotFoundException e) {
-            throw new JAXBException( "Unable to resolve class '" + classNames[i] + "'", e);
-        }
+        } catch ( ClassNotFoundException e ) {
+            throw new JAXBException( "Unable to resolve class '" + classNames[i] + "'",
+                                     e );
+        }        
 
-        return JAXBContext.newInstance( classes, properties );
+        return JAXBContext.newInstance( classes,
+                                        properties );
     }
-    
+
     private static String convertToResource(String string) {
         int lastDot = string.lastIndexOf( '.' );
-        return string.substring( 0, lastDot ).replace( '.', '/' ) + string.substring( lastDot, string.length() );
-    }     
-    
+        return string.substring( 0,
+                                 lastDot ).replace( '.',
+                                                    '/' ) + string.substring( lastDot,
+                                                                              string.length() );
+    }
+
     public static class MapVfsCodeWriter extends CodeWriter {
 
         private final Map<String, byte[]> map;
@@ -158,7 +178,7 @@
 
             if ( this.currentBaos != null ) {
                 this.currentBaos.close();
-                this.map.put( this.currentPath ,
+                this.map.put( this.currentPath,
                               this.currentBaos.toByteArray() );
             }
 
@@ -175,14 +195,14 @@
         public void close() throws IOException {
             if ( this.currentBaos != null ) {
                 this.currentBaos.close();
-                this.map.put( this.currentPath ,
+                this.map.put( this.currentPath,
                               this.currentBaos.toByteArray() );
             }
         }
 
         public Map<String, byte[]> getMap() {
             return this.map;
-        }     
+        }
 
     }
 
@@ -205,55 +225,61 @@
         public void info(SAXParseException e) {
             e.printStackTrace();
         }
-    }    
-    
+    }
+
     public static class CachingRewindableReader extends Reader {
-        private Reader source;
-        private boolean sourceClosed;
+        private Reader                 source;
+        private boolean                sourceClosed;
         private RewindableStringReader cache;
-        private StringBuilder strBuilder;
-        
+        private StringBuilder          strBuilder;
+
         public CachingRewindableReader(Reader source) {
             this.source = source;
             this.strBuilder = new StringBuilder();
-        }        
+        }
 
         public int read(char[] cbuf,
                         int off,
-                        int len) throws IOException {    
+                        int len) throws IOException {
             int value = 0;
             if ( this.cache == null ) {
-                value = this.source.read( cbuf, off, len );
+                value = this.source.read( cbuf,
+                                          off,
+                                          len );
                 if ( value != -1 ) {
                     // keep appening to the stringBuilder until we are at the end
-                    this.strBuilder.append( cbuf, off, value );
+                    this.strBuilder.append( cbuf,
+                                            off,
+                                            value );
                 } else {
                     // we are at the end, so switch to cache
-                    this.cache = new RewindableStringReader( strBuilder.toString() );                    
+                    this.cache = new RewindableStringReader( strBuilder.toString() );
                 }
-            } else {        
-                value = this.cache.read( cbuf, off, len );
+            } else {
+                value = this.cache.read( cbuf,
+                                         off,
+                                         len );
             }
             return value;
-        }                
-        
+        }
+
         public void close() throws IOException {
-            if ( !sourceClosed  ) {
+            if ( !sourceClosed ) {
                 // close the source, we only do this once.
                 this.source.close();
                 this.sourceClosed = true;
             }
-            
-            if ( cache == null ) {  
+
+            if ( cache == null ) {
                 // switch to cache if we haven't already
                 this.cache = new RewindableStringReader( strBuilder.toString() );
             } else {
                 // reset the cache, so it can be read again.
                 this.cache.reset();
             }
-        }        
+        }
     }
-    
+
     public static class RewindableStringReader extends StringReader {
         public RewindableStringReader(String s) {
             super( s );
@@ -266,5 +292,5 @@
                 e.printStackTrace();
             }
         }
-    }      
+    }
 }

Modified: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbStatefulSession.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbStatefulSession.java	2008-08-15 07:54:36 UTC (rev 21563)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbStatefulSession.java	2008-08-15 08:23:11 UTC (rev 21564)
@@ -38,9 +38,19 @@
     private Serializable            getterExpr;
 
     public DroolsJaxbStatefulSession(StatefulSession session,
+                                     Unmarshaller unmarshaller) {
+        this( session,
+              unmarshaller,
+              new DroolsJaxbConfiguration() );
+    }
+
+    public DroolsJaxbStatefulSession(StatefulSession session,
                                      Unmarshaller unmarshaller,
                                      DroolsJaxbConfiguration configuration) {
-
+        this.session = session;
+        this.unmarshaller = unmarshaller;
+        this.configuration = configuration;
+        
         if ( this.configuration.getIterableGetter() != null ) {
             final ParserContext parserContext = new ParserContext();
             parserContext.setStrictTypeEnforcement( false );
@@ -52,8 +62,10 @@
 
     public Map insertUnmarshalled(Reader reader) throws JAXBException {
 
-        JAXBElement elm = (JAXBElement) unmarshaller.unmarshal( reader );
-        Object object = elm.getValue().getClass().getName();
+        Object object = this.unmarshaller.unmarshal( reader );
+        if ( object instanceof JAXBElement ) {
+            object = ((JAXBElement)object).getValue().getClass().getName();
+        }
         Map handles = new HashMap<FactHandle, Object>();
         if ( object == null ) {
             return handles;

Modified: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/jaxb/DroolsJaxbTest.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/jaxb/DroolsJaxbTest.java	2008-08-15 07:54:36 UTC (rev 21563)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/jaxb/DroolsJaxbTest.java	2008-08-15 08:23:11 UTC (rev 21564)
@@ -1,4 +1,5 @@
 package org.drools.dataloaders.jaxb;
+
 /*
  * Copyright 2005 JBoss Inc
  *
@@ -17,15 +18,21 @@
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.stream.StreamSource;
 
 import junit.framework.TestCase;
 
+import org.drools.FactHandle;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
 import org.drools.compiler.PackageBuilder;
 
 import com.sun.tools.xjc.Language;
@@ -33,25 +40,128 @@
 
 public class DroolsJaxbTest extends TestCase {
 
-    public void test1() throws Exception {
+    public void testModelLoad() throws Exception {
         Options xjcOpts = new Options();
         xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
         PackageBuilder pkgBuilder = new PackageBuilder();
-        
+
         InputStream stream = getClass().getResourceAsStream( "test.xsd" );
-        String[] classNames = DroolsJaxbHelper.addModel( new InputStreamReader( stream ), pkgBuilder, xjcOpts, "xsd" );        
-        
+        String[] classNames = DroolsJaxbHelper.addModel( new InputStreamReader( stream ),
+                                                         pkgBuilder,
+                                                         xjcOpts,
+                                                         "xsd" );
+
         assertFalse( pkgBuilder.hasErrors() );
-        
+
         RuleBase rb = RuleBaseFactory.newRuleBase();
         rb.addPackage( pkgBuilder.getPackage() );
+
+        JAXBContext jaxbCtx = DroolsJaxbHelper.newInstance( classNames,
+                                                            rb );
+        Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+        JAXBElement elm = ( JAXBElement ) unmarshaller.unmarshal( getClass().getResourceAsStream( "data.xml" ) );
+       
+        assertEquals( "com.oracle.sample3.USAddress",
+                      elm.getValue().getClass().getName() );        
+    }
+
+    public void testDirectRoot() throws Exception {
+        Options xjcOpts = new Options();
+        xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+        PackageBuilder pkgBuilder = new PackageBuilder();
+
+        InputStream stream = getClass().getResourceAsStream( "order.xsd" );
+        String[] classNames = DroolsJaxbHelper.addModel( new InputStreamReader( stream ),
+                                                         pkgBuilder,
+                                                         xjcOpts,
+                                                         "xsd" );
+
+        assertFalse( pkgBuilder.hasErrors() );
         
-        JAXBContext jaxbCtx  = DroolsJaxbHelper.newInstance( classNames, rb );
+        pkgBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Jaxb.drl" ) ) );
+
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        rb.addPackages( pkgBuilder.getPackages() );
+
+        JAXBContext jaxbCtx = DroolsJaxbHelper.newInstance( classNames,
+                                                            rb );
+        //        
+        Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+
+        StatefulSession session = rb.newStatefulSession();
+        List list1 = new ArrayList();
+        session.setGlobal( "list1", list1 );        
+                
+        DroolsJaxbStatefulSession dataLoader = new DroolsJaxbStatefulSession( session,
+                                                                              unmarshaller );       
         
+        Map<FactHandle, Object> handles = dataLoader.insertUnmarshalled( new InputStreamReader( getClass().getResourceAsStream( "order.xml" ) ) );
+
+        session.fireAllRules();
+
+        assertEquals( 1,
+                      handles.size() );
+        assertEquals( 1,
+                      list1.size() );
+
+        assertEquals( "org.drools.model.order.Order",
+                      list1.get( 0 ).getClass().getName() );
+    }
+
+    
+    public void testNestedIterable() throws Exception {
+        Options xjcOpts = new Options();
+        xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+        PackageBuilder pkgBuilder = new PackageBuilder();
+
+        InputStream stream = getClass().getResourceAsStream( "order.xsd" );
+        String[] classNames = DroolsJaxbHelper.addModel( new InputStreamReader( stream ),
+                                                         pkgBuilder,
+                                                         xjcOpts,
+                                                         "xsd" );
+
+        assertFalse( pkgBuilder.hasErrors() );
+        
+        pkgBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Jaxb.drl" ) ) );
+
+        RuleBase rb = RuleBaseFactory.newRuleBase();
+        rb.addPackages( pkgBuilder.getPackages() );
+
+        JAXBContext jaxbCtx = DroolsJaxbHelper.newInstance( classNames,
+                                                            rb );
+        //        
         Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
-        JAXBElement elm = (JAXBElement) unmarshaller.unmarshal( getClass().getResourceAsStream( "data.xml" ) );
+
+        StatefulSession session = rb.newStatefulSession();
+        List list1 = new ArrayList();
+        List list2 = new ArrayList();
+        session.setGlobal( "list1", list1 );
+        session.setGlobal( "list2", list2 );
         
-        assertEquals( "com.oracle.sample3.USAddress", elm.getValue().getClass().getName() );
-    }        
-    
+        DroolsJaxbConfiguration configuration = new DroolsJaxbConfiguration();
+        configuration.setIterableGetter( "this.orderItem" );
+        
+        DroolsJaxbStatefulSession dataLoader = new DroolsJaxbStatefulSession( session,
+                                                                              unmarshaller,
+                                                                              configuration );
+                     
+        Map<FactHandle, Object> handles = dataLoader.insertUnmarshalled( new InputStreamReader( getClass().getResourceAsStream( "order.xml" ) ) );
+
+        session.fireAllRules();
+
+        assertEquals( 2,
+                      handles.size() );
+        assertEquals( 1,
+                      list1.size() );
+        assertEquals( 1,
+                      list2.size() );        
+
+        assertEquals( "org.drools.model.order.Order$OrderItem",
+                      list1.get( 0 ).getClass().getName() );
+        
+        assertEquals( "org.drools.model.order.Order$OrderItem",
+                      list2.get( 0 ).getClass().getName() );
+        
+        assertNotSame( list1.get(0), list2.get(0) );
+    }    
 }

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xml	2008-08-15 08:23:11 UTC (rev 21564)
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<order xmlns="http://drools.org/model/order" 
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	   xsi:schemaLocation="http://drools.org/model/order order.xsd">
+    <order-item>
+        <product-id>111</product-id>
+        <quantity>2</quantity>
+        <price>8.90</price>
+    </order-item>
+    <order-item>
+        <product-id>222</product-id>
+        <quantity>7</quantity>
+        <price>5.20</price>
+    </order-item>
+</order>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xsd
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/order.xsd	2008-08-15 08:23:11 UTC (rev 21564)
@@ -0,0 +1,43 @@
+<xsd:schema xmlns:order="http://drools.org/model/order" 
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+	        targetNamespace="http://drools.org/model/order"
+	        elementFormDefault="qualified" >
+	        
+        
+	<xsd:element name="order">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:element name="order-item" minOccurs="0" maxOccurs="unbounded">
+					<xsd:complexType>
+						<xsd:sequence>
+							<xsd:element name="product-id" type="xsd:long" />
+							<xsd:element name="quantity" type="xsd:integer" />
+							<xsd:element name="price" type="xsd:decimal" />
+						</xsd:sequence>	
+					</xsd:complexType>
+				</xsd:element>
+			</xsd:sequence>
+		</xsd:complexType>		
+	</xsd:element>
+
+<!--
+	
+	<xsd:element name="order" type="order:OrderType" />
+	
+	<xsd:complexType name="OrderType">
+		<xsd:sequence>
+			<xsd:element name="orderItem" type="order:orderItemType" minOccurs="0" maxOccurs="unbounded" />
+		</xsd:sequence>
+	</xsd:complexType>	
+	
+	        
+	<xsd:complexType name="orderItem">	
+		<xsd:sequence>
+			<xsd:element name="product-id" type="xsd:long" />
+			<xsd:element name="quantity" type="xsd:integer" />
+			<xsd:element name="price" type="xsd:decimal" />
+		</xsd:sequence>
+	</xsd:complexType>	
+-->
+
+</xsd:schema>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test_Jaxb.drl
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test_Jaxb.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test_Jaxb.drl	2008-08-15 08:23:11 UTC (rev 21564)
@@ -0,0 +1,29 @@
+package org.drools.xxx
+
+import org.drools.model.order.Order
+import org.drools.model.order.Order.OrderItem
+
+global java.util.List list1;
+global java.util.List list2;
+
+
+rule orderRule
+when
+    $i : Order()
+then
+    list1.add( $i );
+end
+
+rule orderItemRule1
+when
+    $i : OrderItem( price > 6)
+then
+    list1.add( $i );
+end
+
+rule orderItemRule2
+when
+    $i : OrderItem( price < 6)
+then
+    list2.add( $i );
+end
\ No newline at end of file




More information about the jboss-svn-commits mailing list