java - 将 eclipse.emf.ecore.xmi.impl.XMIResourceImpl 转换为 eclipse.emf.ecore.resource.Resource$Factory

标签 java eclipse eclipse-emf emf eclipse-emf-ecore

我有这个简单的代码片段,它会抛出:

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 主机存储库。任何帮助将不胜感激

最佳答案

您遇到的异常是由于 getExtensionToFactoryMapFactory 作为映射值处理,而不是 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/

相关文章:

Java:如何测试多线程程序中的细粒度

java - 使用 Java Spark 如何发送 html 文件作为响应

java - 如何实现Guava缓存来存储和获取不同类型的对象?

JavaFX eclipse 配置 - openJDK 10

在 Package Explorer View 中单击方法后,Eclipse 现在仅在编辑器 Pane 中显示单个方法,如何重置为正常行为?

java - 值必须存储在 EMF 模型中,但不应传播到 xml 文件

java - 线性 "smoothed"函数使用查找表

java - 使用一个简单的命令从命令行将一堆 .Java 文件转换为 .Jar 文件

eclipse-emf - 如何在文件更改时自动更新 EMF ResourceSet?

java - 由于 XMI 无法正确加载容器,正在加载序列化的 Ecore 模型