[jboss-svn-commits] JBL Code SVN: r21079 - in labs/jbossrules/trunk/drools-dataloaders: drools-dataloaders-jaxb and 18 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 17 01:52:50 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-07-17 01:52:50 -0400 (Thu, 17 Jul 2008)
New Revision: 21079

Added:
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.project
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/pom.xml
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbConfiguration.java
   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/main/resources/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/jaxb/
   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/resources/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/data.xml
   labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test.xsd
Modified:
   labs/jbossrules/trunk/drools-dataloaders/pom.xml
Log:
JBRULES-1686 XSD model generation and JAXB DataLoader

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.classpath	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,20 @@
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.0.3/jaxb-impl-2.0.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.0/jaxb-api-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.0.3/jaxb-xjc-2.0.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <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/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

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.project
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/.project	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,16 @@
+<projectDescription>
+  <name>drools-dataloaders-jaxb</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/pom.xml	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-dataloaders-jaxb</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: DataLoaders :: JAXB</name>
+  
+      <dependencies>
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-core</artifactId>
+            <version>${project.version}</version>  
+         </dependency>                     
+
+         <dependency>
+            <groupId>org.drools</groupId>
+            <artifactId>drools-compiler</artifactId>
+            <version>${project.version}</version>  
+         </dependency>   
+
+        <dependency>
+          <groupId>com.sun.xml.bind</groupId>
+          <artifactId>jaxb-impl</artifactId>
+          <version>2.0.3</version>
+        </dependency>  
+        
+        <dependency>
+          <groupId>com.sun.xml.bind</groupId>
+          <artifactId>jaxb-xjc</artifactId>
+          <version>2.0.3</version>
+        </dependency>                
+      </dependencies>     
+
+    <repositories>
+        <repository>
+            <id>dist.codehaus.org</id>
+            <url>http://dist.codehaus.org</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+            <releases>
+               <enabled>true</enabled>
+            </releases>
+        </repository>
+    </repositories>    
+</project>

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbConfiguration.java	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,22 @@
+package org.drools.dataloaders.jaxb;
+
+public class DroolsJaxbConfiguration {
+	private String iterableGetter; 		
+	
+	public DroolsJaxbConfiguration() {
+		this.iterableGetter = null;
+	}		
+	
+	public DroolsJaxbConfiguration(String iterableGetter) {
+		this.iterableGetter = iterableGetter;
+	}
+
+	public String getIterableGetter() {
+		return iterableGetter;
+	}
+
+	public void setIterableGetter(String iterableGetter) {
+		this.iterableGetter = iterableGetter;
+	}
+	
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbHelper.java	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,270 @@
+package org.drools.dataloaders.jaxb;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.drools.RuleBase;
+import org.drools.common.InternalRuleBase;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageRegistry;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXParseException;
+
+import com.sun.codemodel.CodeWriter;
+import com.sun.codemodel.JCodeModel;
+import com.sun.codemodel.JPackage;
+import com.sun.tools.xjc.ErrorReceiver;
+import com.sun.tools.xjc.ModelLoader;
+import com.sun.tools.xjc.Options;
+import com.sun.tools.xjc.model.Model;
+import com.sun.tools.xjc.outline.Outline;
+
+public class DroolsJaxbHelper {
+    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 );
+
+        ErrorReceiver errorReceiver = new JaxbErrorReceiver4Drools();
+
+        Model model = ModelLoader.load( xjcOpts,
+                                        new JCodeModel(),
+                                        errorReceiver );
+
+        final Outline outline = model.generateCode( xjcOpts,
+                                                    errorReceiver );
+
+        MapVfsCodeWriter codeWriter = new MapVfsCodeWriter();
+        model.codeModel.build( xjcOpts.createCodeWriter( codeWriter ) );
+
+        Set<JavaDialect> dialects = new HashSet<JavaDialect>();
+        List<String> classNames = new ArrayList<String>();
+        for ( Entry<String, byte[]> entry : codeWriter.getMap().entrySet() ) {
+            String name = entry.getKey();
+            
+            if ( name.endsWith( "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 );     
+            
+            classNames.add( pkgName );
+            
+            dotPos = pkgName.lastIndexOf( '.' );
+            if ( dotPos != -1 ) {
+                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" );
+            dialects.add( dialect );
+            dialect.addSrc( convertToResource( entry.getKey() ) , entry.getValue() );            
+        }
+        
+        pkgBuilder.compileAll();
+        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();
+        
+        Class[] classes = new Class[classNames.length];
+        int i = 0;
+        try {
+            for (i = 0; i < classNames.length; i++ ) {
+                classes[i] = classLoader.loadClass( classNames[i] );
+                
+            }
+        } catch ( ClassNotFoundException e) {
+            throw new JAXBException( "Unable to resolve class '" + classNames[i] + "'", e);
+        }
+
+        return JAXBContext.newInstance( classes, properties );
+    }
+    
+    private static String convertToResource(String string) {
+        int lastDot = string.lastIndexOf( '.' );
+        return string.substring( 0, lastDot ).replace( '.', '/' ) + string.substring( lastDot, string.length() );
+    }     
+    
+    public static class MapVfsCodeWriter extends CodeWriter {
+
+        private final Map<String, byte[]> map;
+
+        private ByteArrayOutputStream     currentBaos;
+        private String                    currentPath;
+
+        public MapVfsCodeWriter() {
+            this.map = new LinkedHashMap<String, byte[]>();
+        }
+
+        public OutputStream openBinary(JPackage pkg,
+                                       String fileName) throws IOException {
+            String pkgName = pkg.name();
+
+            if ( pkgName.length() != 0 ) {
+                pkgName += '.';
+            }
+
+            if ( this.currentBaos != null ) {
+                this.currentBaos.close();
+                this.map.put( this.currentPath ,
+                              this.currentBaos.toByteArray() );
+            }
+
+            this.currentPath = pkgName + fileName;
+            this.currentBaos = new ByteArrayOutputStream();
+
+            return new FilterOutputStream( this.currentBaos ) {
+                public void close() {
+                    // don't let this stream close
+                }
+            };
+        }
+
+        public void close() throws IOException {
+            if ( this.currentBaos != null ) {
+                this.currentBaos.close();
+                this.map.put( this.currentPath ,
+                              this.currentBaos.toByteArray() );
+            }
+        }
+
+        public Map<String, byte[]> getMap() {
+            return this.map;
+        }     
+
+    }
+
+    public static class JaxbErrorReceiver4Drools extends ErrorReceiver {
+
+        public String stage = "processing";
+
+        public void warning(SAXParseException e) {
+            e.printStackTrace();
+        }
+
+        public void error(SAXParseException e) {
+            e.printStackTrace();
+        }
+
+        public void fatalError(SAXParseException e) {
+            e.printStackTrace();
+        }
+
+        public void info(SAXParseException e) {
+            e.printStackTrace();
+        }
+    }    
+    
+    public static class CachingRewindableReader extends Reader {
+        private Reader source;
+        private boolean sourceClosed;
+        private RewindableStringReader cache;
+        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 value = 0;
+            if ( this.cache == null ) {
+                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 );
+                } else {
+                    // we are at the end, so switch to cache
+                    this.cache = new RewindableStringReader( strBuilder.toString() );                    
+                }
+            } else {        
+                value = this.cache.read( cbuf, off, len );
+            }
+            return value;
+        }                
+        
+        public void close() throws IOException {
+            if ( !sourceClosed  ) {
+                // close the source, we only do this once.
+                this.source.close();
+                this.sourceClosed = true;
+            }
+            
+            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 );
+        }
+
+        public void close() {
+            try {
+                reset();
+            } catch ( IOException e ) {
+                e.printStackTrace();
+            }
+        }
+    }      
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/main/java/org/drools/dataloaders/jaxb/DroolsJaxbStatefulSession.java	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,82 @@
+package org.drools.dataloaders.jaxb;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Reader;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import org.drools.FactHandle;
+import org.drools.StatefulSession;
+import org.mvel.MVEL;
+import org.mvel.ParserContext;
+import org.mvel.compiler.ExpressionCompiler;
+
+public class DroolsJaxbStatefulSession {
+    private Unmarshaller            unmarshaller;
+    private StatefulSession         session;
+    private DroolsJaxbConfiguration configuration;
+    private Serializable            getterExpr;
+
+    public DroolsJaxbStatefulSession(StatefulSession session,
+                                     Unmarshaller unmarshaller,
+                                     DroolsJaxbConfiguration configuration) {
+
+        if ( this.configuration.getIterableGetter() != null ) {
+            final ParserContext parserContext = new ParserContext();
+            parserContext.setStrictTypeEnforcement( false );
+
+            ExpressionCompiler compiler = new ExpressionCompiler( this.configuration.getIterableGetter() );
+            this.getterExpr = compiler.compile( parserContext );
+        }
+    }
+
+    public Map insertUnmarshalled(Reader reader) throws JAXBException {
+
+        JAXBElement elm = (JAXBElement) unmarshaller.unmarshal( reader );
+        Object object = elm.getValue().getClass().getName();
+        Map handles = new HashMap<FactHandle, Object>();
+        if ( object == null ) {
+            return handles;
+        }
+
+        if ( this.getterExpr != null ) {
+            Iterable it = (Iterable) MVEL.executeExpression( this.getterExpr,
+                                                             object );
+            if ( it != null ) {
+                for ( Object item : it ) {
+                    FactHandle handle = this.session.insert( item );
+                    handles.put( handle,
+                                 object );
+                }
+            }
+        } else {
+            FactHandle handle = this.session.insert( object );
+            handles.put( handle,
+                         object );
+
+        }
+
+        return handles;
+    }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/java/org/drools/dataloaders/jaxb/DroolsJaxbTest.java	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,57 @@
+package org.drools.dataloaders.jaxb;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Unmarshaller;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.compiler.PackageBuilder;
+
+import com.sun.tools.xjc.Language;
+import com.sun.tools.xjc.Options;
+
+public class DroolsJaxbTest extends TestCase {
+
+    public void test1() 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" );        
+        
+        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() );
+    }        
+    
+}

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/data.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/data.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/data.xml	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<myAddress xmlns="http://www.oracle.com/sample3/" 
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	     xsi:schemaLocation="http://www.oracle.com/sample3 sample3.xsd">
+	<name>James Bond</name>
+	<doorNumber>420</doorNumber>
+	<street>Oracle parkway</street>
+	<city>Redwood shores</city>
+	<state>CA</state>
+	<zip>94065</zip>
+	<country>United States</country>
+</myAddress>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test.xsd
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-dataloaders/drools-dataloaders-jaxb/src/test/resources/org/drools/dataloaders/jaxb/test.xsd	2008-07-17 05:52:50 UTC (rev 21079)
@@ -0,0 +1,29 @@
+<schema xmlns = "http://www.w3.org/2001/XMLSchema"
+        xmlns:exp="http://www.oracle.com/sample3/"
+        targetNamespace="http://www.oracle.com/sample3/"
+        elementFormDefault="qualified">
+ 
+   <complexType name="Address">
+      <sequence>
+         <element name="name" type="string"/>
+         <element name="doorNumber" type="short"/>
+         <element name="street" type="string"/>
+         <element name="city" type="string"/>
+      </sequence>
+   </complexType>
+ 
+  <complexType name="USAddress">
+    <complexContent>
+     <extension base="exp:Address">
+       <sequence>
+          <element name="state" type="string"/>
+          <element name="zip" type="integer"/>
+          <element name="country" type="string"/>
+       </sequence>
+     </extension>
+    </complexContent>
+  </complexType>
+ 
+  <element name="myAddress" type="exp:USAddress"/>
+ 
+</schema>

Modified: labs/jbossrules/trunk/drools-dataloaders/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-dataloaders/pom.xml	2008-07-17 04:35:24 UTC (rev 21078)
+++ labs/jbossrules/trunk/drools-dataloaders/pom.xml	2008-07-17 05:52:50 UTC (rev 21079)
@@ -14,6 +14,7 @@
   
   <modules>
       <module>drools-dataloaders-smooks</module>
+      <module>drools-dataloaders-jaxb</module>
   </modules>
   
 </project>




More information about the jboss-svn-commits mailing list