2

現在、アプリケーションの各 Web サービスには、メソッドごとに追加されるユーザー パラメータがあります。例えば:

@WebService
public interface FooWebService {
   @WebMethod
   public Foo getFoo(@WebParam(name="alwaysHere",header=true,partName="alwaysHere") String user, @WebParam(name="fooId") Long fooId);

 @WebMethod
   public Result deletetFoo(@WebParam(name="alwaysHere",header=true,partName="alwaysHere") String user, @WebParam(name="fooId") Long fooId);

   // ...
}

サービスには 20 のメソッドがあり、それぞれの最初のパラメーターは user です。そして、20 の Web サービスが存在する可能性があります。

実装で「ユーザー」引数を実際に使用することはありません-実際、なぜそこにあるのかわかりません-しかし、私は設計に関与していませんでした。 )。

とにかく、私はこの泥の大きなボールをまっすぐにしようとしています.

Web サービスを Spring プロキシでラップすることで、すでに長い道のりを歩んできました。これにより、インターセプターで前後の処理を行うことができます (メソッドごとに少なくとも 20 行のコピー アンド ペーストされたボイラー プレートが存在する前に)。

メソッドまたはパッケージに適用できるある種の「メッセージヘッダー」があり、特定のタイプのハンドラーまたは各 Web サービスメソッドの外部の何かからアクセスできるかどうか疑問に思っています。

レスさん、アドバイスありがとうございます

4

3 に答える 3

0

誰または何がメッセージがSOAP ヘッダーuserにバインドされることを期待していますか? Web サービスは保護されていますか? それはある種の認証ヘッダーですか?本来の目的だったのかもしれません。実際、誰かがこれらの質問に対する答えを持っているはずです。誰を見つけます。そして、あなたがそれを必要としないことがわかったら、それを渡すのをやめてください. ただし、必要な場合は、(特にクライアント側で) WSDL の変更が問題にならない場合を除き、(今は使用していなくても) 追加することをお勧めします。

@WebParam(header=true)PS: 入力にを持つ操作で WSDL を生成するために、Java メソッドに でパラメータを追加しないようにする方法がわかりません<soap:header>。私の知る限り、これは Java から開始するときに JAX-WS がどのように機能するかです。

于 2009-10-15T01:06:48.413 に答える
0

その変数をパラメーターとして持つ必要がある理由がない場合は、各サービスにスーパー クラスを拡張させることができます。そのスーパークラスでは、 @Context アノテーションまたは @Resource アノテーションのいずれかを使用して、MessageContext、ServletContext、ServletRequest、HttpHeaders、または適切なもの (おそらく JAXWS の MessageContext) をスプリング注入します。

次に、そのスーパー クラスにいくつかのメソッドを指定して、リクエストからユーザー情報を取得します。

于 2009-10-15T03:37:54.853 に答える
0

認証を達成しようとしている場合は、プロトコルや論理ハンドラなどの事前定義されたハンドラからコンテキストを操作できます。たとえば、SoapHanlder(プロトコル ハンドラー) インターフェイスを実装し、そこから、提供する各サービスのハンドラー チェーンにそのクラスを追加します。非常にシンプルで強力です。この紳士は、このトピックに関する最高のチュートリアルを持っています.

于 2014-06-17T07:26:37.647 に答える