Acceleo java包装服务没有采用复杂的参数 - 表达式self.invoke的结果无效

时间:2014-05-28 22:51:23

标签: acceleo

我无法在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,那么一切正常。

2 个答案:

答案 0 :(得分:0)

是否已导出包含“服务”服务的软件包?如果没有,请打开文件MANIFEST.MF,进入运行时选项卡并将其包添加到导出的包列表中。您确定“发送”对象有名称吗?此消息仅指示查询getName返回null。

答案 1 :(得分:0)

我不再有这个问题......我从零开始创建了一个新的Acceleo项目,它可以运行。我不确定是什么问题...也许它是关于在创建模块期间导入的元模型选择(我必须在运行时和开发时元模型之间进行选择)。