[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