You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2004/08/27 23:14:04 UTC
cvs commit: jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/strategy MixedContentEncodingStrategy.java
rdonkin 2004/08/27 14:14:04
Modified: betwixt/src/java/org/apache/commons/betwixt
XMLIntrospector.java
betwixt/src/java/org/apache/commons/betwixt/io
BeanReader.java
betwixt/src/java/org/apache/commons/betwixt/strategy
MixedContentEncodingStrategy.java
Log:
Multi mapping document support. Contributed by Brian Pugh.
Revision Changes Path
1.34 +55 -0 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java
Index: XMLIntrospector.java
===================================================================
RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/XMLIntrospector.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- XMLIntrospector.java 24 Aug 2004 21:00:50 -0000 1.33
+++ XMLIntrospector.java 27 Aug 2004 21:14:04 -0000 1.34
@@ -29,10 +29,12 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
+import org.apache.commons.betwixt.digester.MultiMappingBeanInfoDigester;
import org.apache.commons.betwixt.digester.XMLBeanInfoDigester;
import org.apache.commons.betwixt.digester.XMLIntrospectorHelper;
import org.apache.commons.betwixt.expression.EmptyExpression;
@@ -85,6 +87,9 @@
/** Digester used to parse the XML descriptor files */
private XMLBeanInfoDigester digester;
+ /** Digester used to parse the multi-mapping XML descriptor files */
+ private MultiMappingBeanInfoDigester multiMappingdigester;
+
/** Configuration to be used for introspection*/
private IntrospectionConfiguration configuration;
@@ -525,6 +530,56 @@
XMLBeanInfo xmlBeanInfo = createXMLBeanInfo( beanInfo );
populate( xmlBeanInfo, new JavaBeanType( beanInfo ) );
return xmlBeanInfo;
+ }
+
+
+ /**
+ * <p>Registers the class mappings specified in the multi-class document
+ * given by the <code>InputSource</code>.
+ * </p>
+ * <p>
+ * <strong>Note:</strong> that this method will override any existing mapping
+ * for the speficied classes.
+ * </p>
+ * @param source <code>InputSource</code>, not null
+ * @return <code>Class</code> array containing all mapped classes
+ * @throws IntrospectionException
+ * @throws SAXException
+ * @throws IOException
+ */
+ public synchronized Class[] register(InputSource source) throws IntrospectionException, IOException, SAXException {
+ Map xmlBeanInfoByClass = loadMultiMapping(source);
+ Set keySet = xmlBeanInfoByClass.keySet();
+ Class mappedClasses[] = new Class[keySet.size()];
+ int i=0;
+ for (Iterator it=keySet.iterator(); it.hasNext(); ) {
+ Class clazz = (Class) it.next();
+ mappedClasses[i++] = clazz;
+ XMLBeanInfo xmlBeanInfo = (XMLBeanInfo) xmlBeanInfoByClass.get(clazz);
+ if (xmlBeanInfo != null) {
+ getRegistry().put(clazz, xmlBeanInfo);
+ }
+ }
+ return mappedClasses;
+ }
+
+ /**
+ * Loads the multi-mapping from the given <code>InputSource</code>.
+ * @param mapping <code>InputSource</code>, not null
+ * @return <code>Map</code> containing <code>XMLBeanInfo</code>'s
+ * indexes by the <code>Class</code> they describe
+ * @throws IOException
+ * @throws SAXException
+ */
+ private synchronized Map loadMultiMapping(InputSource mapping) throws IOException, SAXException {
+ // synchronized method so this digester is only used by
+ // one thread at once
+ if (multiMappingdigester == null) {
+ multiMappingdigester = new MultiMappingBeanInfoDigester();
+ multiMappingdigester.setXMLIntrospector(this);
+ }
+ Map multiBeanInfoMap = (Map) multiMappingdigester.parse(mapping);
+ return multiBeanInfoMap;
}
/**
1.24 +30 -0 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/io/BeanReader.java
Index: BeanReader.java
===================================================================
RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/io/BeanReader.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- BeanReader.java 24 Aug 2004 21:00:50 -0000 1.23
+++ BeanReader.java 27 Aug 2004 21:14:04 -0000 1.24
@@ -191,6 +191,36 @@
}
}
+ /**
+ * <p>Registers a class with a multi-mapping.
+ * This mapping is specified by the multi-mapping document
+ * contained in the given <code>InputSource</code>.
+ * </p><p>
+ * <strong>Note:</strong> the custom mappings will be registered with
+ * the introspector. This must remain so for the reading to work correctly
+ * It is recommended that use of the pre-registeration process provided
+ * by {@link XMLIntrospector#register} be considered as an alternative to this method.
+ * </p>
+ * @see {@link #registerBeanClass(Class)} since the general notes given there
+ * apply equally to this
+ * @see {@link XMLIntrospector#register(InputSource) for more details on the multi-mapping format
+ * @param mapping <code>InputSource</code> giving the multi-mapping document specifying
+ * the mapping
+ * @throws IntrospectionException
+ * @throws SAXException
+ * @throws IOException
+ */
+ public void registerMultiMapping(InputSource mapping) throws IntrospectionException, IOException, SAXException {
+ Class[] mappedClasses = introspector.register(mapping);
+ for (int i=0, size=mappedClasses.length; i<size; i++)
+ {
+ Class beanClass = mappedClasses[i];
+ if ( ! registeredClasses.contains( beanClass ) ) {
+ register(beanClass, null);
+
+ }
+ }
+ }
/**
* <p>Registers a class with a custom mapping.
1.5 +1 -0 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/strategy/MixedContentEncodingStrategy.java
Index: MixedContentEncodingStrategy.java
===================================================================
RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/strategy/MixedContentEncodingStrategy.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- MixedContentEncodingStrategy.java 4 Jul 2004 16:57:05 -0000 1.4
+++ MixedContentEncodingStrategy.java 27 Aug 2004 21:14:04 -0000 1.5
@@ -17,6 +17,7 @@
package org.apache.commons.betwixt.strategy;
import org.apache.commons.betwixt.ElementDescriptor;
+import org.apache.commons.betwixt.io.BeanWriter;
/**
* <p>Encodes body content.
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org