Author: dwoods
Date: Thu Feb 25 16:47:18 2010
New Revision: 916342
URL: http://svn.apache.org/viewvc?rev=916342&view=rev
Log:
OPENJPA-1535 Inconsistency in exceptions thrown from
MetaDataRepository.resolve(). Patch contributed by Hiroki Tateno.
Modified:
openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
Modified:
openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?rev=916342&r1=916341&r2=916342&view=diff
==============================================================================
---
openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
(original)
+++
openjpa/branches/1.3.x/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
Thu Feb 25 16:47:18 2010
@@ -140,7 +140,7 @@
new InheritanceOrderedMetaDataList();
private final InheritanceOrderedMetaDataList _mapping =
new InheritanceOrderedMetaDataList();
- private final List _errs = new LinkedList();
+ private final List<RuntimeException> _errs = new
LinkedList<RuntimeException>();
// system listeners
private LifecycleEventManager.ListenerList _listeners =
@@ -555,14 +555,18 @@
err &= resolveMapping((ClassMetaData) resolved.get(i));
// throw errors encountered
+ // OPENJPA-1535 Always throw a MetaDataException because callers
+ // of loadRegisteredClassMetaData expect only MetaDataException
+ // to be thrown.
if (err && !_errs.isEmpty()) {
RuntimeException re;
- if (_errs.size() == 1)
- re = (RuntimeException) _errs.get(0);
- else
- re = new MetaDataException(_loc.get("resolve-errs")).
- setNestedThrowables((Throwable[]) _errs.toArray
- (new Exception[_errs.size()]));
+ if ((_errs.size() == 1) && (_errs.get(0) instanceof
MetaDataException)) {
+ re = _errs.get(0);
+ } else {
+ re = new MetaDataException(_loc.get("resolve-errs"))
+ .setNestedThrowables((Throwable[]) _errs
+ .toArray(new Exception[_errs.size()]));
+ }
_errs.clear();
throw re;
}