18

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

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

4

2 に答える 2

20

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

于 2013-03-27T17:41:15.107 に答える
5

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

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

  • EJB
  • サーブレット(サーブレット3.0の場合)
  • JSFマネージドBean
  • CDI Beans
  • MDB
于 2013-03-28T03:10:07.497 に答える