我无法在Acceleo中调用java包装服务,因为它无法识别参数类型。这是我的简单测试代码:main调用存储在Services.mtl中的查询,该查询调用只返回对象名称的java服务“发送”
Main.mtl
[file ('system.P', false, 'UTF-8')]
[for (t : Send | aSystemBehavior.transitions)) ]
[getName(t)/]
[/for]
[/file]
Services.mtl
[query public getName(arg0 : Send) : String
= invoke('myPackage.Services', 'getName(myPackage.Send)', Sequence{arg0})
/
Services.java
public class Services
{
public String getName(Send t)
{return t.getName();}
}
错误日志显示:
表达式的结果无效 self.invoke( 'myPakage.Services', 'getName(myPakage.Send)',Sequence {arg0})在第0行 用于查询getName(发送)的模块服务。最后记录的自我价值 是org.eclipse.emf.ecore.impl.DynamicEObjectImpl@1f00eb36(eClass: org.eclipse.emf.ecore.impl.EClassImpl@2c2aade3(姓名:发送) (instanceClassName:null)(abstract:false,interface:false))。 生成文件系统时发现问题.P'。
如果我使用String作为参数类型而不是Send,那么一切正常。
答案 0 :(得分:0)
是否已导出包含“服务”服务的软件包?如果没有,请打开文件MANIFEST.MF,进入运行时选项卡并将其包添加到导出的包列表中。您确定“发送”对象有名称吗?此消息仅指示查询getName返回null。
答案 1 :(得分:0)
我不再有这个问题......我从零开始创建了一个新的Acceleo项目,它可以运行。我不确定是什么问题...也许它是关于在创建模块期间导入的元模型选择(我必须在运行时和开发时元模型之间进行选择)。