使用ResourceSet创建文件

时间:2015-10-28 09:41:42

标签: java xml eclipse emf

我是Java的新手,目前正在尝试使用Eclipse中的EMF建模框架中的ResourceFactoryResourceSet 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}}。我一直试图解决这个问题很长一段时间,但还没有结果。有人可以帮帮我吗?

2 个答案:

答案 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