1

spring-ws 2 で、jsr303 を使用した検証のためにマーシャリングされていないペイロードを取得することは可能ですか。アイデアは、すべてのエンドポイントで検証コードを明示的に作成せずに、作成するすべてのエンドポイントに対してこれを実行することです。(たとえば、インターセプターまたはある種のリスナーを使用)

EndpointInterceptor を拡張しようとしましたが、ここにはマーシャリングされていないオブジェクトはありません。jaxb unmarshaller の Unmarshaller.Listener も実装してみました。スプリング コンテキストを介してこれを登録しましたが、ここには 2 つの問題があります。2. Jaxb Unmarshaller はリクエストごとに作成され、リスナーはその特定のリクエストの unmarshaller の作成中に設定されません。すべてのリクエストにこれを注入する方法がわかりません。

これを達成する他の方法はありますか?

前もって感謝します。

4

2 に答える 2

1

Spring WS エンドポイントは通常の Spring Bean であるため、Spring の AOP 機能を利用して、渡されたオブジェクトを検証するためのアスペクトを作成できます。

Spring 3.1 と Hibernate Validator 4.2 を Bean Validation プロバイダーとして使用している場合は、Hibernate Validator のメソッド検証機能も使用できます。Spring は、@Validatedでアノテーションが付けられたすべての Bean に対してメソッド検証を実行するインターセプターを提供します。

于 2012-11-20T20:08:34.747 に答える
0

AOP を使用したくない場合は、次の方法があります。

  1. DefaultMethodEndpointAdapter を拡張し、Ordered をサブクラスに実装する必要があります (例:

    DefaultMethodEndpointAdapterWithJSRValidation extends DefaultMethodEndpointAdapter implement Ordered {...)

サブクラスで次のことをオーバーライドしていることを確認してください。

1.1 このメソッドでは、jsr 検証を追加します。

@Override
public Object[] getMethodArguments ...

1.2 このメソッドは、Bean がデフォルト Bean の代わりに使用されることを確認します。

@Override
public int getOrder() {
  return Integer.MIN_VALUE;
}
  1. 次のように、Spring コンテキストで Bean を登録できます。

<bean id="defaultMethodEndpointAdapter" class="your.package.DefaultMethodEndpointAdapterWithJSRValidation" primary="true"/>"

楽しむ。

于 2013-08-28T13:24:34.977 に答える