打印EObject?

时间:2011-01-09 15:45:32

标签: eclipse-emf

我正在编写一些eclipse emf代码,并希望打印EObject的内容(不将其存储到磁盘)。

以下是我的尝试:

  public static void print(EObject obj) {
    Resource eResource = obj.eResource();
    try {
      eResource.save(System.out, null);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

但是这会产生NullPointerException。我试过这个:

  public static void print(EObject obj) {
    ResourceSet resourceSet = new ResourceSetImpl();
    resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap()
        .put("*", new XMIResourceFactoryImpl());
    Resource resource = resourceSet.createResource(URI.createURI("dummyfile.xml"));
    resource.getContents().add(obj);
    try {
      resource.save(System.out, null);
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }

这样可行,但如果不指定虚拟URI,则无法打印到屏幕上吗?

2 个答案:

答案 0 :(得分:2)

已更新,以包含EcoreUtil.copy()

检查此代码。

Resource res = new XMLResourceImpl ();
res.getContents().add(EcoreUtil.copy(obj));
try {
  resource.save(System.out, null);
} catch (IOException ioe) {
  ioe.printStackTrace();
}

如果失败则是,你需要一个虚拟URI

Resource res = new XMLResourceImpl (URI.createURI("dummyfile.xml"));
res.getContents().add(EcoreUtil.copy(obj));
try {
  resource.save(System.out, null);
} catch (IOException ioe) {
  ioe.printStackTrace();
}

答案 1 :(得分:0)

当我传递副本时:

Resource res = new XMLResourceImpl ();
res.getContents().add(ECoreUtil.copy(obj));
try {
  resource.save(System.out, null);
} catch (IOException ioe) {
  ioe.printStackTrace();
}

某些xmi属性未打印。但是如果我多次调用上面的方法并且不传递副本,我会得到一个NullPointerException。我想我不是在理解一些基本的EMF /收容功能吗?

所以我更新的问题是:

如果在以下代码中使用模型,是否可以在不修改内容的情况下打印FULL EObject模型?