Community
Participate
Working Groups
The following code: <epsilon.loadModel name="iUML" type="EMF"> <parameter name="modelFile" value="file:/${basedir}/../../models_generated/iUML_SIML_Iter1.model" /> <parameter name="metamodelUri" value="http://iness.org/iUML_SIML"/> <parameter name="isMetamodelFileBased" value="false" /> <parameter name="readOnLoad" value="true" /> <parameter name="storeOnDisposal" value="false"/> </epsilon.loadModel> Produces the following (fairly hard to understand) error message when the metamodel has not been registered: [epsilon.loadModel] java.lang.NullPointerException [epsilon.loadModel] at org.eclipse.epsilon.emc.emf.EmfUtil.collectDependencies(EmfUtil.java:114) [epsilon.loadModel] at org.eclipse.epsilon.emc.emf.EmfModel.loadModelFromUri(EmfModel.java:234) [epsilon.loadModel] at org.eclipse.epsilon.emc.emf.EmfModel.loadModel(EmfModel.java:161) [epsilon.loadModel] at org.eclipse.epsilon.eol.models.CachedModel.load(CachedModel.java:147) [epsilon.loadModel] at org.eclipse.epsilon.emc.emf.EmfModel.load(EmfModel.java:127) [epsilon.loadModel] at org.eclipse.epsilon.workflow.tasks.LoadModelTask.executeImpl(LoadModelTask.java:50) [epsilon.loadModel] at org.eclipse.epsilon.workflow.tasks.EpsilonTask.execute(EpsilonTask.java:40) [epsilon.loadModel] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) [epsilon.loadModel] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [epsilon.loadModel] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [epsilon.loadModel] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [epsilon.loadModel] at java.lang.reflect.Method.invoke(Method.java:597) [epsilon.loadModel] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [epsilon.loadModel] at org.apache.tools.ant.Task.perform(Task.java:348) [epsilon.loadModel] at org.apache.tools.ant.Target.execute(Target.java:390) [epsilon.loadModel] at org.apache.tools.ant.Target.performTasks(Target.java:411) [epsilon.loadModel] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) [epsilon.loadModel] at org.apache.tools.ant.Project.executeTarget(Project.java:1368) [epsilon.loadModel] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [epsilon.loadModel] at org.eclipse.ant.internal.core.ant.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [epsilon.loadModel] at org.apache.tools.ant.Project.executeTargets(Project.java:1251) [epsilon.loadModel] at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:663) [epsilon.loadModel] at org.eclipse.ant.internal.core.ant.InternalAntRunner.run(InternalAntRunner.java:496) [epsilon.loadModel] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [epsilon.loadModel] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [epsilon.loadModel] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [epsilon.loadModel] at java.lang.reflect.Method.invoke(Method.java:597) [epsilon.loadModel] at org.eclipse.ant.core.AntRunner.run(AntRunner.java:378) [epsilon.loadModel] at org.eclipse.ant.internal.launching.launchConfigurations.AntLaunchDelegate$1.run(AntLaunchDelegate.java:298) [epsilon.loadModel] at java.lang.Thread.run(Thread.java:680)
We should probably have EmfModel produce a more helpful error message when loading fails due to an unregistered metamodel.
+1 - Every time I come across this exception I promise I'll fix this but then I always forget :)
+1 Yes, this isn't a very friendly error message :-D.
I've also meant to fix this for a while! Here's the patch I have right now: EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(metamodelUri); + if (ePackage == null) + throw new EolModelLoadingException(new IllegalArgumentException("Could not locate a metamodel with the URI '" + metamodelUri + "'. Please ensure that this metamodel has been registered with Epsilon."), this); packages.add(ePackage); EmfUtil.collectDependencies(ePackage, packages); We possibly need to consider how to create an EolModelLoadingException (or EolInternalException) without an underlying exception (I'm using IllegalArgumentException as a placeholder for now). Dimitris, are you planning to do this as part of the EGL refactoring? If not, I'll take a stab at it for this patch.
I've committed the patch above.
This has been fixed in the latest interim version.
Fixed in 1.0