Не удается прочитать модуль из преобразования ATL EMFTVM в автономном проекте Java

Согласно вики ATL / EMFTVM, ATL/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 ответа

Я получил старую версию EMFTVM, и у меня та же проблема, что и у вас. Я вытащил последнюю версию из GitHub, и теперь все в порядке.

Обновления: @dwagelaar, ага, да, я использовал EMFTVMResourceFactoryImpl; Вот код, который я использовал, кстати:

    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(как указано в вики),

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

Я передал объект rs, инициализированный выше.

Это (все еще) не работает, потому что вы должны сказать EMF, что файлы *.emftvm не являются XMI и требуют EMFTVMResourceFactoryImpl. Вики-страница ATL/EMFTVM была обновлена ​​улучшенным кодом; см.: https://wiki.eclipse.org/ATL/EMFTVM

Другие вопросы по тегам