2011-07-07 60 views
0

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

这里我的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的”来代替返回功能,但它也不起作用。 我生成时没有任何消息:文件只包含'Result:'。 我也检查过我使用的路径和文件名。

任何想法来解决这个问题?

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

[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

我没有看到这两个查询之间的区别......他们看起来一样。我和你有同样的问题,你是怎么解决的?谢谢 – DeLac

回答

0

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

+0

该软件包输出良好。但是,谢谢你的答案,我可能会忘记这一点。我试图启动一个RuntimeException,实际上这个函数没有被调用。 –

0

不是真的有关,但你应该考虑使用此语法的习惯:

activity.getTest() 

,而不是

getTest(activity)