Я пытаюсь реализовать простой процессор аннотаций с помощью балерины (jBallerina-1.0.5 в MacOS Catalina). В этом примере мне нужно:
- Перебирать доступные
resource
функции заданногоservice
- Для каждой итерации получайте значения заданного
@annotation
, как указано вresource
.
Например:
...
service my_service on new http:Listener(8080) {
@my_annonatation {
value: "my-value-for-resource-1"
}
resource function my_resource_1() {}
@my_annonatation {
value: "my-value-for-resource-2"
}
resource function my_resource_2() {}
}
В соответствии с приведенным выше фрагментом кода service
мне нужно получить имена resource
как ["my_resource_1", "my_resource_2"]
и значение @annotation
как my-value-for-resource-1
, my-value-for-resource-2
для my_resource_1
и my_resource_2
соответственно.
Мои вопросы:
- Как я могу получить
resource
s, определенные в данномservice
с балериной - Я попытался с
function getServiceAnnotations(service serviceType, string annotName, string? moduleName = ()) returns any
модуляballerina/reflect
получить значение@annotation
. Но он ничего не дает взамен (очевидно, он возвращает пустую строку или может быть нулевым).
Я не вижу ни одной хорошей статьи по обработке аннотаций балерины, за исключением старых предварительных выпусков балерины 0.x 1. Я обнаружил, что модуль ballerina/reflect
теперь обновлен 2 3 с предварительных выпусков 0.x как я сравнивал с исходным кодом балерины (но это не упоминается в примечаниях к выпуску балерины 4 ).
А также в статье «Расширение балерины» 5 упоминается альтернативный способ обработка аннотаций через расширения компилятора, которые делегируют операцию Java. Однако у нас есть ограничение на передачу зависимостей Java в файл ballerina central
.
Пожалуйста, предложите мне обходной путь, чтобы получить ожидаемый результат, и я высоко ценю код на чистом языке балерины.
Ссылки
ballerina/reflect
теперь обновлен. Тестирую на jballerina-1.0.5. - person Channa Jayamuni   schedule 15.12.2019