我是Java的新手,目前正在尝试使用Eclipse中的EMF建模框架中的ResourceFactory
和ResourceSet resourceSet =new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("arxml", new XMIResourceImpl());
URI uri =URI.createURI("D:/User/file.xml");
Resource res = resourceSet.createResource(uri);
try{
resource.save(null);
java.lang.System.out.println("success");
} catch (IOException e){
java.lang.System.out.print("no");
}
。我一直在尝试在文件系统中创建一个带有xml扩展名的新文件。我的代码看起来像这样:
file.xml
但由于某些未知原因,我在文件系统中看不到任何{{1}}。我一直试图解决这个问题很长一段时间,但还没有结果。有人可以帮帮我吗?
答案 0 :(得分:1)
此示例完全错误:URI定义ecore元数据中资源的名称空间,而不是序列化资源的实际位置。通常,URI来自您的Ecore模型定义。实际上,您需要将OutputStream传递给Resource.save()而不是null。您还需要向Resource添加一些内容,否则序列化的XMI将为空。
示例:
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("arxml", new XMIResourceImpl());
URI uri = URI.createURI("http://example.myorganization.com/");
Resource res = resourceSet.createResource(uri);
// TODO add some content here
// res.getContents().add(...)
try{
resource.save(new FileOutputStream("D:/User/file.xml"));
java.lang.System.out.println("success");
} catch (IOException e){
java.lang.System.out.print("no");
}
这只是一个例子。您需要定义Ecore模型并生成所有必需的代码以使用您的模型。
答案 1 :(得分:1)
使用URI.createFileURI
尝试使用代码示例来创建URI,而不是URI.createURI
。创建的URI将映射到文件。我几乎可以肯定XML扩展自动与XMLResourceImpl
相关联,所以它应该是XML格式。
另外,您注册了XMIResourceImpl
arxml
扩展名,但您的文件扩展名为xml
,因此您不会使用已注册的资源(基本上,您表达的映射无效你的片段)。如果您想要XMI而不是XML,请更改文件扩展名或覆盖已注册的XML扩展名,或将*
注册为文件扩展名(将所有扩展名映射到XMIResourceImpl
。