1

追加するヘッダー値を取得してヘッダーに追加し、データベースに記録するカスタムヘッダーエンリッチャーが必要です。db-recording-header-enricher などのカスタム スプリング タグを作成して、ヘッダーをデータベースに記録することに関心がある場合は、header-enricher タグの代わりにそれを使用しようとしていました。

そして、これが私がこれまでに持っているものです:

カスタム要素 db-recorder-header-enricher が正しく構成されたカスタム Spring XML 名前空間があります。パーサーが正しく機能しているかどうかをテストするために使用しているテスト春統合 xml があります。デフォルトでトランスフォーマーとして取得される HeaderEnricher の代わりに、以下のカスタム パーサーを使用することを除いて、テストはテスト XML を正しくロードしています。

db-recording-header-enricher のプロセッサは次のようになります。

DbRecorderHeaderEnricherParser implements BeanDefinitionParser {
   @Override
   public BeanDefinition parse(Element element, ParserContext parserContext) {
       BeanDefinition beanDefinition = new StandardHeaderEnricherParser().parse(element, parserContext);
       // Set the header Enricher processor to be my custom processor
       // beanDefinition.setHeaderEnricherProcessor(dbRecordingHeaderEnricher);
       return beanDefinition;
    }
}

私が直面している問題はこれです:

上記のパーサー定義に基づいて、StandardHeaderEnricherParser を使用して xml を解析すると、DbRecordingHeaderEnricher をヘッダー エンリッチャーの解析用のトランスフォーマーとして関連付ける方法が見つかりません。StandardHeaderEnricherParser を拡張したとしても、以下のメソッドは最終的なものであるため、変換目的でカスタム パーサーを指定することはできないようです。

@Override
protected final String getTransformerClassName() {
    return HeaderEnricher.class.getName();
}

カスタム パーサーでやりたいことは、ヘッダーの解析と、追加されたヘッダーのデータベースへのレコードの作成のために、カスタム ヘッダー エンリッチャー (HeaderEnricher クラスを拡張する) を関連付けることだけです。私が考えている方法でそれが不可能な場合、他にどのような選択肢がありますか? 変圧器で AOP/アドバイスを使用できますか?

4

1 に答える 1

1

これはかなり高度です。スキーマ、パーサーを名前空間要素に関連付ける名前空間ハンドラー、およびパーサー自体が必要になります。

<transformer/>を使用して、ヘッダーを追加する (およびそれらを格納する) Bean を参照する方が簡単な場合があります。

独自の名前空間を作成する方法を学びたい場合。開始するのに適した場所は、すべてのボイラー プレートを作成するSTS プロジェクト テンプレートです。

編集:

あなたの更新に応じて...

これはまだ Bean 定義であり、まだ Bean ではないため、単純にbeanClassNameプロパティを変更できます...

BeanDefinition beanDefinition = new StandardHeaderEnricherParser().parse(element, parserContext);
beanDefinition.setBeanClassName(Foo.class.getName());
于 2013-08-05T23:51:14.487 に答える