0

私はいくつかの 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 を指定せずに画面に出力することはできませんか??

4

2 に答える 2

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();
}
于 2011-01-09T19:14:44.717 に答える
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/封じ込め機能を理解していないと思いますか?

だから私の更新された質問は次のとおりです。

モデルが次のコードで使用されている場合、コンテンツを変更せずに完全な EObject モデルを印刷することは可能ですか?

于 2011-01-09T20:53:50.377 に答える