Вызов Java-кода с помощью Acceleo - PullRequest
0 голосов
/ 07 июля 2011

Я пытаюсь вызвать некоторый код Java в шаблоне с помощью Acceleo. Код, указанный там: http://wiki.eclipse.org/Acceleo/FAQ#How_to_use_a_Java_service_in_Acceleo работает нормально, но мой код не работает, и я не нахожу никаких ошибок

Вот моя функция 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 ]

0 голосов
/ 21 февраля 2014

Не совсем связано, но вы должны привыкнуть использовать этот синтаксис:

activity.getTest()

вместо

getTest(activity)
0 голосов
/ 07 июля 2011

Вы экспортировали пакет, содержащий сервис Java, в свой манифест? Если нет, откройте файл MANIFEST.MF, затем перейдите на вкладку времени выполнения и там экспортируйте пакет, содержащий класс Java. Вы также можете попробовать выдать новый RuntimeException() перед возвратом в вашем Java-методе, если хотите быть уверенным, что служба вызывается.

...