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項「データ・コントロール・パレットの理解」を参照してください。