11

私は単純な SOAP Web サービスを作成しています。Tomcat Web サービスで実行されることを確認します。

これをJAX-WSで実装しようとしています(コードを参照)

私の質問は: Endpoint.publish は tomcat サーバーを使用してこれをホストしていますか、それともミニグラスフィッシュのようなサーバーですか?

代わりに UnicastRemoveObject または類似のものを拡張する必要がありますか?

理想的には、.WAR にパッケージ化してディレクトリにドロップするだけで機能することができます。

ポートが既に使用されていると表示されるため、インストールした tomcat サーバーではそのままでは動作しないようです。tomcat6 パッケージがインストールされた Ubuntu karmic を使用しています。ユーザーが 8080 で実行中の tomcat に公開する権限を持っていない可能性もあります。

この質問が十分に明確であることを願っています

サンプルコード:

@WebService
public class UserAttributes {
    public static void main(String[] args) {
        UserAttributes instance = new UserAttributes();
        Endpoint.publish("http://localhost:8082/WebServices/userattributes", 
            instance);
    }

    public string Hello() {
       return "Hello World";
    }
}
4

3 に答える 3

25

これをホストするためにTomcatサーバーを使用しますかEndpoint.publish、それともミニGlassfishのようなサーバーですか?

JAX-WS RI Endpoint.publishAPIは、デフォルトで、SunのJava SE 6に含まれている軽量のHTTPサーバー実装を使用します。したがって、組み込みのGlassFishも組み込みのTomcatも使用せず、既存のTomcatインストールも使用しません。組み込みのTomcatを使用します。コンテナ、つまり同じJVM内で実行されているもの。ただし、参考までに、サービスプロバイダー実装(SPI)を提供する限り、他の実装をプラグインすることは可能です。たとえば、Jetty6はそうします。J2se6HttpServerSPIを参照してください。しかし、ここですべての詳細をカバーするつもりはありません:)

ポートがすでに使用されていると表示されているため、インストールされているTomcatサーバーでは機能しないようです。

上で述べたように、Enpoint.publishAPIは既存のTomcatインストールを使用しません。独自のサーバーを使用し、アプリをパッケージ化してデプロイしなくてもWebサービスをデプロイできます。これは、開発中に特に役立ちます(処理が高速化されるため)。実際、それは非常に便利です。

これで、Tomcatサーバーがポート8082で実行されていEndpointて、同じポートを使用して公開しようとすると、気付いたように動作しなくなります。開発中は別の(そして未使用の)ポートを使用してください。

また、Webサービスを既存のTomcatインストールにデプロイする場合は、それらをwarにパッケージ化し、このwarをTomcatにデプロイする必要があります。Endpoint.publishしかし、これはまったく異なり、 APIの使用とは何の関係もありません。

于 2010-01-18T03:15:44.183 に答える
1

とても興味深い。組み込みサーバーには、そのポートに送信された SOAP メッセージを処理するための SOAP エンジンも含まれているようです。これも組み込みの SOAP エンジンですか、それとも一般的な SOAP エンジン (axis2、cxf、metro) のいずれかを使用していますか?

于 2010-10-12T19:12:01.553 に答える