我有这个简单的代码片段,它会抛出:
Exception in thread "main" java.lang.ClassCastException: org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl cannot be cast to org.eclipse.emf.ecore.resource.Resource$Factory
相关代码:
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.Resource;
public class Graphe {
public static void main(String[] args) {
org.eclipse.emf.ecore.resource.Resource.Factory.Registry reg=org.eclipse.emf.ecore.resource.Resource.Factory.Registry.INSTANCE;
Map<String, Object> myMap=reg.getExtensionToFactoryMap();
myMap.put("graphes", new XMIResourceImpl());
ResourceSet resSet=new ResourceSetImpl();
Resource res= resSet.getResource(URI.createURI("My.graphes"), true);//exception here
}
}
第二行抛出异常。 My.Graphes 是我用 EMF 创建的一个插件,并将其导出到 eclipse 主机存储库。任何帮助将不胜感激
最佳答案
您遇到的异常是由于 getExtensionToFactoryMap
将 Factory
作为映射值处理,而不是 Resource
。它将 URI
的扩展名映射到 Resource Factory
,后者将创建正确的Resource
。
要解决您的问题,您只需注册 XMIResourceFactoryImpl
而不是 XMIResourceImpl
:
myMap.put("graphes", new XMIResourceFactoryImpl());
关于java - 将 eclipse.emf.ecore.xmi.impl.XMIResourceImpl 转换为 eclipse.emf.ecore.resource.Resource$Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47160217/