[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