Не удается прочитать модуль из преобразования 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. Любые идеи, как я могу правильно загрузить файл? Заранее спасибо!


person WeSt    schedule 11.01.2015    source источник


Ответы (2)


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

person dwagelaar    schedule 21.01.2015
comment
Могу ли я получить помощь с stackoverflow.com/questions/37196593/ пожалуйста? Большое спасибо - person DrB; 13.05.2016

У меня старая версия 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 (как указано в Wiki),

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

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

person Zheng Cheng    schedule 15.01.2015
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его сообщением — вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно репутация, вы сможете комментировать любой пост. - person user35443; 15.01.2015
comment
@ user35443 Letian's предлагает решение - загрузить последнюю версию, в которой проблема исправлена. - person Alex K; 16.01.2015