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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to