1

我想加载一个之前从 Eclipse 插件环境中持久化的 EMF 模型资源。我尝试如下。

// obtain a new resource set

ResourceSet resSet = new ResourceSetImpl();

// get the resource 

resSet.getResource(URI.createURI(location), true);

location是相对于平台的路径,例如 platform:/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.impl 中转换为 org.eclipse.emf.ecore.resource.Resource$Factory .ResourceFactoryRegistryImpl.convert(ResourceFactoryRegistryImpl.java:94) 在 org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$2.delegatedGetFactory(ResourceSetImpl.java:458) 在 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) 在 org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandCreateResource(ResourceSetImpl.java:

4

1 回答 1

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

看来这不是正确的注册。

于 2013-01-31T09:01:37.997 回答