クライアント側から、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
クラスはスタブであり、wsdlLocation
属性(ローカルまたはリモートのWSDLドキュメントを指す)を持つ@WebServiceClient
アノテーションがあります。
しかし、あなたはそのようなものを持つことができます
@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
アノテーションは、Java EEプラットフォームから完全に管理された環境への進化を完了するためのツールです。次のように考えてください。
Java EEスタック内のほぼすべてのコンポーネントは、EJB、JSFマネージドBean、CDI Bean、@Resources
などの何らかの手段で注入可能です。なぜWebサービス参照を注入できないのですか?このアノテーションを使用してWebサービス参照を挿入する機能、以下はすぐに挿入できるターゲットです。