使用Acceleo调用Java代码

时间:2011-07-07 11:58:31

标签: eclipse templates model acceleo

我尝试使用Acceleo在模板中调用一些java代码。 那里给出的代码:http://wiki.eclipse.org/Acceleo/FAQ#How_to_use_a_Java_service_in_Acceleo工作正常,但我的代码没有,我没有发现任何错误。

这是我的java函数:

public String test(softo.Activite activity) {
     return activity.getModXName();
}

和模板代码:

[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite activity)', Sequence{a}) /]
[template public createOperationUrl(activity : AccessibleActivite) ]
Result : [getTest(activity)/]
[/template]

我还尝试通过返回'foobar'来替换return函数,但它也不起作用。 生成时我没有任何消息:文件只包含'结果:'。 我还检查了我使用的路径和文件名。

有什么想法解决这个问题吗?

编辑: 好的 !我终于找到了答案......这真的很愚蠢:在查询代码中你不必把参数名称,只有它们的类型,所以:

[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite activity)', Sequence{a}) /]

成了:

[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite)', Sequence{a}) /]

它的确有效......很高兴知道=)

2 个答案:

答案 0 :(得分:0)

您是否在清单中导出了包含Java服务的包?如果没有,打开文件MANIFEST.MF,然后转到运行时选项卡,然后导出包含Java类的包。如果要确保调用该服务,还可以尝试在Java方法中的“return”之前抛出一个新的RuntimeException()

答案 1 :(得分:0)

没有真正相关,但你应该养成使用这种语法的习惯:

activity.getTest()

而不是

getTest(activity)