0

我无法在 Acceleo 中调用 java 包装服务,因为它无法识别参数类型。这是我的简单测试代码:主要调用存储在 Services.mtl 中的查询,该查询调用只返回对象名称“Send”的 java 服务

主要.mtl

[file ('system.P', false, 'UTF-8')]
     [for (t : Send | aSystemBehavior.transitions)) ]
             [getName(t)/]
     [/for]
[/file]

服务.mtl

[query public getName(arg0 : Send) : String
    = invoke('myPackage.Services', 'getName(myPackage.Send)', Sequence{arg0})

/]

服务.java

public class Services 
{
   public String getName(Send t)
        {return t.getName();}
}

错误日志显示:

查询 getName(Send) 的模块服务中第 0 行的表达式 self.invoke('myPakage.Services', 'getName(myPakage.Send)', Sequence {arg0}) 的结果无效。上次记录的 self 值为 org.eclipse.emf.ecore.impl.DynamicEObjectImpl@1f00eb36 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@2c2aade3 (name: Send) (instanceClassName: null) (abstract: false,接口:假))。生成文件系统时发现问题。P'。

如果我使用字符串而不是发送作为参数类型,一切正常。

4

2 回答 2

0

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

于 2014-05-30T07:00:30.320 回答
0

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

于 2014-07-18T22:46:35.110 回答