【问题标题】:Print an EObject?打印一个 EObject?
【发布时间】:2011-05-11 19:18:22
【问题描述】:

我正在编写一些 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 就不能打印到屏幕吗??

【问题讨论】:

    标签: eclipse-emf


    【解决方案1】:

    更新为包含 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();
    }
    

    【讨论】:

    • 谢谢你的作品!只需要添加我的 obj 的副本,否则它会在打印后消失: res.getContents().add(EcoreUtil.copy(obj));
    • @tul 我会更新代码。请记住,EMF 只是一个框架,因此所有这些对象都由实现支持。我猜想 EcoreUtil 替换了一个 null 实现值。
    【解决方案2】:

    当我通过副本时:

    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模型?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2021-07-28
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多