从EMF模型加载XMI资源时出现ClassCastException

时间:2013-01-30 17:40:58

标签: load persist emf xmi

我想从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)

1 个答案:

答案 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());

这似乎不是正确的注册。