私は SAP NetWeaver 7.3 EHP 1 (JEE5 認定済み) を使用しており、既存の WSDL の Web サービス スケルトンを生成しました。この Web サービスのすべてのメソッドは非ブロッキングであるため、 の注釈が付けられ@Oneway
ます。サービス自体は問題なく動作します。
注入されたものにもアクセスする必要がありますWebServiceContext
が、ここから問題が始まります。コンテキストを問題なく挿入できますが、それに対するすべての呼び出しは、サーバー固有の NPE または ISE で終了します。非ブロッキング呼び出しは SAP の JAX-WS 実装によって非同期に実行されるため、そのことはある程度理解できます。ただし、JAX-WS 仕様を調べて、この動作を検証しようとしました。今、私は目が見えないかWebServiceContext
、非ブロッキング Web メソッドで a を使用してはならないことを仕様が具体的に述べていないかのどちらかです。実際、仕様の最新バージョンの 5.3 章全体で、@Oneway
一度も言及されていません。主な説明は
javax.xml.ws.WebServiceContext インターフェースにより、エンドポイント実装オブジェクト、および場合によってはその実行コンテキストを共有する他のすべてのオブジェクトが、処理されている要求に関する情報にアクセスできるようになります。コンポーネントの WebServiceContext で、その Web サービス メソッドのいずれかの呼び出しの外部でメソッドを呼び出した結果は未定義です。そのような使用法を検出した場合、実装は java.lang-.IllegalStateException をスローする必要があります。
ポイントは「リクエストが処理される」の定義だと思います。SOAP操作の非同期処理時には、HTTPリクエストはすでに終了しています。しかし、繰り返しになりますが、「Webサービスメソッドの呼び出しの外部」でコンテキストにアクセスしていません。よくわかりません...
WebServiceContext
非ブロッキング Web メソッドでのアクセスを許可する必要があるかどうかを知っている人はいますか? ありがとう!