web-dev-qa-db-ja.com

@WebServiceRefを使用する必要があるのはいつですか?

クライアント側から、Webサービスにアクセスしたい場合は、wsimportを使用してそのプロキシを生成するだけです。それが私のWebサービスリファレンスです。

では、アノテーション @ WebServiceRef はどこで機能しますか?同じ環境でホストされているWebサービスへの挿入された参照を取得するために、サーバー側でのみ使用することを意図していますか?

18
Jops

必ずしもそうとは限りませんが、実際にはサーバーの実装に依存するものです。例えばリモートサービスにアクセスするには、生成されたクライアントにアクセスでき、オプションで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管理クライアントに適用する必要があります。

20
Paul Vargas

Paul Vargasの答えに追加するだけで、@WebServiceRefアノテーションは、Java EEプラットフォームから完全に管理された環境への進化を完了するためのツールです。次のように考えてください。

Java EEスタック内のほぼすべてのコンポーネントは、EJB、JSFマネージドBean、CDI Bean、@Resourcesなどの何らかの手段で注入可能です。なぜWebサービス参照を注入できないのですか?このアノテーションを使用してWebサービス参照を挿入する機能、以下はすぐに挿入できるターゲットです。

  • EJB
  • サーブレット(サーブレット3.0の下)
  • JSFマネージドBean
  • CDI Beans
  • MDB
5
kolossus