Ошибка развертывания Esper: неверный тип возврата для статического метода, ожидающий Java-класс - PullRequest
0 голосов
/ 04 июля 2018

Мое приложение настраивает и развертывает механизм esper, который анализирует модуль epl, хранящийся в базе данных MySQL, в виде строки. Все работает, кроме случаев, когда я пытаюсь вызвать статический метод из модуля epl. Я получаю следующую ошибку при развертывании механизма: DeploymentActionException: Развертывание не удалось в модуле «MyModule» в выражении «select ...»: Ошибка запуска оператора: Неверный тип возврата для статического метода «myMethod» класса «MyClass», ожидая Java Класс.

Вот метод:

public static String myMethod() {
    String symbol = "GOOG";
    logger.info("Hello From EPL");
    return symbol;
}

Вот конфигурация двигателя и развертывание модуля:

Configuration configuration = new Configuration();
        configuration.addEventType("MyEvent", MyEvent.class);
        configuration.addImport(com.tp.main.MyClass.class);
        epService = EPServiceProviderManager.getProvider("Service", configuration);
        EPDeploymentAdmin deploymentAdmin = epService.getEPAdministrator().getDeploymentAdmin();
        Module module = deploymentAdmin.parse(epl);
        String moduleId = deploymentAdmin.add(module);
        deploymentAdmin.deploy(moduleId, null);

Вот модуль epl:

module MyModule; select propertyA, propertyB from MyEvent as propertyA unidirectional, method:MyClass.myMethod as propertyB

В MyEvent есть метод get для propertyA, который возвращает String.

Я прочитал и перечитал документацию вперед и назад. Похоже, все должно работать. Я нашел примеры онлайн, которые далее предполагают, что все хорошо. Но я не могу обойти эту ошибку.

Я пытался перенести импорт в модуль epl. Я пытался перейти от событий POJO к событиям Map и обратно. Я попытался создать схему в модуле epl и использовать API времени выполнения для настройки типов событий и обратно.

Если я уберу этот вызов метода, все будет работать так же, как другие операторы (не показаны) в модуле epl.

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 июля 2018

«string» не является POJO, это по сути примитивный тип. В предложении from он должен возвращать тип события или POJO, а примитивный тип не является возможным значением, поскольку он не имеет никаких свойств.

public class Result {
  String result;
}

public static Result myMethod() {
  String symbol = "GOOG";
  logger.info("Hello From EPL");
  return symbol;
}
...