[jboss-svn-commits] JBoss Common SVN: r2628 - jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 10 18:28:17 EDT 2007


Author: scott.stark at jboss.org
Date: 2007-10-10 18:28:17 -0400 (Wed, 10 Oct 2007)
New Revision: 2628

Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultSchemaResolver.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaResolverConfig.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
Log:
Add support for registering binding classes by schemaLocation

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultSchemaResolver.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultSchemaResolver.java	2007-10-10 18:01:15 UTC (rev 2627)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultSchemaResolver.java	2007-10-10 22:28:17 UTC (rev 2628)
@@ -50,6 +50,8 @@
    private Map<String, SchemaBinding> schemasByUri = Collections.emptyMap();
    /** Namespace to JBossXBBuilder binding class */
    private WeakHashMap<String, Class> uriToClass = new WeakHashMap<String, Class>();
+   /** SchemaLocation to JBossXBBuilder binding class */
+   private WeakHashMap<String, Class> schemaLocationToClass = new WeakHashMap<String, Class>();
    private Map<String, SchemaBindingInitializer> schemaInitByUri = Collections.emptyMap();
    private Map<String, Boolean> schemaParseAnnotationsByUri = Collections.emptyMap();
 
@@ -217,6 +219,10 @@
    {
       uriToClass.put(nsUri, clazz);
    }
+   public void addClassBindingForLocation(String schemaLocation, Class clazz)
+   {
+      schemaLocationToClass.put(schemaLocation, clazz);
+   }
    public Class removeClassBinding(String nsUri)
    {
       return uriToClass.remove(nsUri);      
@@ -250,6 +256,8 @@
 
       // Look for a class 
       Class bindingClass = uriToClass.get(nsURI);
+      if (bindingClass == null)
+         bindingClass = schemaLocationToClass.get(schemaLocation);
       if (bindingClass != null)
       {
          if( log.isTraceEnabled() )

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaResolverConfig.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaResolverConfig.java	2007-10-10 18:01:15 UTC (rev 2627)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaResolverConfig.java	2007-10-10 22:28:17 UTC (rev 2628)
@@ -55,6 +55,9 @@
    /** The binding classes by namespace */
    protected Properties bindingClasses;
 
+   /** The binding classes by schemaLocation */
+   protected Properties bindingClassesByLocation;
+
    public Properties getSchemaInitializers()
    {
       return schemaInitializers;
@@ -123,6 +126,35 @@
       }
    }
 
+   public Properties getBindingClassesByLocations()
+   {
+      return bindingClassesByLocation;
+   }
+
+   public void setBindingClassesByLocations(Properties bindingClassesByLocation)
+   {
+      this.bindingClassesByLocation = bindingClassesByLocation;
+      if (bindingClassesByLocation != null && bindingClassesByLocation.size() != 0)
+      {
+         ClassLoader loader = Thread.currentThread().getContextClassLoader();
+         for (Iterator i = bindingClassesByLocation.entrySet().iterator(); i.hasNext();)
+         {
+            Map.Entry entry = (Map.Entry) i.next();
+            String schemaLocation = (String) entry.getKey();
+            String value = (String) entry.getValue();
+            try
+            {
+               Class clazz = loader.loadClass(value);
+               resolver.addClassBindingForLocation(schemaLocation, clazz);
+            }
+            catch(ClassNotFoundException e)
+            {
+               log.warn("Failed to load class: "+value, e);
+            }
+         }
+      }
+   }
+
    public Properties getBindingClasses()
    {
       return bindingClasses;
@@ -151,4 +183,5 @@
          }
       }
    }
+
 }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2007-10-10 18:01:15 UTC (rev 2627)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SundayContentHandler.java	2007-10-10 22:28:17 UTC (rev 2628)
@@ -291,7 +291,12 @@
          else if(schemaResolver != null)
          {
             String schemaLocation = atts == null ? null : Util.getSchemaLocation(atts, namespaceURI);
-            schemaBinding = schemaResolver.resolve(namespaceURI, null, schemaLocation);
+            // Use the dtd info if it exists and there is no schemaLocation
+            if(sawDTD && schemaLocation != null && schemaLocation.length() == 0)
+            {
+               schemaLocation = dtdSystemId;
+            }
+            schemaBinding = schemaResolver.resolve(namespaceURI, dtdPublicId, schemaLocation);
             if(schemaBinding != null)
             {
                particle = schemaBinding.getElementParticle(startName);




More information about the jboss-svn-commits mailing list