You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2005/12/25 01:44:15 UTC

svn commit: r358956 - in /webservices/jaxme/branches: MAVEN/ MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/ MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/ MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generato...

Author: jochen
Date: Sat Dec 24 16:43:38 2005
New Revision: 358956

URL: http://svn.apache.org/viewcvs?rev=358956&view=rev
Log:
Added support for external binding files, based on a suggestion from
Ortwin Glueck.

Modified:
    webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java
    webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java
    webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java
    webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
    webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
    webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java
    webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
    webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
    webservices/jaxme/branches/MAVEN/status.xml
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
    webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java
    webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
    webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
    webservices/jaxme/branches/b0_5/status.xml

Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Generator.java Sat Dec 24 16:43:38 2005
@@ -17,11 +17,16 @@
 package org.apache.ws.jaxme.generator;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
+import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 /** <p>The Generator is a frontend for working with the
  * SchemaReaders, SourceWriters and whatever else.</p>
@@ -163,4 +168,13 @@
    * schemata.</p>
    */
   public EntityResolver getEntityResolver();
+
+    /** Sets the external schema bindings.
+     */
+  	public void addBindings(InputSource pSource)
+  			throws ParserConfigurationException, SAXException, IOException;
+
+  	/** Returns the external schema bindings, if any, or null.
+     */
+    public Document[] getBindings();
 }

Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/Main.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
  * 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.
-
  */
 package org.apache.ws.jaxme.generator;
 
@@ -23,6 +22,7 @@
 import org.apache.ws.jaxme.generator.impl.GeneratorImpl;
 import org.apache.ws.jaxme.generator.sg.SGFactoryChain;
 import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
+import org.xml.sax.InputSource;
 
 
 /** <p>A command line interface for the JaxMe source generator.</p>
@@ -50,6 +50,9 @@
     ps.println();
     ps.println("Reads a schema definition from the given <inputfile>");
     ps.println("Possible options are:");
+    ps.println("  --bindingFile=<filename> Adds an external binding file.");
+    ps.println("                           Multiple external binding files may");
+    ps.println("                           be used by repeating this option.");
     ps.println("  --force                  Force overwriting files");
     ps.println("  --schemaReader=<class>   Sets the SchemaReader class; defaults to");
     ps.println("                           " + JAXBSchemaReader.class.getName());
@@ -108,7 +111,30 @@
           opt = arg.substring(optIndex+1);
           arg = arg.substring(0, optIndex);
         }
-        if (arg.equalsIgnoreCase("force")) {
+        if (arg.equalsIgnoreCase("bindingFile")) {
+          if (opt == null) {
+        	if (i == args.length) {
+        	  Usage("Missing argument for option " + arg);
+        	}
+        	opt = args[++i];
+          }
+          File f = new File(opt);
+          if (f.isFile()) {
+        	  try {
+        		  g.addBindings(new InputSource(f.toURL().toExternalForm()));
+        	  } catch (Exception e) {
+        		  System.err.println("The external binding file "
+        				  + f.getAbsolutePath() + " could not be read: "
+        				  + e.getMessage());
+        		  e.printStackTrace();
+        		  System.exit(1);
+        	  }
+          } else {
+        	  System.err.println("The external binding file "
+        			  + f.getAbsolutePath() + " does not exist.");
+        	  System.exit(1);
+          }
+        } else if (arg.equalsIgnoreCase("force")) {
         	g.setForcingOverwrite(true);
         } else if (arg.equalsIgnoreCase("schemaReader")) {
           if (logLevel != null) {

Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/XJCTask.java Sat Dec 24 16:43:38 2005
@@ -46,6 +46,7 @@
 import org.apache.tools.ant.types.Commandline;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.Path;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXParseException;
 
 
@@ -949,12 +950,8 @@
         log("No schema files specified", Project.MSG_WARN);
         return;
       }
-  
+    
       File[] bindingFiles = getBindingFiles();
-      if (bindingFiles.length > 0) {
-        throw new BuildException("External schema bindings are still unsupported by JaxMe.", getLocation());
-      }
-  
       File[] dependFiles = getDependsFiles();
       List producesFiles = isRemoveOldOutput() ? new ArrayList() : null;
       if (isUpToDate(schemaFiles, bindingFiles, dependFiles, producesFiles)) {
@@ -975,6 +972,17 @@
       generator.setForcingOverwrite(isForce());
       generator.setSettingReadOnly(isReadOnly());
       generator.setValidating(isValidating());
+      for (int i = 0;  i < bindingFiles.length;  i++) {
+    	  try {
+    		  String systemId = bindingFiles[i].toURL().toExternalForm();
+    		  generator.addBindings(new InputSource(systemId));
+    	  } catch (Exception e) {
+    		  throw new BuildException("Failed to read external binding file "
+    				  + bindingFiles[i] + ": " + e.getMessage(), e,
+    				  getLocation());
+    	  }
+      }
+
       if (getPackage() != null) {
         generator.setProperty("jaxme.package.name", getPackage());
       }

Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java Sat Dec 24 16:43:38 2005
@@ -17,10 +17,17 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.apache.ws.jaxme.generator.Generator;
 import org.apache.ws.jaxme.generator.SchemaReader;
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
@@ -28,8 +35,10 @@
 import org.apache.ws.jaxme.js.JavaSourceFactory;
 import org.apache.ws.jaxme.logging.Logger;
 import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 
 /** <p>The Generator is reading an input schema. The schema is
@@ -38,6 +47,12 @@
  */
 public class GeneratorImpl implements Generator {
 	private static final Logger log = LoggerAccess.getLogger(GeneratorImpl.class);
+	private static final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+	static {
+		dbf.setNamespaceAware(true);
+		dbf.setValidating(false);
+	}
+
 	private SchemaReader schemaReader;
 	private java.io.File targetDirectory;
 	private java.io.File resourceTargetDirectory;
@@ -45,6 +60,7 @@
 	private int nextKey;
 	private boolean isValidating, isForcingOverwrite, isSettingReadOnly;
 	private EntityResolver entityResolver;
+	private final List bindings = new ArrayList();
 	
 	/** <p>Sets the {@link EntityResolver} being used to import external
 	 * schemata.</p>
@@ -196,5 +212,18 @@
 	
 	public String getKey() {
 		return Integer.toString(nextKey++);
+	}
+
+	public void addBindings(InputSource pSource) throws ParserConfigurationException, SAXException, IOException {
+		DocumentBuilder db = dbf.newDocumentBuilder();
+		EntityResolver er = getEntityResolver();
+		if (er != null) {
+			db.setEntityResolver(er);
+		}
+		bindings.add(db.parse(pSource));
+	}
+
+	public Document[] getBindings() {
+		return (Document[]) bindings.toArray(new Document[bindings.size()]);
 	}
 }

Modified: webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/jm/src/main/java/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java Sat Dec 24 16:43:38 2005
@@ -24,6 +24,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.ws.jaxme.generator.Generator;
+import org.apache.ws.jaxme.generator.Inliner;
 import org.apache.ws.jaxme.generator.sg.Context;
 import org.apache.ws.jaxme.generator.sg.Facet;
 import org.apache.ws.jaxme.generator.sg.GroupSG;
@@ -37,6 +38,7 @@
 import org.apache.ws.jaxme.generator.sg.TypeSGChain;
 import org.apache.ws.jaxme.logging.Logger;
 import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
 import org.apache.ws.jaxme.xs.XSAny;
 import org.apache.ws.jaxme.xs.XSElement;
 import org.apache.ws.jaxme.xs.XSEnumeration;
@@ -45,11 +47,13 @@
 import org.apache.ws.jaxme.xs.XSParser;
 import org.apache.ws.jaxme.xs.XSSchema;
 import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.jaxb.impl.JAXBObjectFactoryImpl;
 import org.apache.ws.jaxme.xs.jaxb.impl.JAXBParser;
 import org.apache.ws.jaxme.xs.jaxb.impl.JAXBXsObjectFactoryImpl;
 import org.apache.ws.jaxme.xs.parser.XSContext;
 import org.apache.ws.jaxme.xs.xml.XsObjectFactory;
 import org.apache.ws.jaxme.xs.xml.XsQName;
+import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
@@ -276,6 +280,15 @@
 	}
 	
 	public XSObjectFactory newXSObjectFactory(SGFactory pController) throws SAXException {
-		return JAXBParser.JAXB_OBJECT_FACTORY;
+		return new JAXBObjectFactoryImpl(){
+			public SchemaTransformer getSchemaTransformer() {
+				Document[] bindings = generator.getBindings();
+				if (bindings == null  ||  bindings.length == 0) {
+					return null;
+				} else {
+					return new Inliner(bindings);
+				}
+			}
+		};
 	}
 }

Modified: webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/XSObjectFactory.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
  * 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.
-
  */
 package org.apache.ws.jaxme.xs;
 
@@ -134,4 +133,9 @@
    */
   public XSIdentityConstraint newXSIdentityConstraint(XSElement pParent,
 													  XsEKey key) throws SAXException;
+  /** Returns the object factories schema transformer.
+   * May be null, in which case no schema transformation
+   * occurs.
+   */
+  public SchemaTransformer getSchemaTransformer();
 }

Modified: webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java Sat Dec 24 16:43:38 2005
@@ -30,6 +30,7 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.ws.jaxme.xs.SchemaTransformer;
 import org.apache.ws.jaxme.xs.XSContentHandler;
 import org.apache.ws.jaxme.xs.XSElement;
 import org.apache.ws.jaxme.xs.XSObjectFactory;
@@ -659,6 +660,12 @@
 		XSContext data = getData();
 		XMLReader xr = data.getXsObjectFactory().newXMLReader(isValidating());
 		xr.setContentHandler(contentHandler);
+		SchemaTransformer transformer = data.getXSObjectFactory().getSchemaTransformer();
+		if (transformer != null) {
+			transformer.parse(pSource, xr);
+			pSource = transformer.getTransformedInputSource();
+			xr = transformer.getTransformedXMLReader();
+		}
 		xr.parse(pSource);
 		return getSchema();
 	}

Modified: webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java (original)
+++ webservices/jaxme/branches/MAVEN/projects/xs/src/main/java/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java Sat Dec 24 16:43:38 2005
@@ -16,6 +16,7 @@
  */
 package org.apache.ws.jaxme.xs.impl;
 
+import org.apache.ws.jaxme.xs.SchemaTransformer;
 import org.apache.ws.jaxme.xs.XSAnnotation;
 import org.apache.ws.jaxme.xs.XSAny;
 import org.apache.ws.jaxme.xs.XSAppinfo;
@@ -203,4 +204,7 @@
     return new XSIdentityConstraintImpl( pParent, unique );
   }
 
+  public SchemaTransformer getSchemaTransformer() {
+	return null;
+  }
 }

Modified: webservices/jaxme/branches/MAVEN/status.xml
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/MAVEN/status.xml?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/MAVEN/status.xml (original)
+++ webservices/jaxme/branches/MAVEN/status.xml Sat Dec 24 16:43:38 2005
@@ -81,6 +81,10 @@
         The XJC Ant task and the Main frontent both have a new
         option "resourceTarget".
       </action>
+      <action dev="JW" type="enhancement" context="generator">
+        Added support for external binding files, based on a
+        suggestion from Ortwin Glueck (oglueck at apache.org).
+      </action>
 	</release>
 	<release version="0.5" date="2005-Aug-08">
       <action dev="JW" type="enhancement" context="js">

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Generator.java Sat Dec 24 16:43:38 2005
@@ -17,11 +17,16 @@
 package org.apache.ws.jaxme.generator;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
+import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 /** <p>The Generator is a frontend for working with the
  * SchemaReaders, SourceWriters and whatever else.</p>
@@ -163,4 +168,13 @@
    * schemata.</p>
    */
   public EntityResolver getEntityResolver();
+
+    /** Sets the external schema bindings.
+     */
+  	public void addBindings(InputSource pSource)
+  			throws ParserConfigurationException, SAXException, IOException;
+
+  	/** Returns the external schema bindings, if any, or null.
+     */
+    public Document[] getBindings();
 }

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/Main.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
  * 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.
-
  */
 package org.apache.ws.jaxme.generator;
 
@@ -23,6 +22,7 @@
 import org.apache.ws.jaxme.generator.impl.GeneratorImpl;
 import org.apache.ws.jaxme.generator.sg.SGFactoryChain;
 import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
+import org.xml.sax.InputSource;
 
 
 /** <p>A command line interface for the JaxMe source generator.</p>
@@ -50,6 +50,9 @@
     ps.println();
     ps.println("Reads a schema definition from the given <inputfile>");
     ps.println("Possible options are:");
+    ps.println("  --bindingFile=<filename> Adds an external binding file.");
+    ps.println("                           Multiple external binding files may");
+    ps.println("                           be used by repeating this option.");
     ps.println("  --force                  Force overwriting files");
     ps.println("  --schemaReader=<class>   Sets the SchemaReader class; defaults to");
     ps.println("                           " + JAXBSchemaReader.class.getName());
@@ -108,7 +111,30 @@
           opt = arg.substring(optIndex+1);
           arg = arg.substring(0, optIndex);
         }
-        if (arg.equalsIgnoreCase("force")) {
+        if (arg.equalsIgnoreCase("bindingFile")) {
+          if (opt == null) {
+        	if (i == args.length) {
+        	  Usage("Missing argument for option " + arg);
+        	}
+        	opt = args[++i];
+          }
+          File f = new File(opt);
+          if (f.isFile()) {
+        	  try {
+        		  g.addBindings(new InputSource(f.toURL().toExternalForm()));
+        	  } catch (Exception e) {
+        		  System.err.println("The external binding file "
+        				  + f.getAbsolutePath() + " could not be read: "
+        				  + e.getMessage());
+        		  e.printStackTrace();
+        		  System.exit(1);
+        	  }
+          } else {
+        	  System.err.println("The external binding file "
+        			  + f.getAbsolutePath() + " does not exist.");
+        	  System.exit(1);
+          }
+        } else if (arg.equalsIgnoreCase("force")) {
         	g.setForcingOverwrite(true);
         } else if (arg.equalsIgnoreCase("schemaReader")) {
           if (logLevel != null) {

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/XJCTask.java Sat Dec 24 16:43:38 2005
@@ -46,6 +46,7 @@
 import org.apache.tools.ant.types.Commandline;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.Path;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXParseException;
 
 
@@ -949,12 +950,8 @@
         log("No schema files specified", Project.MSG_WARN);
         return;
       }
-  
+    
       File[] bindingFiles = getBindingFiles();
-      if (bindingFiles.length > 0) {
-        throw new BuildException("External schema bindings are still unsupported by JaxMe.", getLocation());
-      }
-  
       File[] dependFiles = getDependsFiles();
       List producesFiles = isRemoveOldOutput() ? new ArrayList() : null;
       if (isUpToDate(schemaFiles, bindingFiles, dependFiles, producesFiles)) {
@@ -975,6 +972,17 @@
       generator.setForcingOverwrite(isForce());
       generator.setSettingReadOnly(isReadOnly());
       generator.setValidating(isValidating());
+      for (int i = 0;  i < bindingFiles.length;  i++) {
+    	  try {
+    		  String systemId = bindingFiles[i].toURL().toExternalForm();
+    		  generator.addBindings(new InputSource(systemId));
+    	  } catch (Exception e) {
+    		  throw new BuildException("Failed to read external binding file "
+    				  + bindingFiles[i] + ": " + e.getMessage(), e,
+    				  getLocation());
+    	  }
+      }
+
       if (getPackage() != null) {
         generator.setProperty("jaxme.package.name", getPackage());
       }

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/impl/GeneratorImpl.java Sat Dec 24 16:43:38 2005
@@ -17,10 +17,17 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.apache.ws.jaxme.generator.Generator;
 import org.apache.ws.jaxme.generator.SchemaReader;
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
@@ -28,8 +35,10 @@
 import org.apache.ws.jaxme.js.JavaSourceFactory;
 import org.apache.ws.jaxme.logging.Logger;
 import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 
 /** <p>The Generator is reading an input schema. The schema is
@@ -38,6 +47,12 @@
  */
 public class GeneratorImpl implements Generator {
 	private static final Logger log = LoggerAccess.getLogger(GeneratorImpl.class);
+	private static final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+	static {
+		dbf.setNamespaceAware(true);
+		dbf.setValidating(false);
+	}
+
 	private SchemaReader schemaReader;
 	private java.io.File targetDirectory;
 	private java.io.File resourceTargetDirectory;
@@ -45,6 +60,7 @@
 	private int nextKey;
 	private boolean isValidating, isForcingOverwrite, isSettingReadOnly;
 	private EntityResolver entityResolver;
+	private final List bindings = new ArrayList();
 	
 	/** <p>Sets the {@link EntityResolver} being used to import external
 	 * schemata.</p>
@@ -196,5 +212,18 @@
 	
 	public String getKey() {
 		return Integer.toString(nextKey++);
+	}
+
+	public void addBindings(InputSource pSource) throws ParserConfigurationException, SAXException, IOException {
+		DocumentBuilder db = dbf.newDocumentBuilder();
+		EntityResolver er = getEntityResolver();
+		if (er != null) {
+			db.setEntityResolver(er);
+		}
+		bindings.add(db.parse(pSource));
+	}
+
+	public Document[] getBindings() {
+		return (Document[]) bindings.toArray(new Document[bindings.size()]);
 	}
 }

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/JAXBSGFactory.java Sat Dec 24 16:43:38 2005
@@ -24,6 +24,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.ws.jaxme.generator.Generator;
+import org.apache.ws.jaxme.generator.Inliner;
 import org.apache.ws.jaxme.generator.sg.Context;
 import org.apache.ws.jaxme.generator.sg.Facet;
 import org.apache.ws.jaxme.generator.sg.GroupSG;
@@ -37,6 +38,7 @@
 import org.apache.ws.jaxme.generator.sg.TypeSGChain;
 import org.apache.ws.jaxme.logging.Logger;
 import org.apache.ws.jaxme.logging.LoggerAccess;
+import org.apache.ws.jaxme.xs.SchemaTransformer;
 import org.apache.ws.jaxme.xs.XSAny;
 import org.apache.ws.jaxme.xs.XSElement;
 import org.apache.ws.jaxme.xs.XSEnumeration;
@@ -45,11 +47,13 @@
 import org.apache.ws.jaxme.xs.XSParser;
 import org.apache.ws.jaxme.xs.XSSchema;
 import org.apache.ws.jaxme.xs.XSType;
+import org.apache.ws.jaxme.xs.jaxb.impl.JAXBObjectFactoryImpl;
 import org.apache.ws.jaxme.xs.jaxb.impl.JAXBParser;
 import org.apache.ws.jaxme.xs.jaxb.impl.JAXBXsObjectFactoryImpl;
 import org.apache.ws.jaxme.xs.parser.XSContext;
 import org.apache.ws.jaxme.xs.xml.XsObjectFactory;
 import org.apache.ws.jaxme.xs.xml.XsQName;
+import org.w3c.dom.Document;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
@@ -276,6 +280,15 @@
 	}
 	
 	public XSObjectFactory newXSObjectFactory(SGFactory pController) throws SAXException {
-		return JAXBParser.JAXB_OBJECT_FACTORY;
+		return new JAXBObjectFactoryImpl(){
+			public SchemaTransformer getSchemaTransformer() {
+				Document[] bindings = generator.getBindings();
+				if (bindings == null  ||  bindings.length == 0) {
+					return null;
+				} else {
+					return new Inliner(bindings);
+				}
+			}
+		};
 	}
 }

Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java (original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/XSObjectFactory.java Sat Dec 24 16:43:38 2005
@@ -12,7 +12,6 @@
  * 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.
-
  */
 package org.apache.ws.jaxme.xs;
 
@@ -134,4 +133,9 @@
    */
   public XSIdentityConstraint newXSIdentityConstraint(XSElement pParent,
 													  XsEKey key) throws SAXException;
+  /** Returns the object factories schema transformer.
+   * May be null, in which case no schema transformation
+   * occurs.
+   */
+  public SchemaTransformer getSchemaTransformer();
 }

Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java (original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSLogicalParser.java Sat Dec 24 16:43:38 2005
@@ -30,6 +30,7 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.ws.jaxme.xs.SchemaTransformer;
 import org.apache.ws.jaxme.xs.XSContentHandler;
 import org.apache.ws.jaxme.xs.XSElement;
 import org.apache.ws.jaxme.xs.XSObjectFactory;
@@ -659,6 +660,12 @@
 		XSContext data = getData();
 		XMLReader xr = data.getXsObjectFactory().newXMLReader(isValidating());
 		xr.setContentHandler(contentHandler);
+		SchemaTransformer transformer = data.getXSObjectFactory().getSchemaTransformer();
+		if (transformer != null) {
+			transformer.parse(pSource, xr);
+			pSource = transformer.getTransformedInputSource();
+			xr = transformer.getTransformedXMLReader();
+		}
 		xr.parse(pSource);
 		return getSchema();
 	}

Modified: webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/xs/org/apache/ws/jaxme/xs/impl/XSObjectFactoryImpl.java Sat Dec 24 16:43:38 2005
@@ -16,6 +16,7 @@
  */
 package org.apache.ws.jaxme.xs.impl;
 
+import org.apache.ws.jaxme.xs.SchemaTransformer;
 import org.apache.ws.jaxme.xs.XSAnnotation;
 import org.apache.ws.jaxme.xs.XSAny;
 import org.apache.ws.jaxme.xs.XSAppinfo;
@@ -203,4 +204,7 @@
     return new XSIdentityConstraintImpl( pParent, unique );
   }
 
+  public SchemaTransformer getSchemaTransformer() {
+	return null;
+  }
 }

Modified: webservices/jaxme/branches/b0_5/status.xml
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/b0_5/status.xml?rev=358956&r1=358955&r2=358956&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/status.xml (original)
+++ webservices/jaxme/branches/b0_5/status.xml Sat Dec 24 16:43:38 2005
@@ -73,6 +73,10 @@
         The XJC Ant task and the Main frontent both have a new
         option "resourceTarget".
       </action>
+      <action dev="JW" type="enhancement" context="generator">
+        Added support for external binding files, based on a
+        suggestion from Ortwin Glueck (oglueck at apache.org).
+      </action>
     </release>
 	<release version="0.5" date="2005-Aug-08">
       <action dev="JW" type="enhancement" context="js">



---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org