2011-01-09 4 views
0

私はいくつかのeclipse emfコードを書いており、EObjectの内容を印刷したい(ディスクに保存しない)。ここで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を指定せずに、画面に印刷することはできません??:私の代わりにこれを試してみました

EcoreUtil.copyを(含めるように更新

答えて

2

このコードをチェックしてください。 XMI属性の一部が印刷されません

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

:それが失敗した場合、私はコピーを渡すとき

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(); 
} 
+0

ありがとうございました!ちょうど私のobjのコピーを追加するか、印刷後に消えてしまいます。res.getContents()。add(EcoreUtil.copy(obj)); – u123

+0

@tulコードを更新します。 EMFは単なるフレームワークなので、これらのオブジェクトはすべて実装によってサポートされています。私はEcoreUtilが置き換えるnull実装値があると思います。 –

0

フムを必要としています。しかし、上記のメソッドを複数回呼び出してコピーを渡さないと、NullPointerExceptionが発生します。私はここで基本的なEMF /封じ込め機能を理解していないと思いますか?

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

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

関連する問題