Я не могу вызвать службу упаковки java в Acceleo, потому что она не распознает тип параметров. Это мой простой тестовый код: 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(Send). Последнее записанное значение self было org.eclipse.emf.ecore.impl.DynamicEObjectImpl@1f00eb36 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@2c2aade3 (name: Send) (instanceClassName: null) (абстрактный: false, интерфейс: ложь)). Обнаружена проблема при создании файловой системы system.P'.
Если я использую String в качестве типа параметра вместо Send, все работает нормально.