ヘッダーをスキップ
Oracle SOA Suite開発者ガイド
10g(10.1.3.1.0)
B31839-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

5.3 JDeveloperでのWebサービスの使用

JDeveloperを使用すると、アプリケーションでWebサービスを簡単に使用できます。 Webサービス・プロキシの作成ウィザードを使用してサービスのプロキシを作成し、アプリケーションでクライアント・クラスのメソッドをコールします。 このウィザードは、Webサービスの場所を指定またはWebサービスを作成した後で起動できます。 あるいは、ウィザードを直接起動してWebサービスのURLを入力したり、Webサービスの検索ウィザードを使用して、接続ナビゲータのUDDI接続からUDDIレジストリ内のWebサービスを検索できます。 UDDI接続では、サービスの名前またはカテゴリを使用して、UDDIレジストリを検索できます。 名前で検索するときは、名前全体または名前の一部を入力でき、ワイルドカードも使用できます。

JDeveloperでは、他のWebサービス・アーキテクチャを使用して開発されたWebサービスとの相互運用が可能です。 Webサービス・プロキシの作成ウィザードによって、Webサービスのタイプが検出され、RPCエンコード、ドキュメント・エンコードまたはドキュメント・リテラルのいずれのタイプのサービスかに基づいて適切なスタブが自動的に生成されます。

JDeveloperでWebサービス・プロキシを生成する手順は簡単です。 Webサービス・プロキシの作成ウィザードを起動するには、新規ギャラリで、「Business Tier」を開いて「Web Services」を選択し、「項目」リストで「Webサービス・プロキシ」を選択します。

図5-14に、CreditService Webサービスのプロキシを生成した後のアプリケーション・ナビゲータおよび構造ウィンドウを示します。


注意:

SOA Order Bookingアプリケーションでは、CreditService Webサービスに対するプロキシは使用していません。

図5-14 アプリケーション・ナビゲータに表示された生成済のプロキシ

図5-14の説明は次にあります。
「図5-14 アプリケーション・ナビゲータに表示された生成済のプロキシ」の説明

ナビゲータで、Webサービス・プロキシ・コンテナを選択すると、プロキシを構成するファイルが構造ウィンドウにリストされます。図5-15を参照してください。 <serice_name>Client.javaファイルが、サービスのコールをテストするためのメイン・メソッドとともに生成されます。

図5-15 構造ウィンドウに表示されたプロキシを構成するファイル

図5-15の説明は次にあります。
「図5-15 構造ウィンドウに表示されたプロキシを構成するファイル」の説明

JDeveloperで作成可能なWebサービス・プロキシのその他のタイプは、次のとおりです。

5.3.1 Webサービス・プロキシの作成方法

データを収集するページを作成するには、最初に、Webサービスに基づいてプロキシを生成する必要があります。


注意:

サービス・プロキシを作成するためには、ローカル・アクセス権があるか、またはWSDLのURLを認識している必要があります。


ヒント:

WSDLをホスティングしているアプリケーション・サーバーのURLを認識している場合は、WSILサービス・ブラウザを使用してWSDLのURLを検索できます。 このブラウザのURLは、http://<host_name>:<port>//inspection.wsilです。

Webサービス・プロキシを作成する手順は、次のとおりです。

  1. JDeveloperのアプリケーション・ナビゲータで、プロジェクトを右クリックし、「新規」を選択します。

    新規ギャラリが表示されます。

  2. 「カテゴリ」ペインから「Business Tier」ノードを開き、「Web Services」を選択します。


    ヒント:

    このノードの下に「Web Services」が見つからない場合は、「フィルタ方法」ドロップダウン・メニューを使用して「すべてのテクノロジ」を選択します。

  3. 「項目」ペインから「Webサービス・プロキシ」を選択します。

    Webサービス・プロキシの作成ウィザードが起動します。

  4. ウィザードの指示に従ってプロキシを作成します。 詳細は、[F1]または「ヘルプ」を押してください。


    ヒント:

    Webサービス用のデータ・コントロールを作成する場合は、ウィザードの最初のステップで「WSDLをプロジェクトにコピー」オプションを選択する必要があります。 このWSDLを使用してデータ・コントロールを作成します。

ウィザードを完了した後は、WSDLを使用してデータ・コントロールを作成できます。 次に、このデータ・コントロールを使用して、情報を収集できるJSFページを宣言的に作成できます。 詳細は、第5.3.3項「Webサービスからのデータ・コントロールの作成方法」を参照してください。

データ・コントロールの作成では、複合データ型が考慮されないことに注意してください。 たとえば、顧客を作成する際にアドレスも作成する場合があります。 この状況では、データを手動で収集し、バッキングBeanを使用してサービスを起動する必要があります。 詳細は、第9.6.3項「バッキングBeanを使用したサービスの起動方法」を参照してください。

5.3.2 Webサービス・プロキシ作成時の処理内容

Webサービス・プロキシの作成ウィザードを使用してWebサービスのプロキシを作成すると、このプロキシはデフォルトでプロジェクトの「アプリケーション・ソース」内の「view.proxy」パッケージに配置されます。 Webサービスに基づいてソース・ファイルも生成されます。 これらのファイルのリストは、アプリケーション・ナビゲータでプロキシをクリックすると、構造ウィンドウに表示できます。

たとえば、図5-16には、CustomerService WSDLに基づいてプロキシを作成した際に作成されたソース・ファイルのリストが表示されています。

図5-16 構造ウィンドウに表示されたプロキシに対する生成済ソース・ファイル

図5-16の説明は次にあります。
「図5-16 構造ウィンドウに表示されたプロキシに対する生成済ソース・ファイル」の説明

構造ウィンドウで任意のクラスをダブルクリックすると、生成されたコードを表示できます。

デフォルトでは、<service-name>Client.javaファイルがソース・エディタで開かれます。 この生成されたファイルによって、Webサービスに対する各操作へのアクセスが提供されます。また、このファイルのメイン・メソッドを使用して、サービスへの接続をテストできます。 詳細は、第5.4項「JDeveloperでのWebサービスのデバッグ、テストおよび分析」を参照してください。 このクラスを使用して、Webサービスを直接起動することもできます。 詳細は、第9.6.3項「バッキングBeanを使用したサービスの起動方法」を参照してください。 例5-1に、CustomerServiceClient.javaファイルの生成されたコードを示します。

例5-1 CustomerServiceClient.javaコード

public class CustomerServiceClient {
    private project_test.proxy.CustomerService _port;

    public CustomerServiceClient() throws Exception {
        ServiceFactory factory = ServiceFactory.newInstance();
        _port = ((project_test.proxy.CustomerSvc)factory.loadService(project_
                test.proxy.CustomerSvc.class)).getCustomerService();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            project_test.proxy.CustomerServiceClient myPort = new project_
                  test.proxy.CustomerServiceClient();
            System.out.println("calling " + myPort.getEndpoint());
            // Add your own code here

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * delegate all operations to the underlying implementation class.
     */

    public String addNewCustomer(Customer customer) throws
                java.rmi.RemoteException {
        return _port.addNewCustomer(customer);
    }

    public Customer findCustomerByEmail(String email, String password) throws
              java.rmi.RemoteException {
        return _port.findCustomerByEmail(email, password);
    }

    public Customer findCustomerById(String custid) throws
                java.rmi.RemoteException {
        return _port.findCustomerById(custid);
    }

    public String getCustomerStatus(String customerID) throws
               java.rmi.RemoteException {
        return _port.getCustomerStatus(customerID);
    }


    /**
     * used to access the JAX-RPC level APIs
     * returns the interface of the port instance
     */
    public project_test.proxy.CustomerService getPort() {
        return _port;
    }

    public String getEndpoint() {
        return (String) ((Stub) _port)._getProperty(Stub.ENDPOINT_ADDRESS
                       _PROPERTY);
    }

    public void setEndpoint(String endpoint) {
        ((Stub) _port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, endpoint);
    }

    public String getPassword() {
        return (String) ((Stub) _port)._getProperty(Stub.PASSWORD_PROPERTY);
    }

    public void setPassword(String password) {
        ((Stub) _port)._setProperty(Stub.PASSWORD_PROPERTY, password);
    }

    public String getUsername() {
        return (String) ((Stub) _port)._getProperty(Stub.USERNAME_PROPERTY);
    }

    public void setUsername(String username) {
        ((Stub) _port)._setProperty(Stub.USERNAME_PROPERTY, username);
    }

    public void setMaintainSession(boolean maintainSession) {
        ((Stub) _port)._setProperty(Stub.SESSION_MAINTAIN_PROPERTY,
                  Boolean.valueOf(maintainSession));
    }

    public boolean getMaintainSession() {
        return ((Boolean) ((Stub) _port)._getProperty(Stub.SESSION_MAINTAIN_
                PROPERTY)).booleanValue();
    }

    /**
     * returns the transport context
     */
    public ClientTransport getClientTransport() {
        return ((OracleStub) _port).getClientTransport();
    }

}

WSDLをプロジェクトにコピーするように選択した場合、WSDLファイルは、そのサービスの名前が付いたディレクトリに配置されます。

5.3.3 Webサービスからのデータ・コントロールの作成方法

Webサービス用のデータ・コントロールを作成するためには、最初に、WSDLファイルをプロジェクト・ディレクトリに配置する必要があります。

WSDLファイルからデータ・コントロールを作成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、WSDLファイルを右クリックします(WSDLファイルは、Webサービス・プロキシの作成ウィザードでコピーするように選択した場合は、そのサービスの名前が付いたディレクトリに配置されています)。

  2. ポップアップ・メニューから、「データ・コントロールの作成」を選択します。

    データ・コントロールが作成され、データ・コントロール・パレットに表示されます。 図5-17に、CustomerSvc WSDLファイルから作成されたデータ・コントロールを示します。

    図5-17 CustomerSvc WSDLから作成されたデータ・コントロール

    図5-17の説明は次にあります。
    「図5-17 CustomerSvc WSDLから作成されたデータ・コントロール」の説明

5.3.4 Webサービス・データ・コントロールの作成時と使用時の処理内容

WebサービスWSDLファイルからデータ・コントロールを作成すると、Webページの宣言的な作成をサポートするために必要なすべてのメタデータ・ファイル(DCXファイルなど)が作成されます。 図5-18に、CustomerServiceデータ・コントロール用に作成されたパッケージおよびXMLファイルを示します。

図5-18 生成されたWebサービスのデータ・コントロール・ファイル

図5-18の説明は次にあります。
「図5-18 生成されたWebサービスのデータ・コントロール・ファイル」の説明

データ・コントロールの作成時に生成される様々なファイルの詳細は、第4.7.2項「データ・コントロール・ファイルの理解」を参照してください。 データ・コントロール・パレットでのデータ・コントロールの表示方法については、第4.7.3項「データ・コントロール・パレットの理解」を参照してください。