[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xmlbeans-dev
Subject:    [PATCH] Fixes issue where specifying user types in an xsdconfig for
From:       wleggette () cleversafe ! com
Date:       2009-05-05 21:13:37
Message-ID: 9ec09138e705b2060ed4.1241558017 () terrence ! local
[Download RAW message or body]

# HG changeset patch
# User wleggette
# Date 1241557917 18000
# Branch clean
# Node ID 9ec09138e705b2060ed4c2af5854acde4edf238f
# Parent  2947370e6ca73a1c1a3c9d52008883fa3cb85d41
Fixes issue where specifying user types in an xsdconfig for types that are not \
currently be compiled (but are being referenced) does not work.

diff -r 2947370e6ca7 -r 9ec09138e705 \
                src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.java
--- a/src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.java	Tue May 05 \
                14:43:28 2009 -0500
+++ b/src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.java	Tue May 05 \
16:11:57 2009 -0500 @@ -60,7 +60,11 @@
 
         // First distribute the global names among the top entities.
         if (javaize)
+        {
             assignGlobalJavaNames(allSeenTypes);
+            assignUserTypes();
+        }
+            
 
         // now fully javaize everything deeply.
         for (int i = 0; i < allSeenTypes.size(); i++)
@@ -100,19 +104,31 @@
                 sImpl.setFullJavaName(pickFullJavaClassName(usedNames, \
                findTopName(sImpl), pickedName, sImpl.isDocumentType(), \
                sImpl.isAttributeType()));
                 sImpl.setFullJavaImplName(pickFullJavaImplName(usedNames, \
sImpl.getFullJavaName()));  
-                UserType utype = \
                StscState.get().getBindingConfig().lookupUserTypeForQName(sImpl.getName());
                
-                if (utype != null)
-                {
-                    sImpl.setUserTypeName(utype.getJavaName());
-                    sImpl.setUserTypeHandlerName(utype.getStaticHandler());
-                }
-
                 setExtensions(sImpl, state);
             }
         }
 
         verifyInterfaceNameCollisions(usedNames, state);
     }
+    
+    static void assignUserTypes()
+    {
+        StscState state = StscState.get();
+        
+        for (UserType utype : StscState.get().getBindingConfig().getUserTypes())
+        {
+            SchemaTypeImpl sImpl = state.findGlobalType(utype.getName(), null, \
null); +            if (sImpl != null)
+            {
+                sImpl.setUserTypeName(utype.getJavaName());
+                sImpl.setUserTypeHandlerName(utype.getStaticHandler());
+            }
+            else
+            {
+                System.err.println("Warning: cannot match user type for " + \
utype.getName()); +            }
+        }
+    }
 
     private static void verifyInterfaceNameCollisions(Set usedNames, StscState \
state)  {
diff -r 2947370e6ca7 -r 9ec09138e705 \
                src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.java
--- a/src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.java	Tue May 05 \
                14:43:28 2009 -0500
+++ b/src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.java	Tue May 05 \
16:11:57 2009 -0500 @@ -396,6 +396,12 @@
 
         return (UserType) _userTypes.get(qname);
     }
+    
+    @Override
+    public UserType[] getUserTypes()
+    {
+        return (UserType[])this._userTypes.values().toArray(new UserType[0]);
+    }
 
     public InterfaceExtension[] getInterfaceExtensions()
     {

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic