我正在编写一些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,则无法打印到屏幕上吗?
答案 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模型?