[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