无法从Java独立项目中的ATL EMFTVM转换中读取模块

时间:2015-01-11 11:46:42

标签: java eclipse eclipse-emf emf eclipse-atl

根据ATL/EMFTVM wikiATL/EMFTVM可以使用

独立运行
ResourceSet moduleRS = new ResourceSetImpl();
moduleRS.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl());

DefaultModuleResolver mr = new DefaultModuleResolver("pathToModuleDirectory", moduleRS);
TimingData td = new TimingData();
env.loadModule(mr, "ModuleName");
td.finishLoading();
env.run(td);
td.finish();

然而,这总是产生一个例外Module not found。我仔细调试了代码。在内部,抛出SaxParseException,这很奇怪,因为我的 .emftvm文件不是XML文件。我有什么想法可以正确加载文件?提前谢谢!

2 个答案:

答案 0 :(得分:1)

我得到了旧版本的EMFTVM,并且遇到了和你一样的问题。我从github上下载了最新版本,现在很好。

更新: @dwagelaar,啊哈,是的,我使用了EMFTVMResourceFactoryImpl;这是我用的代码btw:

    ExecEnv env = EmftvmFactory.eINSTANCE.createExecEnv();
    ResourceSet rs = new ResourceSetImpl();
    rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
    rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
    rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("emftvm", new EMFTVMResourceFactoryImpl());

此外,不是传递新的ResourceSetImpl(如Wiki中所示),

// Don't do this! 
ModuleResolver mr = new DefaultModuleResolver("platform:/plugin/my.plugin.id/transformations/", new ResourceSetImpl());

我传入了上面初始化的 rs 对象。

答案 1 :(得分:1)

这(仍然)不起作用,因为您必须告诉EMF * .emftvm文件不是XMI,并且需要EMFTVMResourceFactoryImpl。 ATL / EMFTVM维基页面已更新,改进了代码;见:https://wiki.eclipse.org/ATL/EMFTVM#Standalone_use