我正在尝试使用EMF加载XML文件,并且正在使用以下代码在XMLArtefactAdapter.java中执行此操作:

构造函数():

ResourceSet set = new ResourceSetImpl();
//registering factory
set.getResourceFactoryRegistry()
  .getExtensionToFactoryMap()
  .put
    (Resource.Factory.Registry.DEFAULT_EXTENSION,new XMLResourceFactoryImpl());


parse()方法:

//parsing XML
try {
        String absolutePath = file.getAbsolutePath();
        URI uri = URI.createFileURI(absolutePath);
        Resource resource = resourceSet.createResource(uri);
        resource.load(Collections.EMPTY_MAP);

        System.out.println("LOADED");

    } catch (IOException e) {
        System.out.println(e.toString());
    }


我正在从我的Main类执行以下代码片段:

Path path = Paths.get("C:\\Users\\Srijani\\Desktop\\book.xml");
XMLArtefactAdapter xmlAdapter = new XMLArtefactAdapter(path);
xmlAdapter.parse();


但是,运行此代码时出现错误。

org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Package with uri 'null' not found. (file:/C:/Users/Srijani/Desktop/plugin.xml, 3, 9)


请注意以下事项:
我的Plugin.xml

<plugin>

   <extension point="org.eclipse.emf.ecore.generated_package">
      <!-- @generated simpletree -->
      <package
            uri="platform:/plugin/com.kaleidoscope.core.aux.simpletree/model/SimpleTree.ecore"
            class="SimpleTree.SimpletreePackage"
            genModel="model/simpletree.genmodel"/>
   </extension>

</plugin>


知道为什么会这样吗?
提前致谢!

最佳答案

EPackage uri是您的EPackage的一种公共标识符。它不应该是蚀uri。

通常,名称空间URI是一个http URL,提供有关EPackage提供程序,ePackage名称和版本的一些基本信息。
例如:

  <extension point="org.eclipse.emf.ecore.generated_package">
     <package
        uri="http://www.eclipse.org/emf/2002/Ecore"
        class="org.eclipse.emf.ecore.EcorePackage"
        genModel="model/Ecore.genmodel"/>
  </extension>


你应该 :


使用您的EPackage标识符更改您的EPackage nsUri,
重新生成EMF代码,
并合并您的plugin.xml和plugin.xml_gen文件以同步您的nsURI值。

07-24 09:28