1

@WebService アノテーションを使用すると、ステートレス EJB Bean を Web サービスとして公開できます。ただし、この目的のために子クラスを定義する方法を使用せずに、すべて同じ実装クラスを持つ複数の Web サービスを公開する方法はありますか?

つまり、空のクラス A1、A2、A3、A4 をすべて @WebService アノテーションを持ち、実際にロジックを実装する A の子孫であると定義すると実現可能です。次に、JAX-WS は、名前は異なるが実質的に同じ実装を持つちょうど 4 つの Web サービスを公開します。

しかし、私が望むのは、JAX-WSが同じ実装で複数の Web サービスを登録し、実装内で、この実装が呼び出される Web サービスの名前を取得できるようにすることです。

編集: 現在、JAX-WS エンドポイント クラス (ランタイム パブリッシャー) を使用して結果を達成しようとしています。

4

1 に答える 1

0

私はそのような解決策を使用しました:

@Startup
@Singleton
@LocalBean
public class WSPublisher
{
    @PostConstruct
    void publishAll()
    {
         Reflections reflections = new Reflections("abc.de.f");
         Set<Class<? extends MyBean>> myBeans = reflections.getSubTypesOf(MyBean.class);

         for(Class<? extends MyBean> myBean: myBeans)
             Endpoint.publish("http://localhost:9090/project/" + myBean.getSimpleName() + "WS", new MyBean());
    }
}

これで、すべての Web サービス フロントエンドが動的に登録され、それらのいずれかからのメソッド呼び出しが共通の実装クラスにリダイレクトされます。

于 2013-04-03T16:45:56.850 に答える