You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by pc...@apache.org on 2004/04/15 03:50:06 UTC

cvs commit: xml-xmlbeans/v2/src/common/org/apache/xmlbeans/impl/common JarHelper.java

pcal        2004/04/14 18:50:06

  Modified:    v2/jam   build.xml
               v2/jam/src/org/apache/xmlbeans/impl/jam/internal
                        JamServiceContextImpl.java
               v2/jam/src/org/apache/xmlbeans/impl/jam/internal/elements
                        ClassImpl.java
               v2/jam/src/org/apache/xmlbeans/impl/jam/internal/javadoc
                        JavadocClassBuilder.java
               v2/jam/src/org/apache/xmlbeans/impl/jam/provider
                        JamServiceFactoryImpl.java
               v2/jam/src/org/apache/xmlbeans/impl/jam/visitor
                        PropertyInitializer.java
               v2/src/binding/org/apache/xmlbeans/impl/binding/tylar
                        DebugTylarWriter.java DefaultTylarLoader.java
                        ExplodedTylarImpl.java TylarConstants.java
                        TylarImpl.java
               v2/src/common/org/apache/xmlbeans/impl/common JarHelper.java
  Log:
  Binding: more work on xsb writing in tylars JAM: weak references for jclasses
  
  Revision  Changes    Path
  1.18      +1 -3      xml-xmlbeans/v2/jam/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/jam/build.xml,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- build.xml	2 Apr 2004 02:41:06 -0000	1.17
  +++ build.xml	15 Apr 2004 01:50:05 -0000	1.18
  @@ -91,9 +91,7 @@
       <copy  todir='${classes_dir}' ><fileset dir='license'/></copy>
       <jar jarfile='${jam_jar}'    basedir='${classes_dir}'/>
       <jar jarfile='${javadoc_zip}' basedir='${javadocbuild_dir}'/>
  -    <jar jarfile='${jamsrc_zip}' basedir='.' 
  -         excludes='${build_dir}/**,src/**,test/**'/>
  -    <jar jarfile='${jamsrc_zip}' basedir='${src_dir}' update='true'/>
  +    <jar jarfile='${jamsrc_zip}' basedir='.'  excludes='${build_dir}/**,test'/>
     </target>
   
     <target name='website' depends='all,javadocs,jars'>
  
  
  
  1.14      +2 -3      xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/internal/JamServiceContextImpl.java
  
  Index: JamServiceContextImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/internal/JamServiceContextImpl.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- JamServiceContextImpl.java	12 Apr 2004 21:06:57 -0000	1.13
  +++ JamServiceContextImpl.java	15 Apr 2004 01:50:06 -0000	1.14
  @@ -67,7 +67,7 @@
   
   
     private MVisitor mCommentInitializer = null;
  -  private MVisitor mPropertyInitializer = null;
  +  private MVisitor mPropertyInitializer = new PropertyInitializer();
     private List mOtherInitializers = null;
     private List mUnstructuredSourceFiles = null;
     private List mClassLoaders = null;
  @@ -234,8 +234,7 @@
       if (mCommentInitializer != null) initers.add(mCommentInitializer);
       // initers.add((mCommentInitializer != null) ? mCommentInitializer :
       //             new CommentInitializer());
  -    initers.add((mPropertyInitializer != null) ? mPropertyInitializer :
  -                new PropertyInitializer());
  +    if (mPropertyInitializer != null) initers.add(mPropertyInitializer);
       if (mOtherInitializers != null) initers.addAll(mOtherInitializers);
       // now go
       MVisitor[] inits = new MVisitor[initers.size()];
  
  
  
  1.12      +11 -1     xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/internal/elements/ClassImpl.java
  
  Index: ClassImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/internal/elements/ClassImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- ClassImpl.java	2 Apr 2004 02:41:06 -0000	1.11
  +++ ClassImpl.java	15 Apr 2004 01:50:06 -0000	1.12
  @@ -187,7 +187,17 @@
     }
   
     public JClass[] getImportedClasses() {
  -    return new JClass[0];//FIXME
  +//    if (true) throw new IllegalStateException();
  +    String[] imports = getImportSpecs();
  +    if (imports == null) return new JClass[0];
  +    List list = new ArrayList();
  +    for(int i=0; i<imports.length; i++) {
  +      if (imports[i].endsWith("*")) continue;
  +      list.add(getClassLoader().loadClass(imports[i]));
  +    }
  +    JClass[] out = new JClass[list.size()];
  +    list.toArray(out);
  +    return out;
     }
   
     public void accept(MVisitor visitor) { visitor.visit(this); }
  
  
  
  1.21      +11 -1     xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/internal/javadoc/JavadocClassBuilder.java
  
  Index: JavadocClassBuilder.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/internal/javadoc/JavadocClassBuilder.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- JavadocClassBuilder.java	8 Apr 2004 19:44:44 -0000	1.20
  +++ JavadocClassBuilder.java	15 Apr 2004 01:50:06 -0000	1.21
  @@ -175,7 +175,17 @@
         }
         return null;
       }
  -    MClass out = createClassToBuild(packageName, className, null);
  +    String[] importSpecs = null;
  +    {
  +      ClassDoc[] imported = cd.importedClasses();
  +      if (imported != null) {
  +        importSpecs = new String[imported.length];
  +        for(int i=0; i<imported.length; i++) {
  +          importSpecs[i] = imported[i].qualifiedName();
  +        }
  +      }
  +    }
  +    MClass out = createClassToBuild(packageName, className, importSpecs);
       out.setArtifact(cd);
       return out;
     }
  
  
  
  1.9       +1 -0      xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/provider/JamServiceFactoryImpl.java
  
  Index: JamServiceFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/provider/JamServiceFactoryImpl.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- JamServiceFactoryImpl.java	26 Mar 2004 00:15:39 -0000	1.8
  +++ JamServiceFactoryImpl.java	15 Apr 2004 01:50:06 -0000	1.9
  @@ -99,6 +99,7 @@
     public JamClassLoader createJamClassLoader(ClassLoader cl) {
       JamServiceParams params = createServiceParams();
       params.setUseSystemClasspath(true); //?
  +    params.setPropertyInitializer(null);
       try {
         JamService service = createService(params);
         return service.getClassLoader();
  
  
  
  1.7       +2 -0      xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/visitor/PropertyInitializer.java
  
  Index: PropertyInitializer.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/jam/src/org/apache/xmlbeans/impl/jam/visitor/PropertyInitializer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- PropertyInitializer.java	20 Mar 2004 20:10:45 -0000	1.6
  +++ PropertyInitializer.java	15 Apr 2004 01:50:06 -0000	1.7
  @@ -51,6 +51,8 @@
         if (name.startsWith("get") && name.length() > 3 ||
           name.startsWith("is") && name.length() > 2) {
           JClass typ = methods[i].getReturnType();
  +        //FIXME we just want the name - this forces the whole thing to be resolved
  +        // need to either getReturnTypeRef() or change ClassImpl so that it lazily builds itself
           if (typ == null) continue; // must have a typ and have
           if (methods[i].getParameters().length > 0) continue; //no params
           if (name.startsWith("get")) {
  
  
  
  1.5       +15 -0     xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/DebugTylarWriter.java
  
  Index: DebugTylarWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/DebugTylarWriter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DebugTylarWriter.java	7 Apr 2004 04:18:10 -0000	1.4
  +++ DebugTylarWriter.java	15 Apr 2004 01:50:06 -0000	1.5
  @@ -26,6 +26,7 @@
   import java.io.IOException;
   import java.io.PrintWriter;
   import java.io.Writer;
  +import java.io.File;
   
   /**
    * Implementation of TylarWriter which simply dumps everything it gets to some
  @@ -114,5 +115,19 @@
     public Writer createWriter(String packageName, String className)
             throws IOException {
       return mOut;
  +  }
  +
  +  // ========================================================================
  +  // main method
  +
  +  public static void main(String[] args) {
  +    try {
  +      TylarLoader loader = DefaultTylarLoader.getInstance();
  +      Tylar tylar = loader.load(new File(args[0]).toURI());
  +      new DebugTylarWriter().write(tylar);
  +    } catch(Exception e) {
  +      e.printStackTrace();
  +    }
  +    System.out.flush();
     }
   }
  
  
  
  1.11      +44 -6     xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/DefaultTylarLoader.java
  
  Index: DefaultTylarLoader.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/DefaultTylarLoader.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- DefaultTylarLoader.java	25 Feb 2004 18:56:48 -0000	1.10
  +++ DefaultTylarLoader.java	15 Apr 2004 01:50:06 -0000	1.11
  @@ -17,13 +17,17 @@
   
   import java.io.*;
   import java.net.URI;
  +import java.net.URLClassLoader;
  +import java.net.URL;
   import java.util.ArrayList;
   import java.util.Collection;
   import java.util.jar.JarEntry;
   import java.util.jar.JarInputStream;
   import org.apache.xml.xmlbeans.bindingConfig.BindingConfigDocument;
   import org.apache.xmlbeans.XmlException;
  +import org.apache.xmlbeans.SchemaTypeSystem;
   import org.apache.xmlbeans.impl.binding.bts.BindingFile;
  +import org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl;
   import org.w3.x2001.xmlSchema.SchemaDocument;
   
   /**
  @@ -32,7 +36,7 @@
    *
    * @author Patrick Calahan <pc...@bea.com>
    */
  -public class DefaultTylarLoader implements TylarLoader {
  +public class DefaultTylarLoader implements TylarLoader, TylarConstants {
   
     // ========================================================================
     // Constants
  @@ -40,18 +44,21 @@
     private static final String FILE_SCHEME = "file";
   
     private static final char[] OTHER_SEPCHARS = {'\\'};
  +
     private static final char SEPCHAR = '/';
   
     private static final boolean VERBOSE = false;
   
     private static final String BINDING_FILE_JARENTRY =
  -          normalizeEntryName(TylarConstants.BINDING_FILE);
  +          normalizeEntryName(TylarConstants.BINDING_FILE).toLowerCase();
   
     private static final String SCHEMA_DIR_JARENTRY =
  -          normalizeEntryName(TylarConstants.SCHEMA_DIR);
  +          normalizeEntryName(TylarConstants.SCHEMA_DIR).toLowerCase();
   
     private static final String SCHEMA_EXT = ".xsd";
   
  +  private static final String STS_PREFIX = "schema"+SEPCHAR+"system"+SEPCHAR;
  +
     // ========================================================================
     // Singleton
   
  @@ -157,9 +164,20 @@
       BindingFile bf = null;
       Collection schemas = null;
       StubbornInputStream stubborn = new StubbornInputStream(jin);
  +    String stsName = null;
       while ((entry = jin.getNextJarEntry()) != null) {
  -      if (entry.isDirectory()) continue;
         String name = normalizeEntryName(entry.getName());
  +      if (name.endsWith(""+SEPCHAR)) {
  +        if (name.startsWith(STS_PREFIX) &&
  +          name.length() > STS_PREFIX.length()) {
  +          // the name of the sts is the name of the only directory under
  +          // schema/system
  +          stsName = STS_PACKAGE+"."+name.substring(STS_PREFIX.length(),name.length()-1);
  +          if (VERBOSE) System.out.println("sts name is "+stsName);
  +        }
  +        continue;
  +      }
  +      name = name.toLowerCase();
         if (name.equals(BINDING_FILE_JARENTRY)) {
           if (VERBOSE) System.out.println("parsing binding file "+name);
           bf = BindingFile.forDoc(BindingConfigDocument.Factory.parse(stubborn));
  @@ -184,7 +202,27 @@
                  "' is not a tylar: it does not contain a binding file");
       }
       jin.close();
  -    return new TylarImpl(source,bf,schemas);
  +    if (VERBOSE) System.out.println("Done reading jar entries");
  +    SchemaTypeSystem sts = null;
  +    if (stsName != null) {
  +      {
  +        try {
  +          URLClassLoader ucl = new URLClassLoader(new URL[] {source.toURL()});
  +          sts = SchemaTypeSystemImpl.forName(stsName,ucl);
  +          if (sts == null) throw new IllegalStateException("null returned by SchemaTypeSystemImpl.forName()");
  +          if (VERBOSE) System.out.println("successfully loaded schema type system");
  +        } catch(Exception e) {
  +          System.out.println
  +            ("[XBEANS] Notice: an unexpected error occurred while trying to read\n " +
  +             "a binary version of your schemas from "+source+".\n"+
  +             "Your bindings were still loaded, but you may have suffered some " +
  +             "performance degradation if your schemas are very large or " +
  +             "complicated.\n"+e.getMessage());
  +          if (SHOW_XSB_ERRORS) e.printStackTrace();
  +        }
  +      }
  +    }
  +    return new TylarImpl(source,bf,schemas,sts);
     }
     // ========================================================================
     // Private methods
  @@ -195,7 +233,7 @@
      * leading slashes or anything else that can go wrong.
      */
     private static final String normalizeEntryName(String name) {
  -    name = name.toLowerCase().trim();
  +    name = name.trim();
       for(int i=0; i<OTHER_SEPCHARS.length; i++) {
         name = name.replace(OTHER_SEPCHARS[i],SEPCHAR);
       }
  
  
  
  1.13      +28 -9     xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/ExplodedTylarImpl.java
  
  Index: ExplodedTylarImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/ExplodedTylarImpl.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ExplodedTylarImpl.java	8 Apr 2004 20:01:01 -0000	1.12
  +++ ExplodedTylarImpl.java	15 Apr 2004 01:50:06 -0000	1.13
  @@ -38,6 +38,8 @@
   import org.apache.xmlbeans.impl.binding.joust.SourceJavaOutputStream;
   import org.apache.xmlbeans.impl.binding.joust.ValidatingJavaOutputStream;
   import org.apache.xmlbeans.impl.common.JarHelper;
  +import org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl;
  +import org.apache.xmlbeans.impl.tool.SchemaCodeGenerator;
   import org.w3.x2001.xmlSchema.SchemaDocument;
   
   /**
  @@ -119,12 +121,24 @@
       parseSchemas(new File(dir, SCHEMA_DIR), schemas);
       SchemaTypeSystem sts = null;
       {
  -      File stsDir = new File(dir, STS_DIR);
  -      if (stsDir.exists()) {
  -        //FIXME i still dont get how to do this.  Where is the TypeSystemHolder?
  -        // sts = SchemaTypeSystemImpl.forName()
  +      //try to read the xsbs.  first we need to figure out the sts name.
  +      try {
  +        File stsDir = new File(dir, "schema"+SEP+"system");
  +        String stsName = stsDir.list()[0];
  +        ClassLoader cl = new URLClassLoader(new URL[]{dir.toURL()});
  +        sts = SchemaTypeSystemImpl.forName(STS_PACKAGE+"."+stsName,cl);
  +        if (sts == null) throw new IllegalStateException("null returned by SchemaTypeSystemImpl.forName()");
  +        if (VERBOSE) System.out.println
  +          ("[XBEANS] loaded schema type system '"+stsName+"'");
  +      } catch(Exception e) {
  +        System.out.println
  +          ("[XBEANS] Notice: an unexpected error occurred while trying to read\n " +
  +           "a binary version of your schemas from "+dir+".\n"+
  +           "Your bindings were still loaded, but you may have suffered some " +
  +           "performance degradation if your schemas are very large or " +
  +           "complicated.\n"+e.getMessage());
  +        if (SHOW_XSB_ERRORS) e.printStackTrace();
         }
  -
       }
   
       return new ExplodedTylarImpl(dir, bf, schemas, sts, joust);
  @@ -174,11 +188,16 @@
       if (sts == null) throw new IllegalArgumentException("null sts");
       mSchemaTypeSystem = sts;
       try {
  -      sts.saveToDirectory(new File(mRootDir, STS_DIR));
  +      SchemaCodeGenerator.saveTypeSystem(sts,
  +                                         mRootDir,
  +                                         null,null,null);
       } catch(Exception e) {
  -      System.out.println("[XBEANS] HAS A PROBLEM WRITING XSBs, IGNORING FOR NOW: "+
  -                         e.getMessage()+"\n YOUR BINDINGS ARE STILL OK");
  -      //e.printStackTrace(System.out);
  +      System.out.println
  +        ("[XBEANS] Notice: an unexpected error occurred while trying to save\n " +
  +         "a binary version of your schemas.  Your bindings are still\n "+
  +         "ok, but you may suffer some performance degradation if your schemas\n "+
  +         "are very large or complicated.\n"+e.getMessage());
  +      if (VERBOSE) e.printStackTrace();
       }
     }
   
  
  
  
  1.6       +5 -1      xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/TylarConstants.java
  
  Index: TylarConstants.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/TylarConstants.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TylarConstants.java	7 Apr 2004 04:18:10 -0000	1.5
  +++ TylarConstants.java	15 Apr 2004 01:50:06 -0000	1.6
  @@ -34,6 +34,10 @@
     public static final String SRC_ROOT     = "META-INF"+SEP+"src";
     public static final String BINDING_FILE = "META-INF"+SEP+"binding-file.xml";
     public static final String SCHEMA_DIR   = "META-INF"+SEP+"schemas";
  -  public static final String STS_DIR      = "META-INF"+SEP+"schema_type_system"; 
  +
  +  public static final String STS_PACKAGE  = "schema.system";
  +
  +
  +  public static final boolean SHOW_XSB_ERRORS = false;
   
   }
  
  
  
  1.7       +19 -1     xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/TylarImpl.java
  
  Index: TylarImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/tylar/TylarImpl.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TylarImpl.java	7 Apr 2004 04:18:10 -0000	1.6
  +++ TylarImpl.java	15 Apr 2004 01:50:06 -0000	1.7
  @@ -48,18 +48,22 @@
   
     public TylarImpl() {}
   
  +
     /**
      * @param sourceUri source uri or null
      * @param bf the binding file
      * @param schemas the schemas
  +   * @param sts schema type system (or null)
      */
     public TylarImpl(URI sourceUri,
                      BindingFile bf,
  -                   Collection schemas)
  +                   Collection schemas,
  +                   SchemaTypeSystem sts)
     {
       mSourceURI = sourceUri;
       mBindingFile = bf;
       mSchemas = schemas;
  +    mSts = sts;
     }
   
     // ========================================================================
  @@ -120,4 +124,18 @@
     }
   
     public void close() {}
  +
  +  // ========================================================================
  +  // Deprecated methods
  +  
  +  /**
  +   * @deprecated
  +   */
  +  public TylarImpl(URI sourceUri,
  +                   BindingFile bf,
  +                   Collection schemas)
  +  {
  +    this(sourceUri,bf,schemas,null);
  +  }
  +
   }
  
  
  
  1.3       +9 -7      xml-xmlbeans/v2/src/common/org/apache/xmlbeans/impl/common/JarHelper.java
  
  Index: JarHelper.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/common/org/apache/xmlbeans/impl/common/JarHelper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JarHelper.java	12 Feb 2004 20:06:08 -0000	1.2
  +++ JarHelper.java	15 Apr 2004 01:50:06 -0000	1.3
  @@ -119,6 +119,7 @@
     // ========================================================================
     // Private methods
   
  +  private static final char SEP = '/';
     /**
      * Recursively jars up the given path under the given directory.
      */
  @@ -127,13 +128,14 @@
       if (mVerbose) System.out.println("checking " + dirOrFile2jar);
       if (dirOrFile2jar.isDirectory()) {
         String[] dirList = dirOrFile2jar.list();
  -      String subPath = (path == null)? File.separator :
  -              (path+dirOrFile2jar.getName()+File.separator);
  -      JarEntry je = new JarEntry(subPath);
  -      je.setTime(dirOrFile2jar.lastModified());
  -      jos.putNextEntry(je);
  -      jos.flush();
  -      jos.closeEntry();
  +      String subPath = (path == null)? "" : (path+dirOrFile2jar.getName()+SEP);
  +      if (path != null) {
  +        JarEntry je = new JarEntry(subPath);
  +        je.setTime(dirOrFile2jar.lastModified());
  +        jos.putNextEntry(je);
  +        jos.flush();
  +        jos.closeEntry();
  +      }
         for (int i = 0; i < dirList.length; i++) {
           File f = new File(dirOrFile2jar, dirList[i]);
           jarDir(f,jos,subPath);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org