使用 ResourceSet 创建文件

Using ResourceSet to create a file

我是 Java 的新手,目前正在尝试使用 Eclipse 中 EMF 建模框架的 ResourceSetResourceFactory。我一直在尝试在文件系统中创建一个扩展名为 xml 的新文件。我的代码看起来像这样:

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");
}  

但由于某些未知原因,我没有看到在文件系统中创建任何 file.xml。我一直试图解决这个问题很长时间,但还没有结果。有人可以帮我吗?

这个示例是完全错误的: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 模型并生成所有必需的代码以使用您的模型。

尝试使用 URI.createFileURI 而非 URI.createURI 来创建 URI 的代码示例。创建的 URI 将映射到一个文件。我几乎可以肯定 XML 扩展名会自动关联到 XMLResourceImpl,因此它应该是 XML 格式。

此外,您注册了一个 XMIResourceImpl 扩展名为 arxml,但是您的文件扩展名为 xml 所以您不会使用您注册的资源(基本上,您表达的映射是在您的代码段中无用)。如果您想要 XMI 而不是 XML,请更改您的文件扩展名或覆盖已注册的 XML 扩展名或将 * 注册为文件扩展名(将所有扩展名映射到 XMIResourceImpl.