mirror of https://github.com/apache/openjpa.git
OPENJPA-1504 Update TestTraversableResolver so it can be used with Hibernate or Agimatec providers. Upgrade to agimatec-validation-0.9.6-SNAPSHOT, which now supports constraints.xml so all junits pass again with it.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@908660 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4a987190d9
commit
f259a4ee1e
|
@ -73,7 +73,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.agimatec</groupId>
|
<groupId>com.agimatec</groupId>
|
||||||
<artifactId>agimatec-jsr303</artifactId>
|
<artifactId>agimatec-jsr303</artifactId>
|
||||||
<version>0.9.3</version>
|
<version>0.9.6-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<!-- force usage of the geronimo-validation_1.0_spec -->
|
<!-- force usage of the geronimo-validation_1.0_spec -->
|
||||||
|
@ -91,13 +91,13 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.agimatec</groupId>
|
<groupId>com.agimatec</groupId>
|
||||||
<artifactId>agimatec-validation</artifactId>
|
<artifactId>agimatec-validation</artifactId>
|
||||||
<version>0.9.3</version>
|
<version>0.9.6-SNAPSHOT</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-beanutils</groupId>
|
<groupId>commons-beanutils</groupId>
|
||||||
<artifactId>commons-beanutils</artifactId>
|
<artifactId>commons-beanutils</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.2</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
package org.apache.openjpa.integration.validation;
|
package org.apache.openjpa.integration.validation;
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.security.AccessController;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -27,13 +29,15 @@ import javax.validation.Path;
|
||||||
import javax.validation.TraversableResolver;
|
import javax.validation.TraversableResolver;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
import org.apache.openjpa.lib.log.Log;
|
||||||
|
import org.apache.openjpa.lib.util.J2DoPrivHelper;
|
||||||
import org.apache.openjpa.persistence.OpenJPAEntityManager;
|
import org.apache.openjpa.persistence.OpenJPAEntityManager;
|
||||||
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
|
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
|
||||||
import org.apache.openjpa.persistence.OpenJPAPersistence;
|
import org.apache.openjpa.persistence.OpenJPAPersistence;
|
||||||
import org.apache.openjpa.persistence.validation.TraversableResolverImpl;
|
import org.apache.openjpa.persistence.validation.TraversableResolverImpl;
|
||||||
|
// The following 2 are dynamically loaded by loadPathImpl() from setUp()
|
||||||
import org.hibernate.validator.engine.PathImpl;
|
// import org.hibernate.validator.engine.PathImpl;
|
||||||
|
// import com.agimatec.validation.jsr303.util.PathImpl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test the TraversableResolver methods
|
* Test the TraversableResolver methods
|
||||||
|
@ -50,9 +54,10 @@ import org.hibernate.validator.engine.PathImpl;
|
||||||
*/
|
*/
|
||||||
public class TestTraversableResolver extends TestCase {
|
public class TestTraversableResolver extends TestCase {
|
||||||
private static OpenJPAEntityManagerFactorySPI emf = null;
|
private static OpenJPAEntityManagerFactorySPI emf = null;
|
||||||
private OpenJPAEntityManager em;
|
private Log log = null;
|
||||||
|
private OpenJPAEntityManager em = null;
|
||||||
private Book book;
|
private Book book;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a book with a title that is too long, and the embedded
|
* Create a book with a title that is too long, and the embedded
|
||||||
* publisher has a name that is also too long. However, use a
|
* publisher has a name that is also too long. However, use a
|
||||||
|
@ -62,9 +67,7 @@ public class TestTraversableResolver extends TestCase {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
createEMF("non-validation-pu", "SchemaAction='drop,add')");
|
|
||||||
createBook(1, "long title", 234);
|
createBook(1, "long title", 234);
|
||||||
emf.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createEMF(String pu, String schemaAction) {
|
private void createEMF(String pu, String schemaAction) {
|
||||||
|
@ -76,6 +79,19 @@ public class TestTraversableResolver extends TestCase {
|
||||||
"org/apache/openjpa/integration/validation/persistence.xml",
|
"org/apache/openjpa/integration/validation/persistence.xml",
|
||||||
map);
|
map);
|
||||||
assertNotNull(emf);
|
assertNotNull(emf);
|
||||||
|
log = emf.getConfiguration().getLog("Tests");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void closeEMF() {
|
||||||
|
log = null;
|
||||||
|
if (em != null) {
|
||||||
|
em.close();
|
||||||
|
em = null;
|
||||||
|
}
|
||||||
|
if (emf != null) {
|
||||||
|
emf.close();
|
||||||
|
emf = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -102,8 +118,6 @@ public class TestTraversableResolver extends TestCase {
|
||||||
exceptionCaught = true;
|
exceptionCaught = true;
|
||||||
}
|
}
|
||||||
assertTrue(exceptionCaught);
|
assertTrue(exceptionCaught);
|
||||||
em.close();
|
|
||||||
emf.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -126,8 +140,7 @@ public class TestTraversableResolver extends TestCase {
|
||||||
exceptionCaught = true;
|
exceptionCaught = true;
|
||||||
}
|
}
|
||||||
assertFalse(exceptionCaught);
|
assertFalse(exceptionCaught);
|
||||||
em.close();
|
closeEMF();
|
||||||
emf.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -154,8 +167,7 @@ public class TestTraversableResolver extends TestCase {
|
||||||
exceptionCaught = true;
|
exceptionCaught = true;
|
||||||
}
|
}
|
||||||
assertTrue(exceptionCaught);
|
assertTrue(exceptionCaught);
|
||||||
em.close();
|
closeEMF();
|
||||||
emf.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -168,14 +180,14 @@ public class TestTraversableResolver extends TestCase {
|
||||||
em.getTransaction().begin();
|
em.getTransaction().begin();
|
||||||
book = em.find(org.apache.openjpa.integration.validation.Book.class, 1);
|
book = em.find(org.apache.openjpa.integration.validation.Book.class, 1);
|
||||||
assertNotNull(book);
|
assertNotNull(book);
|
||||||
PathImpl path = PathImpl.createPathFromString("org.apache.openjpa.integration.validation.Book.pages");
|
// PathImpl path = PathImpl.createPathFromString("org.apache.openjpa.integration.validation.Book.pages");
|
||||||
Path.Node node = path.getLeafNode();
|
// Path.Node node = path.getLeafNode();
|
||||||
|
Path.Node node = getLeafNodeFromString("org.apache.openjpa.integration.validation.Book.pages");
|
||||||
TraversableResolver tr = new TraversableResolverImpl();
|
TraversableResolver tr = new TraversableResolverImpl();
|
||||||
assertTrue(tr.isReachable(book, node, Book.class, null, ElementType.METHOD));
|
assertTrue(tr.isReachable(book, node, Book.class, null, ElementType.METHOD));
|
||||||
assertTrue(tr.isCascadable(book, node, Book.class, null, ElementType.METHOD));
|
assertTrue(tr.isCascadable(book, node, Book.class, null, ElementType.METHOD));
|
||||||
em.getTransaction().commit();
|
em.getTransaction().commit();
|
||||||
em.close();
|
closeEMF();
|
||||||
emf.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -188,16 +200,17 @@ public class TestTraversableResolver extends TestCase {
|
||||||
em.getTransaction().begin();
|
em.getTransaction().begin();
|
||||||
book = em.find(org.apache.openjpa.integration.validation.Book.class, 1);
|
book = em.find(org.apache.openjpa.integration.validation.Book.class, 1);
|
||||||
assertNotNull(book);
|
assertNotNull(book);
|
||||||
PathImpl path = PathImpl.createPathFromString("org.apache.openjpa.integration.validation.Book.title");
|
// PathImpl path = PathImpl.createPathFromString("org.apache.openjpa.integration.validation.Book.title");
|
||||||
Path.Node node = path.getLeafNode();
|
// Path.Node node = path.getLeafNode();
|
||||||
|
Path.Node node = getLeafNodeFromString("org.apache.openjpa.integration.validation.Book.title");
|
||||||
TraversableResolver tr = new TraversableResolverImpl();
|
TraversableResolver tr = new TraversableResolverImpl();
|
||||||
assertFalse(tr.isReachable(book, node, Book.class, null, ElementType.FIELD));
|
assertFalse(tr.isReachable(book, node, Book.class, null, ElementType.FIELD));
|
||||||
em.getTransaction().commit();
|
em.getTransaction().commit();
|
||||||
em.close();
|
closeEMF();
|
||||||
emf.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createBook(int id, String title, int pages) {
|
private void createBook(int id, String title, int pages) {
|
||||||
|
createEMF("non-validation-pu", "SchemaAction='drop,add')");
|
||||||
em = emf.createEntityManager();
|
em = emf.createEntityManager();
|
||||||
book = new Book(id);
|
book = new Book(id);
|
||||||
book.setTitle(title);
|
book.setTitle(title);
|
||||||
|
@ -209,6 +222,42 @@ public class TestTraversableResolver extends TestCase {
|
||||||
em.getTransaction().begin();
|
em.getTransaction().begin();
|
||||||
em.persist(book);
|
em.persist(book);
|
||||||
em.getTransaction().commit();
|
em.getTransaction().commit();
|
||||||
em.close();
|
closeEMF();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Path.Node getLeafNodeFromString(String s) {
|
||||||
|
Class<?> PathImpl = null;
|
||||||
|
Path.Node node = null;
|
||||||
|
|
||||||
|
// dynamically load PathImpl depending on the Bean Validation provider
|
||||||
|
try {
|
||||||
|
PathImpl = Class.forName("org.hibernate.validator.engine.PathImpl",
|
||||||
|
true, AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction()));
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
log.trace("getLeafNodeFromPath: Did not find org.hibernate.validator.engine.PathImpl");
|
||||||
|
}
|
||||||
|
if (PathImpl == null) {
|
||||||
|
try {
|
||||||
|
PathImpl = Class.forName("com.agimatec.validation.jsr303.util.PathImpl",
|
||||||
|
true, AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction()));
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
log.trace("getLeafNodeFromPath: Did not find com.agimatec.validation.jsr303.util.PathImpl");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertNotNull(PathImpl);
|
||||||
|
try {
|
||||||
|
Method createPathFromString = PathImpl.getMethod("createPathFromString", String.class);
|
||||||
|
assertNotNull(createPathFromString);
|
||||||
|
Method getLeafNode = PathImpl.getMethod("getLeafNode");
|
||||||
|
assertNotNull(getLeafNode);
|
||||||
|
Object path = createPathFromString.invoke(null, s);
|
||||||
|
node = (Path.Node) getLeafNode.invoke(path, null);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
} catch (IllegalAccessException ae) {
|
||||||
|
} catch (java.lang.reflect.InvocationTargetException te) {
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue