Вызов Java-кода с помощью Acceleo
Я пытаюсь вызвать некоторый код Java в шаблоне с Acceleo. Код, приведенный там: http://wiki.eclipse.org/Acceleo/FAQ работает нормально, но мой код не работает, и я не нахожу никаких ошибок.
Вот моя функция Java:
public String test(softo.Activite activity) {
return activity.getModXName();
}
и код шаблона:
[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite activity)', Sequence{a}) /]
[template public createOperationUrl(activity : AccessibleActivite) ]
Result : [getTest(activity)/]
[/template]
Я также попытался заменить функцию возврата на 'foobar', но она тоже не работает. У меня нет сообщений при генерации: файл просто содержит "Результат:". Я также проверил пути и имена файлов, которые я использую.
Есть идеи, чтобы решить проблему?
Редактировать: Хорошо! Я наконец нашел ответ... это действительно глупо: в коде запроса вам не нужно указывать имя аргумента, только его тип, поэтому:
[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite activity)', Sequence{a}) /]
стал:
[query public getTest(a : Activite) : String = invoke('org.eclipse.acceleo.softogen.files.Utility','test(softo.Activite)', Sequence{a}) /]
и это работает... Полезно знать =)
2 ответа
Вы экспортировали пакет, содержащий сервис Java в вашем манифесте? Если нет, откройте файл MANIFEST.MF, затем перейдите на вкладку времени выполнения и там экспортируйте пакет, содержащий класс Java. Вы также можете попробовать бросить новый RuntimeException()
перед "возвратом" в вашем Java-методе, если вы хотите быть уверены, что служба вызывается.
Не очень похоже, но вы должны взять за правило использовать этот синтаксис:
activity.getTest()
вместо
getTest(activity)