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サービス・プロキシ」を選択します。
JDeveloperのWebサービスから生成。 ナビゲータで、Webサービス・コンテナのポップアップ・メニューから「Webサービス・プロキシの生成」を選択します。 あるいは、Webサービス・プロキシの作成ウィザードを起動して、サービスのWSDLを選択または参照します。
ファイル・システムのWSDLから生成。 Webサービス・プロキシの作成ウィザードで、サービスのWSDLを選択または参照します。
Webサービス・プロキシの作成ウィザードでWSDLのURLに貼付け(たとえば、Enterprise Managerを使用して実行中のWebサービスを参照してWSDLを検出した場合)。
XMethodsなどのパブリック・レジストリから生成。 パブリック・レジストリでWebサービスを検出した場合は、そのサービス用のWSDLのURLをコピーします。 ウィザードのステップ1で、「WSDLドキュメントURL」にURLを貼り付けます。
パブリックまたはプライベートUDDIレジストリから生成。 ウィザードのステップ1で、「UDDI」を選択して、Webサービスの検索ウィザードを起動します。
図5-14に、CreditService
Webサービスのプロキシを生成した後のアプリケーション・ナビゲータおよび構造ウィンドウを示します。
注意: SOA Order Bookingアプリケーションでは、CreditService Webサービスに対するプロキシは使用していません。 |
ナビゲータで、Webサービス・プロキシ・コンテナを選択すると、プロキシを構成するファイルが構造ウィンドウにリストされます。図5-15を参照してください。 <serice_name>
Client.java
ファイルが、サービスのコールをテストするためのメイン・メソッドとともに生成されます。
JDeveloperで作成可能なWebサービス・プロキシのその他のタイプは、次のとおりです。
サンプルJavaクライアント。 このクライアントは、アプリケーション・ナビゲータでWebサービス・コンテナのポップアップ・メニューから、またはシステム・ナビゲータのWSDLから生成できます。 サンプルJavaクライアントは、埋込みOC4Jサーバーで実行されているWebサービス、またはOC4Jサーバーのリモート・インスタンスに対して実行するように設計されています。このクライアントには、独自のコードを追加するためのセクションが含まれています。
ADFデータ・コントロール。 Oracle ADFを使用して設計されたアプリケーションでWebサービスを使用できます。 Webサービス用のデータ・コントロールを作成すると、JDeveloperのバックグラウンドでは、他のADFフレームワークと連携するように構成されたサービスのスタブが作成されます。 Webサービス用のデータ・コントロールは、WebサービスまたはWSDLをナビゲータからデータ・コントロール・パレットにドラッグすることで作成できます。 あるいは、Webサービス・コンテナまたはWSDLのポップアップ・メニューを使用できます。 新規ギャラリからデータ・コントロールを作成することもできます。 「Business Tier」を開いて「Web Services」を選択し、「項目」リストで「Webサービス・データ・コントロール」を選択します。
データを収集するページを作成するには、最初に、Webサービスに基づいてプロキシを生成する必要があります。
注意: サービス・プロキシを作成するためには、ローカル・アクセス権があるか、またはWSDLのURLを認識している必要があります。 |
ヒント: WSDLをホスティングしているアプリケーション・サーバーのURLを認識している場合は、WSILサービス・ブラウザを使用してWSDLのURLを検索できます。 このブラウザのURLは、http://<host_name>:<port>//inspection.wsil です。 |
Webサービス・プロキシを作成する手順は、次のとおりです。
JDeveloperのアプリケーション・ナビゲータで、プロジェクトを右クリックし、「新規」を選択します。
新規ギャラリが表示されます。
「カテゴリ」ペインから「Business Tier」ノードを開き、「Web Services」を選択します。
ヒント: このノードの下に「Web Services」が見つからない場合は、「フィルタ方法」ドロップダウン・メニューを使用して「すべてのテクノロジ」を選択します。 |
「項目」ペインから「Webサービス・プロキシ」を選択します。
Webサービス・プロキシの作成ウィザードが起動します。
ウィザードの指示に従ってプロキシを作成します。 詳細は、[F1]または「ヘルプ」を押してください。
ヒント: Webサービス用のデータ・コントロールを作成する場合は、ウィザードの最初のステップで「WSDLをプロジェクトにコピー」オプションを選択する必要があります。 このWSDLを使用してデータ・コントロールを作成します。 |
ウィザードを完了した後は、WSDLを使用してデータ・コントロールを作成できます。 次に、このデータ・コントロールを使用して、情報を収集できるJSFページを宣言的に作成できます。 詳細は、第5.3.3項「Webサービスからのデータ・コントロールの作成方法」を参照してください。
データ・コントロールの作成では、複合データ型が考慮されないことに注意してください。 たとえば、顧客を作成する際にアドレスも作成する場合があります。 この状況では、データを手動で収集し、バッキングBeanを使用してサービスを起動する必要があります。 詳細は、第9.6.3項「バッキングBeanを使用したサービスの起動方法」を参照してください。
Webサービス・プロキシの作成ウィザードを使用してWebサービスのプロキシを作成すると、このプロキシはデフォルトでプロジェクトの「アプリケーション・ソース」内の「view.proxy
」パッケージに配置されます。 Webサービスに基づいてソース・ファイルも生成されます。 これらのファイルのリストは、アプリケーション・ナビゲータでプロキシをクリックすると、構造ウィンドウに表示できます。
たとえば、図5-16には、CustomerService WSDLに基づいてプロキシを作成した際に作成されたソース・ファイルのリストが表示されています。
構造ウィンドウで任意のクラスをダブルクリックすると、生成されたコードを表示できます。
デフォルトでは、<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ファイルは、そのサービスの名前が付いたディレクトリに配置されます。
Webサービス用のデータ・コントロールを作成するためには、最初に、WSDLファイルをプロジェクト・ディレクトリに配置する必要があります。
WSDLファイルからデータ・コントロールを作成する手順は、次のとおりです。
アプリケーション・ナビゲータで、WSDLファイルを右クリックします(WSDLファイルは、Webサービス・プロキシの作成ウィザードでコピーするように選択した場合は、そのサービスの名前が付いたディレクトリに配置されています)。
ポップアップ・メニューから、「データ・コントロールの作成」を選択します。
データ・コントロールが作成され、データ・コントロール・パレットに表示されます。 図5-17に、CustomerSvc
WSDLファイルから作成されたデータ・コントロールを示します。
WebサービスWSDLファイルからデータ・コントロールを作成すると、Webページの宣言的な作成をサポートするために必要なすべてのメタデータ・ファイル(DCXファイルなど)が作成されます。 図5-18に、CustomerServiceデータ・コントロール用に作成されたパッケージおよびXMLファイルを示します。
データ・コントロールの作成時に生成される様々なファイルの詳細は、第4.7.2項「データ・コントロール・ファイルの理解」を参照してください。 データ・コントロール・パレットでのデータ・コントロールの表示方法については、第4.7.3項「データ・コントロール・パレットの理解」を参照してください。