Java &引用;“需要注册工厂”;加载资源时发生异常

Java &引用;“需要注册工厂”;加载资源时发生异常,java,eclipse-emf,Java,Eclipse Emf,我得到以下例外情况: java.lang.RuntimeException: Cannot create a resource for 'file:/home/my_conf.xml'; a registered resource factory is needed “爆炸”代码如下所示,停在:resource=resourceSet….. ResourceSet resourceSet = new ResourceSetImpl(); Resource resource =

我得到以下例外情况:

 java.lang.RuntimeException: Cannot create a resource for 'file:/home/my_conf.xml'; a registered resource factory is needed
“爆炸”代码如下所示,停在:
resource=resourceSet…..

    ResourceSet resourceSet = new ResourceSetImpl();
    Resource resource = null;

    File f = new File(filename); 
    URI uri = URI.createFileURI(f.getAbsolutePath());

    if (!f.exists()) {
        throw new Exception(filename + " does not exist");

    } else {
        resource = resourceSet.getResource(uri, true);
        mapPrepConfiguration = (MapPrepConfiguration) resource.getContents().get(0);
    }

有人有线索吗?

如果在独立模式下运行,则必须手动将工厂注册到资源集工厂注册表中。
在创建资源集实例后添加以下行:

resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xml", new XMLResourceFactoryImpl());
请看

对于“未找到包裹”问题,根据您的情况,有两种可能性:

  • 如果您使用的是静态元模型(java实现是从ecore模型生成的),那么您只需访问相应的包实例即可将其加载并注册到全局EMF包注册表中
您的软件包实例= YourPackage.eInstance

  • 如果您使用的是动态元模型(没有生成java代码),则必须手动注册它

使用前面的代码,您必须先以编程方式从ecore模型中检索EPackage。

谢谢,我做了一些进一步的工作,但得到了以下错误:org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException:org.eclipse.emf.ecore.xmi.PackageNotFoundException:找不到uri为“”的包。(文件:/home/config/my.importedmapconfiguration,2244)请阅读我在第一个答案中给出的常见问题解答,下一个问题将向您解释您的问题。我用有关您的问题的信息编辑了我的第一个答案,请注意,所有内容都可以在EMF常见问题解答中找到。
resourceSet.getPackageRegistry().put(yourPackage.getNsURI(), yourPackage);