我正在尝试使用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值。