使用 ResourceSet 创建文件
Using ResourceSet to create a file
我是 Java 的新手,目前正在尝试使用 Eclipse 中 EMF 建模框架的 ResourceSet
和 ResourceFactory
。我一直在尝试在文件系统中创建一个扩展名为 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
.
我是 Java 的新手,目前正在尝试使用 Eclipse 中 EMF 建模框架的 ResourceSet
和 ResourceFactory
。我一直在尝试在文件系统中创建一个扩展名为 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
.