[432807] Tolerate exceptions during ID resolution.
diff --git a/plugins/org.eclipse.emf.ecore.xmi/src/org/eclipse/emf/ecore/xmi/impl/XMLHandler.java b/plugins/org.eclipse.emf.ecore.xmi/src/org/eclipse/emf/ecore/xmi/impl/XMLHandler.java
index 7e4f877..245c6e9 100644
--- a/plugins/org.eclipse.emf.ecore.xmi/src/org/eclipse/emf/ecore/xmi/impl/XMLHandler.java
+++ b/plugins/org.eclipse.emf.ecore.xmi/src/org/eclipse/emf/ecore/xmi/impl/XMLHandler.java
@@ -1066,7 +1066,17 @@
{
// Try to resolve the proxy locally.
//
- EObject resolvedEObject = xmlResource.getEObject(proxy.eProxyURI().fragment());
+ EObject resolvedEObject = null;
+
+ try
+ {
+ resolvedEObject = xmlResource.getEObject(proxy.eProxyURI().fragment());
+ }
+ catch (RuntimeException exception)
+ {
+ // Ignore exceptions, e.g., when a URI fragment is used but is ill-formed.
+ }
+
if (resolvedEObject != null)
{
// We won't need to process this again later.
@@ -1143,7 +1153,16 @@
for (Iterator<SingleReference> i = forwardSingleReferences.iterator(); i.hasNext(); )
{
SingleReference ref = i.next();
- EObject obj = xmlResource.getEObject((String) ref.getValue());
+ EObject obj = null;
+ RuntimeException cause = null;
+ try
+ {
+ obj = xmlResource.getEObject((String) ref.getValue());
+ }
+ catch (RuntimeException exception)
+ {
+ cause = exception;
+ }
if (obj != null)
{
@@ -1157,12 +1176,12 @@
}
else if (isEndDocument)
{
- error
- (new UnresolvedReferenceException
- ((String) ref.getValue(),
- getLocation(),
- ref.getLineNumber(),
- ref.getColumnNumber()));
+ UnresolvedReferenceException exception = new UnresolvedReferenceException((String) ref.getValue(), getLocation(), ref.getLineNumber(), ref.getColumnNumber());
+ if (cause != null)
+ {
+ exception.initCause(cause);
+ }
+ error(exception);
}
}
@@ -1175,20 +1194,30 @@
for (int j = 0, l = values.length; j < l; j++)
{
String id = (String) values[j];
- EObject obj = xmlResource.getEObject(id);
- values[j] = obj;
+ EObject obj = null;
+ RuntimeException cause = null;
+
+ try
+ {
+ obj = xmlResource.getEObject(id);
+ values[j] = obj;
+ }
+ catch (RuntimeException exception)
+ {
+ cause = exception;
+ }
if (obj == null)
{
failure = true;
if (isEndDocument)
{
- error
- (new UnresolvedReferenceException
- (id,
- getLocation(),
- ref.getLineNumber(),
- ref.getColumnNumber()));
+ UnresolvedReferenceException exception = new UnresolvedReferenceException(id, getLocation(), ref.getLineNumber(), ref.getColumnNumber());
+ if (cause != null)
+ {
+ exception.initCause(cause);
+ }
+ error(exception);
}
}
}