メールを受信するように構成されたSpringIntegrationinbound-channel-adapterを実行しているGrailsWebアプリがあり、メッセージを処理するサービスアクティベーターがあります。このサービスアクティベーターは、ビジネスルールに基づいて電子メールの一部を引き出し、Grailsドメインオブジェクトを更新して、それらの変更をデータベースに保存する必要があります。
Spring Integrationサービスアクティベーターコードスニペット:
HashMap<String, Serializable> params = new HashMap<String, Serializable>();
params.put("notification", notification );
params.put("notificationType", notificationType );
params.put("sender", notificationSender );
InvokerHelper.invokeMethod(NotificationCreationService.class, "createNotification", params);
Grails NotificationCreationServiceアクションスニペット:
def static createNotification() {
if (params.notification != null && params.notificationType != null && params.sender != null) {
String notification = params.get("notification") as String
NotificationType notificationType = params.get("notificationType") as NotificationType
String sender = params.get("sender") as String
def NotificationMessage notificationMessage = null
notificationMessage = new NotificationMessage()
notificationMessage.notification = notification
notificationMessage.save(flush: true)
...
}
}
NotificationMessage
標準のGrailsドメインクラスです
生成されたエラー:
org.springframework.integration.MessageHandlingException:
groovy.lang.MissingMethodException: No signature of method: mycompany.pyproject.mypackage.NotificationMessage.save() is applicable for argument types: () values: []
Possible solutions: save(), save(boolean), save(java.util.Map), wait(), any(), wait(long)
createNotification()
そうでないように変更するstatic
と、次のようになります。
org.springframework.integration.MessageHandlingException:
groovy.lang.MissingMethodException: No signature of method: static mycompany.pyproject.mypackage.NotificationCreationService.createNotification() is applicable for argument types: (java.util.HashMap) values: [...]
Possible solutions: createNotification(java.util.HashMap), createNotification(java.lang.String, napa.changedetection.alert.NotificationType, java.lang.String)
InvokeHelper.invokeMethod()
Grailsアクションの他の組み合わせと定義を試しましたが、同様の結果が得られました。InvokeHelper
メソッドを呼び出したり、さまざまなプロパティを設定したりするための他のいくつかのメソッドがありますが、これを機能させる魔法の組み合わせは見つかりませんでした。検索されたインターネットは、InvokeHelperのサンプルコードまでほとんど見つかりませんでした。
理想的には、Grailsアクションは静的ではなく、標準のparams
メカニズムを使用します。これにより、Grailsコードから直接、および機能を介してSpringIntegrationサービスアクティベーターから同じアクションを呼び出すことができますInvokeMethod
。
これをどのように結びつけるかについて誰かが考えたことはありますか?