Вызов 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)
Другие вопросы по тегам