31.3. プレーン Java アプリケーションでのサービスの公開


概要

アプリケーションをプレーンな java アプリケーションとしてデプロイする場合は、アプリケーションの main() メソッドでエンドポイントを公開するロジックを実装する必要があります。Apache CXF は、アプリケーションの main() メソッドを記述する 2 つのオプションを提供します。

  • wsdl2java ツールによって生成された main() メソッドを使用
  • エンドポイントを公開するカスタム main() メソッドを作成します。

サーバーメインラインの生成

コードジェネレーター -server フラグは、ツールがシンプルなサーバーのメインラインを生成するようにします。例31.2「生成されたサーバーメインライン」に示すように、生成されたサーバーメインラインは、指定された WSDL コントラクトの port 要素ごとに 1 つのサービスプロバイダーを公開します。

詳細は、「cxf-codegen-plugin」 を参照してください。

例31.2「生成されたサーバーメインライン」 生成されたサーバーのメインラインを示しています。

例31.2 生成されたサーバーメインライン

package org.apache.hello_world_soap_http;

import javax.xml.ws.Endpoint;

public class GreeterServer {

    protected GreeterServer() throws Exception {
        System.out.println("Starting Server");
        Object implementor = new GreeterImpl();
        String address = "http://localhost:9000/SoapContext/SoapPort";
        Endpoint.publish(address, implementor);
    }

    public static void main(String args[]) throws Exception {
        new GreeterServer();
        System.out.println("Server ready...");

        Thread.sleep(5 * 60 * 1000);
        System.out.println("Server exiting");
        System.exit(0);
    }
}

例31.2「生成されたサーバーメインライン」 のコードは、以下を行います。

サービスの実装オブジェクトのコピーをインスタンス化します。

エンドポイントのコントラクト内の wsdl:port 要素の address の子の内容に基づいて、エンドポイントのアドレスを作成する。

エンドポイントを公開します。

サーバーメインラインの作成

Java の最初の開発モデルを使用した場合、または生成されたサーバーのメインラインを使用したくない場合は、独自に作成できます。サーバーのメインラインを作成するには、次のことを行う必要があります。

  1. 「サービスプロバイダーのインスタンス化」 サービスプロバイダーの javax.xml.ws.Endpoint オブジェクト。
  2. サービスプロバイダーを公開するときに使用する任意のサーバーコンテキストを作成します。
  3. 「サービスプロバイダーの公開」 publish() メソッドのいずれかを使用するサービスプロバイダー。
  4. アプリケーションを終了する準備ができたら、サービスプロバイダーを停止します。

例31.3「カスタムサーバーメインライン」 は、サービスプロバイダーを公開するためのコードを示しています。

例31.3 カスタムサーバーメインライン

package org.apache.hello_world_soap_http;

import javax.xml.ws.Endpoint;

public class GreeterServer
{
  protected GreeterServer() throws Exception
  {
  }

  public static void main(String args[]) throws Exception
  {
    GreeterImpl impl = new GreeterImpl();
    Endpoint endpt.create(impl);
    endpt.publish("http://localhost:9000/SoapContext/SoapPort");

    boolean done = false;
   while(!done)
    {
      ...
    }

   endpt.stop();
    System.exit(0);
  }
}

例31.3「カスタムサーバーメインライン」 のコードは、以下を行います。

サービスの実装オブジェクトのコピーをインスタンス化します。

サービス実装の未公開の Endpoint を作成する。

サービスプロバイダーを http://localhost:9000/SoapContext/SoapPort に公開します。

サーバーをシャットダウンするまでループします。

公開されたエンドポイントを停止します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.