I have recently discovered the need for a factory during
unmarshalling. The usecase is accessing data that is not contained in
the XML document (like stuff stored in the HttpSession).
I noticed the ObjectFactory in the UnmarshalHandler, so I added
setters for it in both the UnmarshalHandler and Unmarshaller (the only
way to get to it).
Other changes that might be useful: Expose more information about the
state of the unmarshaller to the factory, to allow it to be more
flexible in the creation.
I have attached a suggested patch. This is working for us, but I would
be happy to revise if someone has suggestions.
Should I create a feature request in Jira?
- Paul
Property changes on: C:\workplace\.eclipse\thorn-workspace\castor\src
___________________________________________________________________
Name: svn:ignore
- Debug
Release
+
Debug
Release
.ant-targets-build.xml
Index:
C:/workplace/.eclipse/thorn-workspace/castor/src/main/java/org/exolab/castor/xml/UnmarshalHandler.java
===================================================================
---
C:/workplace/.eclipse/thorn-workspace/castor/src/main/java/org/exolab/castor/xml/UnmarshalHandler.java
(revision 6325)
+++
C:/workplace/.eclipse/thorn-workspace/castor/src/main/java/org/exolab/castor/xml/UnmarshalHandler.java
(working copy)
@@ -3846,5 +3846,13 @@
} //-- ArrayHandler
+ public ObjectFactory getObjectFactory() {
+ return _objectFactory;
+ }
+
+ public void setObjectFactory(ObjectFactory objectFactory) {
+ _objectFactory = objectFactory;
+ }
+
} //-- Unmarshaller
Index:
C:/workplace/.eclipse/thorn-workspace/castor/src/main/java/org/exolab/castor/xml/Unmarshaller.java
===================================================================
---
C:/workplace/.eclipse/thorn-workspace/castor/src/main/java/org/exolab/castor/xml/Unmarshaller.java
(revision 6325)
+++
C:/workplace/.eclipse/thorn-workspace/castor/src/main/java/org/exolab/castor/xml/Unmarshaller.java
(working copy)
@@ -54,6 +54,7 @@
import org.exolab.castor.mapping.MappingLoader;
import org.exolab.castor.util.Configuration;
import org.exolab.castor.util.LocalConfiguration;
+import org.exolab.castor.util.ObjectFactory;
import org.exolab.castor.xml.util.*;
//-- misc xml related imports
@@ -71,7 +72,6 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.StringTokenizer;
-
/**
* An unmarshaller to allowing unmarshalling of XML documents to
* Java Objects. The Class must specify
@@ -185,6 +185,11 @@
* A list of namespace To Package Mappings
*/
private HashMap _namespaceToPackage = null;
+
+ /**
+ * An optional factory for unmarshalling objects
+ */
+ private ObjectFactory _objectFactory;
//----------------/
//- Constructors -/
@@ -337,6 +342,11 @@
handler.setIgnoreExtraElements(_ignoreExtraElements);
handler.setConfiguration(_config);
handler.setWhitespacePreserve(_wsPreserve);
+
+ // If the object factory has been set, set it on the handler
+ if (this._objectFactory != null) {
+ handler.setObjectFactory(this._objectFactory);
+ }
//-- copy namespaceToPackageMappings
if (_namespaceToPackage != null) {
@@ -861,5 +871,16 @@
return unmarshaller.unmarshal(node);
} //-- void unmarshal(Writer)
+
+ /**
+ * Set an object factory for the unmarshaller. This
+ * factory will be used to construct the objects being
+ * unmarshalled.
+ * @param objectFactory Factory used for constructing objects
+ * during unmarshalling.
+ */
+ public void setObjectFactory(ObjectFactory objectFactory) {
+ this._objectFactory = objectFactory;
+ } // -- setObjectFactory
} //-- Unmarshaller
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email