You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2006/09/11 20:23:31 UTC
svn commit: r442330 - in /incubator/graffito/trunk/jcr/jcr-mapping/src:
java/org/apache/portals/graffito/jcr/mapper/model/
java/org/apache/portals/graffito/jcr/persistence/collectionconverter/
java/org/apache/portals/graffito/jcr/persistence/objectconv...
Author: clombart
Date: Mon Sep 11 13:23:30 2006
New Revision: 442330
URL: http://svn.apache.org/viewvc?view=rev&rev=442330
Log:
Apply patch provided by Felix Meschberger for issue GRFT-100
Modified:
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/FieldDescriptor.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/ManageableCollectionUtil.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java
incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/reflection/ReflectionUtils.java
incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/TestBase.java
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/FieldDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/FieldDescriptor.java?view=diff&rev=442330&r1=442329&r2=442330
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/FieldDescriptor.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/mapper/model/FieldDescriptor.java Mon Sep 11 13:23:30 2006
@@ -15,6 +15,9 @@
*/
package org.apache.portals.graffito.jcr.mapper.model;
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
+
/**
*
@@ -278,9 +281,9 @@
}
else {
try {
- return Class.forName(this.fieldType);
+ return ReflectionUtils.forName(this.fieldType);
}
- catch (ClassNotFoundException cnfe) {
+ catch (JcrMappingException jme) {
; // nothing to do; it will be dynamically determined
}
}
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/ManageableCollectionUtil.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/ManageableCollectionUtil.java?view=diff&rev=442330&r1=442329&r2=442330
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/ManageableCollectionUtil.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/collectionconverter/ManageableCollectionUtil.java Mon Sep 11 13:23:30 2006
@@ -28,6 +28,7 @@
import org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.ManageableArrayList;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.ManageableSet;
import org.apache.portals.graffito.jcr.persistence.collectionconverter.impl.ManageableVector;
+import org.apache.portals.graffito.jcr.reflection.ReflectionUtils;
/**
* Utility class used to instantiate {@link ManageableCollection}
@@ -44,9 +45,7 @@
*/
public static ManageableCollection getManageableCollection(String manageableCollectionClassName) {
try {
- Class collectionClass = Class.forName(manageableCollectionClassName);
-
- return (ManageableCollection) collectionClass.newInstance();
+ return (ManageableCollection) ReflectionUtils.newInstance(manageableCollectionClassName);
}
catch (Exception e) {
throw new JcrMappingException("Cannot create manageable collection : "
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java?view=diff&rev=442330&r1=442329&r2=442330
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/objectconverter/impl/ObjectConverterImpl.java Mon Sep 11 13:23:30 2006
@@ -258,7 +258,7 @@
Node node = (Node) session.getItem(path);
if (node.hasProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME)) {
String className = node.getProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME).getValue().getString();
- classDescriptor = mapper.getClassDescriptorByClass(Class.forName(className));
+ classDescriptor = mapper.getClassDescriptorByClass(ReflectionUtils.forName(className));
} else {
String nodeType = node.getPrimaryNodeType().getName();
if (nodeType.equals(PersistenceConstant.FROZEN_NODE_TYPE)) {
@@ -279,8 +279,8 @@
retrieveCollectionFields(session, classDescriptor, node, object, false);
return object;
- } catch (ClassNotFoundException clnf) {
- throw new PersistenceException("Impossible to instantiate the object at " + path, clnf);
+// } catch (ClassNotFoundException clnf) {
+// throw new PersistenceException("Impossible to instantiate the object at " + path, clnf);
} catch (PathNotFoundException pnfe) {
// HINT should never get here
throw new PersistenceException("Impossible to get the object at " + path, pnfe);
@@ -316,7 +316,7 @@
}
String className = node.getProperty(PersistenceConstant.DISCRIMINATOR_PROPERTY_NAME).getValue().getString();
- classDescriptor = getClassDescriptor(Class.forName(className));
+ classDescriptor = getClassDescriptor(ReflectionUtils.forName(className));
object = ReflectionUtils.newInstance(className);
} else {
if (classDescriptor.usesNodeTypePerConcreteClassStrategy()) {
@@ -334,8 +334,8 @@
retrieveCollectionFields(session, classDescriptor, node, object, false);
return object;
- } catch (ClassNotFoundException clnf) {
- throw new PersistenceException("Impossible to instantiate the object at " + path, clnf);
+// } catch (ClassNotFoundException clnf) {
+// throw new PersistenceException("Impossible to instantiate the object at " + path, clnf);
} catch (PathNotFoundException pnfe) {
// HINT should never get here
throw new PersistenceException("Impossible to get the object at " + path, pnfe);
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/reflection/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/reflection/ReflectionUtils.java?view=diff&rev=442330&r1=442329&r2=442330
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/reflection/ReflectionUtils.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/java/org/apache/portals/graffito/jcr/reflection/ReflectionUtils.java Mon Sep 11 13:23:30 2006
@@ -30,6 +30,36 @@
* @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a>
*/
abstract public class ReflectionUtils {
+
+ // default the class loader to the load of this class
+ private static ClassLoader classLoader = ReflectionUtils.class.getClassLoader();
+
+ /**
+ * Sets the class loader to use in the {@link #forName(String)} method to
+ * load classes.
+ * <p>
+ * Care must be taken when using this method as when setting an improperly
+ * set up classloader, the mapper will not work again throwing tons of
+ * exceptions.
+ *
+ * @param newClassLoader The new class loader to use. This may be
+ * <code>null</code> in which case the system class loader will be used.
+ */
+ public static void setClassLoader(ClassLoader newClassLoader) {
+ classLoader = newClassLoader;
+ }
+
+ /**
+ * Returns the class loader which is used by the {@link #forName(String)}
+ * method to load classes.
+ *
+ * @return The class loader used by {@link #forName(String)} or
+ * <code>null</code> if the system class loader is used.
+ */
+ public static ClassLoader getClassLoader() {
+ return classLoader;
+ }
+
public static Object getNestedProperty(Object object, String fieldName) {
if (null == object) {
return null;
@@ -84,7 +114,7 @@
*/
public static Object invokeConstructor(String className, Object[] params) {
try {
- Class converterClass= Class.forName(className);
+ Class converterClass= forName(className);
return ConstructorUtils.invokeConstructor(converterClass, params);
}
@@ -114,7 +144,7 @@
*/
public static Object newInstance(String clazz) {
try {
- return Class.forName(clazz).newInstance();
+ return forName(clazz).newInstance();
}
catch(Exception ex) {
throw new JcrMappingException("Cannot create instance for class " + clazz, ex);
@@ -127,7 +157,7 @@
*/
public static Class forName(String clazz) {
try {
- return Class.forName(clazz);
+ return Class.forName(clazz, true, getClassLoader());
}
catch(Exception ex) {
throw new JcrMappingException("Cannot load class " + clazz, ex);
Modified: incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/TestBase.java?view=diff&rev=442330&r1=442329&r2=442330
==============================================================================
--- incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/TestBase.java (original)
+++ incubator/graffito/trunk/jcr/jcr-mapping/src/test/org/apache/portals/graffito/jcr/TestBase.java Mon Sep 11 13:23:30 2006
@@ -164,7 +164,7 @@
protected void registerNodeTypes(Session session)
throws InvalidNodeTypeDefException, javax.jcr.RepositoryException, IOException {
InputStream xml = new FileInputStream(
- "./src/test-config/repository/repository/nodetypes/custom_nodetypes.xml");
+ "./src/test-config/nodetypes/custom_nodetypes.xml");
// HINT: throws InvalidNodeTypeDefException, IOException
NodeTypeDef[] types = NodeTypeReader.read(xml);