クライアント側から、Webサービスにアクセスしたい場合は、を使用してそのプロキシを生成するだけwsimport
です。これが私のWebサービスのリファレンスです。
では、アノテーション@WebServiceRefはどこで機能しますか?同じ環境でホストされているWebサービスへの挿入された参照を取得するために、サーバー側でのみ使用されることを意図していますか?
クライアント側から、Webサービスにアクセスしたい場合は、を使用してそのプロキシを生成するだけwsimport
です。これが私のWebサービスのリファレンスです。
では、アノテーション@WebServiceRefはどこで機能しますか?同じ環境でホストされているWebサービスへの挿入された参照を取得するために、サーバー側でのみ使用されることを意図していますか?
必ずしもそうとは限りませんが、実際にはサーバーの実装に依存するものです。たとえば、リモートサービスにアクセスするには、生成されたクライアントにアクセスでき、オプションでWSDLドキュメントとスキームファイルにアクセスできる必要があります(慣例によりWEB-INF/wsdl
)。
public class HelloServlet extends HttpServlet {
@WebServiceRef(HelloMessengerService.class) // class with @WebServiceClient
private HelloMessenger port; // the SEI
...
}
クラスはHelloMessengerService
スタブであり、属性(ローカルまたはリモートのWSDLドキュメントを指す)を@WebServiceClient
持つアノテーションがあり
ます。wsdlLocation
しかし、あなたはそのようなものを持つことができます
@WebServiceRef(wsdlLocation = "META-INF/wsdl/AnyService/Any.wsdl")
private HelloMessengerService service;
また
@WebServiceRef
public HelloMessengerService service;
ハンドラチェーンを使用して着信および発信SOAPメッセージを変更する場合:
@WebServiceRef(HelloMessengerService.class)
@HandlerChain(file="handler-chain.xml")
private HelloMessenger port;
アノテーションの使用は@WebServiceRef
、サーブレット、EJB、または別のWebサービスなどのJAX-WS管理対象クライアントに適用する必要があります。
Paul Vargasの答えに追加するだけで、@WebServiceRef
アノテーションは、JavaEEプラットフォームの完全に管理された環境への進化を完了するためのツールです。このように考えてください:
Java EEスタック内のほぼすべてのコンポーネントは、EJB、JSFマネージドBean、CDI Bean@Resources
などの何らかの手段で注入可能です。なぜ、Webサービス参照を注入できないのでしょうか。このアノテーションを使用してWebサービス参照を注入する機能を備えた、すぐに使用できる注入ターゲットは次のとおりです。