0

私は、grails フレームワークの支払いプラグインに取り組んでいます。SOAP API (WSDL) を提供する支払いプロバイダーを使用しており、Web サービスと通信するには cxf-client が必要です。

Grails プラグイン プロジェクト (2.2) にhttps://github.com/ctoestreich/cxf-client (cxf-client プラグイン)をインストールし、grails サービスで config.groovy に追加した cxf-client を使用したいと考えています。

追加したばかりのサービスクラスで

RecurringPortType recurringPaymentClient

プラグイン プロジェクトを直接開始するのではなく、プラグイン サービスのいくつかのメソッドを使用する mainproject に含めました (これも mainproject に自動配線されています)。

autowired プラグイン サービス (これは動作します) を使用した後、プラグイン サービス クラスで autowired cxf-client を使用するメソッドを使用して nullpointer 例外が発生します。cxf-client Bean reuccringPaymentClient が null です。

しかし、なぜ?メインプロジェクトの config.groovy にも cxf-client 構成を含める必要がありますか? または、メインプロジェクトが新しいプラグインの config.groovy をマージまたは使用できるソリューションはありますか? 現時点では、cxf-configuration はプラグインの config.groovy に配置されています。これが問題なのでしょうか?

使用する

RecurringPortType recurringPaymentClient = ApplicationHolder.application.mainContext.getBean("recurringPaymentClient")

cxf-client のドキュメントで説明されているように、役に立ちませんでした。

4

1 に答える 1

1

プラグイン内のConfig.groovyファイルは、プラグインがスタンドアロンアプリケーション自体として実行されている場合にのみ適用されます。プラグインが別のアプリケーションで使用されている場合は読み取られません。いくつかのプラグインが使用するのを見た(そして私が自分のプラグインの1つのために盗んだ)トリックは、プラグイン記述子の構成を操作するdoWithSpringことです。これは通常、必要な効果を得るのに十分早いです。あなたの場合loadBeforecxf-clientプラグインをプラグインにして、doWithSpring(設定の作成)がcxf-client(設定が使用される場所である)プラグインの前に行われるようにする必要があります。

class MyCleverGrailsPlugin {
  def version = "0.1-SNAPSHOT"

  def loadBefore = ['cxfClient']

  def doWithSpring = {
    application.config.cxf.client.recurringPaymentClient.clientInterface = com.example.MyClientPortType
    // etc. etc.
  }
}

またはConfigSlurper手で使用することができます

def doWithSpring = {
  ConfigObject pluginConf = new ConfigSlurper(Environment.current.name).parse(com.example.MyPluginDefaultConfig)
  application.config.cxf = pluginConf.cxf.merge(application.config.cxf)
}

Config.groovyこれにより、プラグインからスタイルスクリプトが読み込まれ、その構成のセクションがメインアプリケーションの構成のセクションにsrc/groovy/com/example/MyPluginDefaultConfig.groovyマージされ、アプリの設定がプラグインによって提供されるデフォルトを上書きします。cxfcxf

于 2013-03-12T11:41:58.653 に答える