我无法在 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'。
如果我使用字符串而不是发送作为参数类型,一切正常。