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/02/11 20:46:55 UTC

cvs commit: xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/compile Java2Schema.java

pcal        2004/02/11 11:46:55

  Modified:    v2/src/binding/org/apache/xmlbeans/impl/binding/compile
                        Java2Schema.java
  Log:
  java2schema - mangle invalid xml names
  
  Revision  Changes    Path
  1.30      +39 -1     xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/compile/Java2Schema.java
  
  Index: Java2Schema.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/compile/Java2Schema.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- Java2Schema.java	29 Jan 2004 07:54:31 -0000	1.29
  +++ Java2Schema.java	11 Feb 2004 19:46:55 -0000	1.30
  @@ -59,11 +59,13 @@
   import org.apache.xmlbeans.impl.binding.tylar.TylarWriter;
   import org.apache.xmlbeans.impl.jam.*;
   import org.apache.xmlbeans.impl.jam.internal.BaseJElement;
  +import org.apache.xmlbeans.impl.common.XMLChar;
   import org.w3.x2001.xmlSchema.*;
   import javax.xml.namespace.QName;
   import java.util.ArrayList;
   import java.util.List;
   import java.io.IOException;
  +import java.io.StringWriter;
   
   
   /**
  @@ -98,6 +100,10 @@
     public static final String TAG_AT               = "xsdgen:attribute";
     public static final String TAG_AT_NAME          = TAG_AT+".name";
   
  +  // this is the character that replaces invalid characters when creating new
  +  // xml names.
  +  private static final char SAFE_CHAR = '_';
  +
     // =========================================================================
     // Variables
   
  @@ -233,7 +239,7 @@
       JAnnotation[] anns = clazz.getAnnotations(TAG_CT_ROOT);
       for(int i=0; i<anns.length; i++) {
         TopLevelElement root = mSchema.addNewElement();
  -      root.setName(anns[i].getStringValue());
  +      root.setName(makeNcNameSafe(anns[i].getStringValue()));
         root.setType(qname);
         // FIXME still not entirely clear to me what we should do about
         // the binding file here
  @@ -374,6 +380,36 @@
     }
   
   
  +
  +  /**
  +   * Checks the given XML name to ensure that it is a valid XMLName according
  +   * to the XML 1.0 Recommendation.  If it is not, the name is mangled so
  +   * as to make it a valid name.  This should be called before setting the
  +   * name on every schema fragment we create.
  +   */
  +  private static String makeNcNameSafe(String name) {
  +    // it's probably pretty rare that a name isn't valid, so let's just do
  +    // an optimistic check first without writing out a new string.
  +    if (name == null || XMLChar.isValidNCName(name) || name.length() == 0) {
  +      return name;
  +    }
  +    // ok, we have to mangle it
  +    StringWriter out = new StringWriter();
  +    char ch = name.charAt(0);
  +    if(!XMLChar.isNCNameStart(ch)) {
  +      out.write(SAFE_CHAR);
  +    } else {
  +      out.write(ch);
  +    }
  +    for (int i=1; i < name.length(); i++ ) {
  +      ch = name.charAt(i);
  +       if (!XMLChar.isNCName(ch)) {
  +         out.write(ch);
  +       }
  +    }
  +    return out.toString();
  +  }
  +
     /*
   
     private static boolean isXmlObj(JClass clazz) {
  @@ -480,6 +516,7 @@
        * generated schema.
        */
       public void setSchemaName(String name) {
  +      name = makeNcNameSafe(name);
         if (mXsElement != null) {
           mXsElement.setName(name);
         } else if (mXsAttribute != null) {
  @@ -588,5 +625,6 @@
         mBtsProp = new QNameProperty();
       }
     }
  +
   
   }
  
  
  

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