我想在我的 Acceleo 主模板中加载 2 个不同的输入模型(一个 .bpel 和一个 .wsdl)。
我为 bpel 和 wsdl 加载了 ecore 元模型,我希望能够使用这样的东西:
[comment encoding = UTF-8 /]
[module generate('http:///org/eclipse/bpel/model/bpel.ecore','http://www.eclipse.org/wsdl/2003/WSDL')/]
[import org::eclipse::acceleo::module::sample::files::processJavaFile /]
[template public generate(aProcess : Process, aDefinition : Definition)]
[comment @main /]
Process Name : [aProcess.name/]
Def Location : [aDefinition.location/]
[/template]
但是当我运行 acceleo 模板时,我得到了这个错误:
An internal error occurred during: "Launching Generate".
Could not find public template generate in module generate.
我想我必须修改 java 启动器(generate.java),因为现在它不能将 2 个模型作为参数。你知道如何?谢谢!
** Kellindil 建议编辑:
只是想知道我是否理解正确,然后再进行修改:我正在尝试修改 Generate() 构造函数。我将其更改为:
//MODIFIED CODE
public Generate(URI modelURI, URI modelURI2, File targetFolder,
List<? extends Object> arguments) {
initialize(modelURI, targetFolder, arguments);
}
在一般情况下,我可以看到它调用 AbstractAcceleoGenerator.initialize(URI, File, List>?>),我应该调用它两次,每个模型一次吗?喜欢:
initialize(modelURI, targetFolder, arguments);
initialize(modelURI2, targetFolder, arguments);
然后,在我的 Generate() 构造函数中模仿超级实现中的代码:
//NON MODIFIED ACCELEO CODE
Map<String, String> AbstractAcceleoLauncher.generate(Monitor monitor) {
File target = getTargetFolder();
if (!target.exists() && !target.mkdirs()) {
throw new IOException("target directory " + target + " couldn't be created."); //$NON-NLS-1$ //$NON-NLS-2$
}
AcceleoService service = createAcceleoService();
String[] templateNames = getTemplateNames();
Map<String, String> result = new HashMap<String, String>();
for (int i = 0; i < templateNames.length; i++) {
result.putAll(service.doGenerate(getModule(), templateNames[i], getModel(), getArguments(),
target, monitor));
}
postGenerate(getModule().eResource().getResourceSet());
originalResources.clear();
return result;
}
我该怎么办?在 initialize() 调用之后,我是否应该尝试在我的 Generate() 构造函数中模仿这个方法正在做什么?