我想从Eclipse插件环境加载之前持久化的EMF模型资源。我尝试如下。
// obtain a new resource set
ResourceSet resSet = new ResourceSetImpl();
// get the resource
resSet.getResource(URI.createURI(location), true);
location
是相对于平台的路径,例如平台:/resource/Project/default.mymodel
当我尝试使用URI.createURI(...)
获取资源时,我得到一个ClassCastException
:“MymodelFactoryImpl无法强制转换为org.eclipse.emf.ecore.resource.Resource $ Factory”。
我无法解释这一点。有人可以帮帮我吗?
我已经尝试URI.createFileURI(location)
了。这会导致IllegalArgumentException
:“无效的相对路径名称”。
此致
堆栈跟踪如下所示。 java.lang.ClassCastException:de.uka.ipd.sdq.pcm.usagemodel.impl.UsagemodelFactoryImpl无法强制转换为org.eclipse.emf.ecore.resource.Resource $ Factory at org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl.convert(ResourceFactoryRegistryImpl.java:94) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl $ 2.delegatedGetFactory(ResourceSetImpl.java:458) at org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl.getFactory(ResourceFactoryRegistryImpl.java:145) at org.eclipse.emf.ecore.resource.impl.ResourceFactoryRegistryImpl.getFactory(ResourceFactoryRegistryImpl.java:86) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.createResource(ResourceSetImpl.java:431) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandCreateResource(ResourceSetImpl.java:243) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:400)
答案 0 :(得分:0)
这不应该是必要的,因为插件环境会为你做,但尝试注册资源工厂:
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(fileExtension, new ModelResourceFactoryImpl());
其中fileExtension
是要加载的资源的文件扩展名,ModelResourceFactoryImpl
应该是扩展ResourceFactoryImpl
的生成类。
但是,删除以下代码后,可以加载模型。
// Register the XMI resource factory for my extension
Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
Map<String, Object> m = reg.getExtensionToFactoryMap();
m.put("myextension", new XMIResourceFactoryImpl());
这似乎不是正确的注册。