我尝试使用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}) /]
它的确有效......很高兴知道=)
答案 0 :(得分:0)
您是否在清单中导出了包含Java服务的包?如果没有,打开文件MANIFEST.MF,然后转到运行时选项卡,然后导出包含Java类的包。如果要确保调用该服务,还可以尝试在Java方法中的“return”之前抛出一个新的RuntimeException()
。
答案 1 :(得分:0)
没有真正相关,但你应该养成使用这种语法的习惯:
activity.getTest()
而不是
getTest(activity)