ナビゲーションをスキップ

WebLogic Web サービス プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

J2EE Web サービスの手動による作成

以下の節では、Implementing Enterprise Web Services 1.1 仕様 (JSR-921) に準拠している J2EE Web サービスを手動で作成する方法について説明します。

 


J2EE Web サービスの作成の概要

この節では、標準の J2EE Web サービスを手動で作成する方法について説明します。手動とは、jwsc Ant タスクなどの WebLogic Web サービス ツールを使用しないという意味です。標準の J2EE Web サービスは、Implementing Enterprise Web Services 1.1 仕様 (JSR-109 の 1.1 メンテナンス リリースである JSR-921) に準拠しています。

J2EE Web サービスは、ステートレス セッション EJB と Java クラスという 2 種類のバックエンド コンポーネントを使用して実装できます。バックエンド コンポーネントの種類によって、Web サービスは EJB JAR ファイルまたは Web アプリケーション WAR ファイルのいずれかでパッケージ化されます。JAR または WAR アーカイブには、標準のデプロイメント記述子 (EJB の場合は ejb-jar.xml、Web アプリケーションの場合は web.xml) が含まれています。いずれのデプロイメント記述子ファイルにも、コンポーネントが Web サービスであることを指定する要素が追加されています。また、アーカイブには、webservices.xml などの Web サービス固有のデプロイメント記述子と JAX-RPC データ型マッピング ファイルも格納されています。

 


EJB 実装の J2EE Web サービスの作成 : 主な手順

ステートレス セッション EJB で実装されている J2EE Web サービスを作成するには、次の手順に従います。

  1. Web サービス オペレーションとしてエクスポーズするビジネス メソッドを含む標準のステートレス セッション EJB を作成します。既存の EJB を使用することもできます。
  2. エンタープライズ JavaBean 仕様に記載されている標準ガイドラインを除き、Web サービスを実装するステートレス セッション EJB に対する要件または制限はありません。EJB の作成の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』を参照してください。

    Bean 実装クラスとそのホーム インタフェースおよびリモート インタフェースのサンプル Java コードについては、「ステートレス セッション EJB の簡単な例」を参照してください。

  3. 以下の標準の EJB デプロイメント記述子および WebLogic 固有の EJB デプロイメント記述子がまだない場合は、作成します。
  4. EJB デプロイメント記述子の記述および生成の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』を参照してください。

    前の手順で作成した EJB を記述するサンプル デプロイメント記述子ファイルについては、「サンプルの EJB デプロイメント記述子」を参照してください。

  5. EJB からサービス エンドポイント インタフェース (SEI) を作成します。
  6. EJB からのサービス エンドポイント インタフェースの作成」を参照してください。

  7. Web サービスの情報を追加して ejb-jar.xml デプロイメント記述子を更新します。
  8. 注意 : weblogic-ejb-jar.xml デプロイメント記述子ファイルを更新する必要はありません。

    ejb-jar.xml デプロイメント記述子の Web サービス情報による更新」を参照してください。

  9. Web サービスのパブリック コントラクトを記述する WSDL ファイルを作成します。
  10. EJB 実装の Web サービス用 WSDL ファイルの作成」を参照してください。

  11. 標準の Web サービス デプロイメント記述子である webservices.xml と JAX-RPC マッピング ファイルを作成します。Web サービスの形態によっては、WebLogic 固有の Web サービス デプロイメント記述子 weblogic-webservices.xml も作成する必要があります。
  12. EJB 実装の Web サービス用デプロイメント記述子ファイルの記述」を参照してください。

  13. すべての Java コードと EJB ソース コードをクラス ファイルにコンパイルします。
  14. さまざまなアーティファクトをすべて、デプロイ可能な EJB EAR ファイルにパッケージ化します。
  15. すべてのアーティファクトの JAR ファイルへのパッケージ化」を参照してください。

  16. EJB JAR ファイルを通常通りにデプロイします。
  17. 詳細については、『WebLogic Server 9.1 アプリケーションのデプロイメント』を参照してください。

ステートレス セッション EJB の簡単な例

以下の節では、J2EE Web サービスを実装する簡単なステートレス セッション EJB のサンプル Java コードを示します。EJB は、sayHello() というビジネス メソッドを定義します。これは、String を入力として取り、同じ String を一部変更して返します。

Bean 実装クラス

package examples.ejbDeploy;
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* HelloWs の EJB 実装
*/
public class HelloBean implements SessionBean {
   public void ejbCreate() {}
public void ejbActivate() {}
public void ejbRemove() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
   public String sayHello(String input) throws RemoteException {
System.out.println(":input" +input );
return "'" + input + "' to you too!";
}
}

ホーム インタフェース

注意 : J2EE Web サービスでは、ホーム インタフェースは必須ではありません。ここでは、EJB プログラミングのベスト プラクティスという意味でのみホーム インタフェースを示しています。

package examples.ejbDeploy;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface HelloHome extends EJBHome {
HelloRemote create() throws RemoteException, CreateException;
}

リモート インタフェース

注意 : J2EE Web サービスでは、リモート インタフェースは必須ではありません。ここでは、EJB プログラミングのベスト プラクティスという意味でのみリモート インタフェースを示しています。

package examples.ejbDeploy;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface HelloRemote extends EJBObject {
  public String sayHello(String input) throws RemoteException;
}

サンプルの EJB デプロイメント記述子

以下の節では、HelloBean EJB の ejb-jar.xml ファイルおよび weblogic-ejb-jar.xml ファイルのサンプルを示します。

ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar 
version="2.1"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>EjbDeployBean</display-name>
<enterprise-beans>
<session>
<ejb-name>EjbDeployBean</ejb-name>
<home>examples.ejbDeploy.HelloHome</home>
<remote>examples.ejbDeploy.HelloRemote</remote>
<ejb-class>examples.ejbDeploy.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<security-identity>
<use-caller-identity/>
</security-identity>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>EjbDeployBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>

weblogic-ejb-jar.xml

<!DOCTYPE weblogic-ejb-jar 
PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN'
'http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>EjbDeployBean</ejb-name>
<stateless-session-descriptor>
<pool>
<max-beans-in-free-pool>100</max-beans-in-free-pool>
<initial-beans-in-free-pool> 10 </initial-beans-in-free-pool>
</pool>
</stateless-session-descriptor>
<jndi-name>EjbDeployName</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>

EJB からのサービス エンドポイント インタフェースの作成

サービス エンドポイント インタフェース (SEI) は、Web サービス オペレーションとしてエクスポーズするステートレス セッション EJB のビジネス メソッドを指定します。これらのオペレーションは、クライアント アプリケーションが Web サービスを呼び出す際に使用する PortType として WSDL でパブリッシュされます。SEI は、クライアントが EJB に対して使用するビジネス メソッドを定義する標準のリモート EJB インタフェースに似ています。

SEI を作成する場合は、次のガイドラインに従います。

Bean 実装クラスは、必須ではありませんが SEI を実装することもできます。つまり、Java 実装コードを更新しなくても、既存のステートレス セッション EJB を Web サービスとしてエクスポーズできます。

プログラミングの完全なガイドラインについては、Java API for XML-Based RPC (JAX-RPC) を参照してください。

次の HelloBean EJB のサンプル SEI では、sayHello() メソッドを Web サービス オペレーションとしてエクスポーズする方法を示します。

package examples.ejbDeploy;
import java.rmi.RemoteException;
import java.rmi.Remote;
public interface HelloWs extends Remote {
   public String sayHello(String input) throws RemoteException;
}

ejb-jar.xml デプロイメント記述子の Web サービス情報による更新

サービス エンドポイント インタフェース (SEI) を作成したら、SEI に関する情報を追加して ejb-jar.xml デプロイメント記述子を更新する必要があります。このデプロイメント記述子を更新するには、以下の例のように、ステートレス セッション EJB を記述する <session> 要素に <service-endpoint> 子要素を追加します。これは、標準のホーム インタフェースおよびリモート インタフェースを指定する方法に似ています。

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar 
version="2.1"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>EjbDeployBean</display-name>
<enterprise-beans>
<session>
<ejb-name>EjbDeployBean</ejb-name>
<home>examples.ejbDeploy.HelloHome</home>
<remote>examples.ejbDeploy.HelloRemote</remote>
<service-endpoint>examples.ejbDeploy.HelloWS</service-endpoint>
<ejb-class>examples.ejbDeploy.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<security-identity>
<use-caller-identity/>
</security-identity>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>EjbDeployBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>

EJB 実装の Web サービス用 WSDL ファイルの作成

WSDL ファイルでは、Web サービスのパブリック コントラクトを定義します。これには、以下のものが含まれます。

注意 : この節では、WSDL ファイルを手動で作成する際の概要について説明します。WSDL ファイルの構造と内容の詳細については、WSDL 仕様を参照してください。

以下の手順を参考に、Web サービスの WSDL ファイルを作成します。

  1. サービス エンドポイント インタフェース (SEI) の情報を基に、<portType> 要素と <message> 要素を作成します。
  2. JAX-RPC 仕様では、Web サービスを実装する EJB の SEI が WSDL ファイルにどのようにマップされるかを定義します。以下に、具体的な対応関係を示します。

  3. 前の手順で作成した <portType> 要素を参照する <binding> 要素を作成します。
  4. 通常は、<binding> 要素を使用して、クライアント アプリケーションが Web サービスを呼び出したときの SOAP 要求または応答メッセージの形式を記述します。たとえば、オペレーションが RPC 形式かドキュメント形式かを指定するには、<soap:binding> 子要素を使用します。次に、portType で定義されているオペレーションごとに、<binding><operation> 子要素を使用して、SOAP メッセージの入力および出力パラメータの形式を指定します。

  5. Web サービス全体を定義する <service> 要素を作成します。この情報は、後で Web サービス デプロイメント記述子を作成するときに使用します。
  6. name 属性を使用して、Web サービスの名前を指定します。Web サービスの名前、前の手順で作成したバインディングへの参照、およびサービス エンドポイント アドレス (WebLogic Server にデプロイされた Web サービスの URL) を指定する <service><port> 子要素を、その Web サービスを実装する EJB ごとに作成します。

注意 : Web サービス デプロイメント記述子ファイルにはこのファイルへの参照が明示的に指定されているので、WSDL ファイルには任意の名前を付けることができます。

以下に、HelloBean EJB で実装されている Web サービスのサンプル WSDL ファイルを示します。このサンプル ファイルでは、サービス エンドポイント インタフェースが WSDL ファイルの各要素にどのようにマップされるかを示します。太字で示した箇所では、SEI と WSDL が対応付けられています。

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="EjbDeploy" 
targetNamespace="http://EjbDeploy.org"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://EjbDeploy.org"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
</types>
  <message name="HelloWs_sayHelloResponse">
<part name="result" type="xsd:string"/>
</message>
  <message name="HelloWs_sayHello">
<part name="String_1" type="xsd:string"/>
</message>
  <portType name="HelloWs">
<operation name="sayHello" parameterOrder="String_1">
<input message="tns:HelloWs_sayHello"/>
<output message="tns:HelloWs_sayHelloResponse"/>
</operation>
</portType>
  <binding name="HelloWsBinding" type="tns:HelloWs">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction=""/>
<input>
<soap:body
use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://EjbDeploy.org"/>
</input>
<output>
<soap:body
use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://EjbDeploy.org"/>
</output>
</operation>
</binding>
  <service name="EjbDeploy">
<port name="HelloWsPort" binding="tns:HelloWsBinding">
<soap:address
location="http://localhost:7001/ejbDeploy/EjbDeployBean"/>
</port>
</service>
</definitions>

EJB 実装の Web サービス用デプロイメント記述子ファイルの記述

この節では、以下の J2EE Web サービス デプロイメント記述子ファイルの作成方法について説明します。

注意 : この節では、J2EE Web サービスのデプロイメント記述子ファイルを手動で作成する際の概要について説明します。このファイルの構造と内容の詳細については、Web Services for J2EE 仕様を参照してください。

webservices.xml

webservices.xml デプロイメント記述子ファイルは、EJB JAR ファイルに格納されている 1 つまたは複数の Web サービスを記述します。デプロイメント記述子ファイル自体も、この EJB JAR ファイルに格納されています。

webservices.xml ファイルのルート要素は <webservices> です。<webservice-description> 子要素を使用して 1 つまたは複数の Web サービスを指定できます。各 Web サービスには、以下の情報を指定できます。

以下のサンプル webservices.xml ファイルでは、この節で使用するサンプル Web サービスを記述しています。

<?xml version="1.0" encoding="UTF-8"?>
<webservices xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://EjbDeploy.org"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.bea.com/webservices/xsd/j2ee_web_services_1_1.xsd"
version="1.1">
    <webservice-description>
<webservice-description-name>EjbDeploy
</webservice-description-name>
<wsdl-file>META-INF/wsdl/EjbDeploy.wsdl</wsdl-file>
<jaxrpc-mapping-file>META-INF/EjbDeploy.xml</jaxrpc-mapping-file>
<port-component>
<port-component-name>EjbDeployPC</port-component-name>
<wsdl-port>wsdl:HelloWsPort</wsdl-port>
<service-endpoint-interface>examples.ejbDeploy.HelloWs
</service-endpoint-interface>
<service-impl-bean>
<ejb-link>EjbDeployBean</ejb-link>
</service-impl-bean>
</port-component>
</webservice-description>
</webservices>

JAX-RPC マッピング ファイル

JAX-RPC マッピング ファイルには、Web サービスと、そのパブリック コントラクトを記述する WSDL ファイルとの間の関係を説明する情報が格納されます。Java インタフェースには、Web サービスを呼び出すクライアントで使用するサービス インタフェース、および Web サービスのサーバサイド実装で使用するサービス エンドポイント インタフェースの両方が含まれます。

JAX-RPC ファイルでは、Web サービスで入力または出力パラメータとして使用する任意のユーザ定義のデータ型の Java 表現と XML 表現 (WSDL で指定) との間のマッピングについても記述します。

JAX-RPC マッピング ファイルには標準名はありません。webservices.xml ファイルは、ファイル名を含む、ファイルへの明示的な参照を作成します。ただし、ファイル名の拡張子は .xml にすることをお勧めします。

以下のサンプル JAX-RPC マッピング ファイルでは、Java インタフェースとこの章で扱っているサンプル Web サービスの WSDL ファイルとの間のマッピングを記述します。

<?xml version="1.0" encoding="UTF-8"?>
<java-wsdl-mapping 
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://EjbDeploy.org"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.bea.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd"
version="1.1">
  <package-mapping>
<package-type>examples.ejbDeploy</package-type>
<namespaceURI>http://EjbDeploy.org</namespaceURI>
</package-mapping>
  <service-interface-mapping>
<service-interface>javax.xml.rpc.Service</service-interface>
<wsdl-service-name>wsdl:EjbDeploy</wsdl-service-name>
<port-mapping>
<port-name>HelloWsPort</port-name>
<java-port-name>EjbDeploy</java-port-name>
</port-mapping>
</service-interface-mapping>
  <service-endpoint-interface-mapping>
<service-endpoint-interface>examples.ejbDeploy.HelloWs
</service-endpoint-interface>
<wsdl-port-type>wsdl:HelloWs</wsdl-port-type>
<wsdl-binding>wsdl:HelloWsBinding</wsdl-binding>
    <service-endpoint-method-mapping>
<java-method-name>sayHello</java-method-name>
<wsdl-operation>sayHello</wsdl-operation>
      <method-param-parts-mapping>
<param-position>0</param-position>
<param-type>java.lang.String</param-type>
<wsdl-message-mapping>
<wsdl-message>HelloWs_sayHello</wsdl-message>
<wsdl-message-part-name>String_1</wsdl-message-part-name>
<parameter-mode>IN</parameter-mode>
</wsdl-message-mapping>
</method-param-parts-mapping>
      <wsdl-return-value-mapping>
<method-return-value>java.lang.String</method-return-value>
<wsdl-message>HelloWs_sayHelloResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
</service-endpoint-interface-mapping>
</java-wsdl-mapping>

すべてのアーティファクトの JAR ファイルへのパッケージ化

すべてのアーティファクトを JAR ファイルにパッケージ化するには、次の手順に従います。

  1. ステージング ディレクトリで、標準の EJB JAR ファイル ディレクトリを作成し、コンパイルしたクラス ファイル、デプロイメント記述子、および WSDL ファイルをそれぞれ対応するディレクトリにコピーします。以下に、具体的なファイルの場所を示します。
  2. 以下のリストでは、ステージング ディレクトリを基準に、この章の Web サービスのサンプルで使用するファイルの場所を示します。

    ./META-INF/MANIFEST.MF
    ./META-INF/ejb-jar.xml
    ./META-INF/weblogic-ejb-jar.xml
    ./META-INF/webservice.xml
    ./META-INF/EjbDeploy.xml
    ./META-INF/wsdl/EjbDeploy.wsdl
    ./examples/ejbDeploy/HelloBean.class
    ./examples/ejbDeploy/HelloHome.class
    ./examples/ejbDeploy/HelloRemote.class
    ./examples/ejbDeploy/HelloWs.class
  3. 以下の例で示すように、jar ユーティリティを使用して、ステージング ディレクトリから EJB JAR ファイルを作成します。
  4. prompt> jar cvf myWebService.jar .

 


Java クラス実装の J2EE Web サービスの作成 : 主な手順

Java クラスで実装されている J2EE Web サービスを作成するには、次の手順に従います。

  1. Java クラスをプログラミングします。
  2. J2EE Web サービスを実装する Java クラスのプログラミング時には、いくつかの要件に従う必要があります。詳細については「Java クラスのプログラミング」を参照してください。

  3. 標準の J2EE Web アプリケーション デプロイメント記述子 (web.xml) を作成、または既存のものがある場合は更新し、前の手順で作成した Java クラスの記述を追加します。web.xml<servlet-class> 要素を使用して、Java クラスを指定します。
  4. 注意 : Java クラスの指定には <servlet-class> 要素を使用しますが、Java クラスは、サーブレットでなくても構いません。また、たとえば javax.servlet.http.HttpServlet インタフェースを拡張する必要もありません。

    前の手順で作成した Java クラスを格納している Web アプリケーションの web.xml デプロイメント記述子ファイルのサンプルについては、「サンプルの web.xml デプロイメント記述子」を参照してください。

    Web アプリケーション デプロイメント記述子の記述と生成については、『WebLogic Server Web アプリケーション、サーブレット、JSP の開発』を参照してください。

  5. Java クラスからサービス エンドポイント インタフェース (SEI) を作成します。
  6. Java クラスからのサービス エンドポイント インタフェースの作成」を参照してください。

  7. Web サービスのパブリック コントラクトを記述する WSDL ファイルを作成します。
  8. Java クラス実装の Web サービス用 WSDL ファイルの作成」を参照してください。

  9. 標準の Web サービス デプロイメント記述子である webservices.xml と JAX-RPC マッピング ファイルを作成します。Web サービスの形態によっては、WebLogic 固有の Web サービス デプロイメント記述子 weblogic-webservices.xml も作成する必要があります。
  10. Java クラス実装の Web サービス用デプロイメント記述子ファイルの記述」を参照してください。

  11. すべての Java ソース コードをクラス ファイルにコンパイルします。
  12. さまざまなアーティファクトをすべて、デプロイ可能な WAR ファイルにパッケージ化します。
  13. すべてのアーティファクトの WAR ファイルへのパッケージ化」を参照してください。

  14. WAR ファイルを通常通りにデプロイします。
  15. 詳細については、『WebLogic Server 9.1 アプリケーションのデプロイメント』を参照してください。

Java クラスのプログラミング

Web サービスを実装する Java クラスをプログラミングするには、以下のガイドラインに従います。

以下の例では、J2EE Web サービスを実装する単純な Java クラスを示します。ここでは、Java クラスは、(「Java クラスからのサービス エンドポイント インタフェースの作成」で説明した) HelloWs という SEI を実装します。

package examples.warDeploy;
import java.io.Serializable;
import java.rmi.RemoteException;
/* 
* HelloWs の JavaBean 実装
*/
public class HelloJavaBean implements HelloWs, Serializable {
   public HelloJavaBean() {}
   public String sayHello(String input) throws RemoteException {
weblogic.utils.Debug.say( "(manoj):input" +input );
return "'" + input + "' to you too!";
}
}

サンプルの web.xml デプロイメント記述子

以下のサンプル web.xml ファイルでは、J2EE Web サービスとしてエクスポーズできるように example.warDeploy.HelloJavaBean Java クラスを記述する方法を示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>WarDeployApp_web</display-name>
    <servlet>
<servlet-name>WarDeployBean</servlet-name>
<servlet-class>examples.warDeploy.HelloJavaBean</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
    <servlet-mapping>
<servlet-name>WarDeployBean</servlet-name>
<url-pattern>/ws4ee/warDeploy</url-pattern>
</servlet-mapping>
    <session-config>
<session-timeout>54</session-timeout>
</session-config>
</web-app>

注意 : Java クラスの指定には <servlet-class> 要素を使用しますが、Java クラスは、サーブレットでなくても構いません。また、たとえば javax.servlet.http.HttpServlet インタフェースを拡張する必要もありません。

Java クラスからのサービス エンドポイント インタフェースの作成

サービス エンドポイント インタフェース (SEI) は、Web サービス オペレーションとしてエクスポーズする Java クラスのビジネス メソッドを指定します。これらのオペレーションは、クライアント アプリケーションが Web サービスを呼び出す際に使用する PortType として WSDL でパブリッシュされます。

SEI を作成する場合は、次のガイドラインに従います。

次の HelloJavaBean のサンプル SEI では、sayHello() メソッドを Web サービス オペレーションとしてエクスポーズする方法を示します。

package examples.warDeploy;
import java.rmi.RemoteException;
import java.rmi.Remote;
public interface HelloWs extends Remote {
   public String sayHello(String input) throws RemoteException;
}

Java クラス実装の Web サービス用 WSDL ファイルの作成

WSDL ファイルでは、Web サービスのパブリック コントラクトを定義します。これには、以下のものが含まれます。

注意 : この節では、WSDL ファイルを手動で作成する際の概要について説明します。WSDL ファイルの構造と内容の詳細については、WSDL 仕様を参照してください。

以下の手順を参考に、Web サービスの WSDL ファイルを作成します。

  1. サービス エンドポイント インタフェース (SEI) の情報を基に、<portType> 要素と <message> 要素を作成します。
  2. JAX-RPC 仕様では、Web サービスを実装する Java クラスの SEI が WSDL ファイルにどのようにマップされるかを定義します。以下に、具体的な対応関係を示します。

  3. 前の手順で作成した <portType> 要素を参照する <binding> 要素を作成します。
  4. 通常は、<binding> 要素を使用して、クライアント アプリケーションが Web サービスを呼び出したときの SOAP 要求または応答メッセージの形式を記述します。たとえば、オペレーションが RPC 形式かドキュメント形式かを指定するには、<soap:binding> 子要素を使用します。次に、portType で定義されているオペレーションごとに、<binding><operation> 子要素を使用して、SOAP メッセージの入力および出力パラメータの形式を指定します。

  5. Web サービス全体を定義する <service> 要素を作成します。この情報は、後で Web サービス デプロイメント記述子を作成するときに使用します。
  6. name 属性を使用して、Web サービスの名前を指定します。Web サービスの名前、前の手順で作成したバインディングへの参照、およびサービス エンドポイント アドレス (WebLogic Server にデプロイされた Web サービスの URL) を指定する <service><port> を、その Web サービスを実装する Java クラスごとに作成します。

注意 : Web サービス デプロイメント記述子ファイルにはこのファイルへの参照が明示的に指定されているので、WSDL ファイルには任意の名前を付けることができます。

以下に、HelloJavaBean Java クラスで実装されている Web サービスのサンプル WSDL ファイルを示します。このサンプル ファイルでは、サービス エンドポイント インタフェースが WSDL ファイルの各要素にどのようにマップされるかを示します。太字で示した箇所では、SEI と WSDL が対応付けられています。

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="WarDeploy" 
targetNamespace="http://WarDeploy.org"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://WarDeploy.org"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
</types>
  <message name="HelloWs_sayHelloResponse">
<part name="result" type="xsd:string"/>
</message>
  <message name="HelloWs_sayHello">
<part name="String_1" type="xsd:string"/>
</message>
 <portType name="HelloWs">
<operation name="sayHello" parameterOrder="String_1">
<input message="tns:HelloWs_sayHello"/>
<output message="tns:HelloWs_sayHelloResponse"/>
</operation>
</portType>
  <binding name="HelloWsBinding" type="tns:HelloWs">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction=""/>
<input>
<soap:body
use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://WarDeploy.org"/>
</input>
<output>
<soap:body
use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://WarDeploy.org"/>
</output>
</operation>
</binding>
  <service name="WarDeploy">
<port name="HelloWsPort" binding="tns:HelloWsBinding">
<soap:address
location="http://localhost:7001/warDeploy/ws4ee/warDeploy"/>
</port>
</service>
</definitions>

Java クラス実装の Web サービス用デプロイメント記述子ファイルの記述

この節では、以下の J2EE Web サービス デプロイメント記述子ファイルの作成方法について説明します。

注意 : この節では、J2EE Web サービスのデプロイメント記述子ファイルを手動で作成する際の概要について説明します。このファイルの構造と内容の詳細については、Web Services for J2EE 仕様を参照してください。

webservices.xml

webservices.xml デプロイメント記述子ファイルは、Web アプリケーションの WAR アーカイブに格納されている 1 つまたは複数の Web サービスを記述します。デプロイメント記述子ファイル自体も、この WAR アーカイブに格納されています。

webservices.xml ファイルのルート要素は <webservices> です。<webservice-description> 子要素を使用して 1 つまたは複数の Web サービスを指定できます。各 Web サービスには、以下の情報を指定できます。

以下のサンプル webservices.xml ファイルでは、この節で使用するサンプル Web サービスを記述しています。

<?xml version="1.0" encoding="UTF-8"?>
<webservices 
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://WarDeploy.org"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.bea.com/webservices/xsd/j2ee_web_services_1_1.xsd"
version="1.1">
     <webservice-description>
<webservice-description-name>WarDeploy
</webservice-description-name>
<wsdl-file>WEB-INF/wsdl/WarDeploy.wsdl</wsdl-file>
<jaxrpc-mapping-file>WarDeploy.xml</jaxrpc-mapping-file>
<port-component>
<port-component-name>WarDeployPC</port-component-name>
<wsdl-port>wsdl:HelloWsPort</wsdl-port>
<service-endpoint-interface>examples.warDeploy.HelloWs
</service-endpoint-interface>
<service-impl-bean>
<servlet-link>WarDeployBean</servlet-link>
</service-impl-bean>
</port-component>
</webservice-description>
</webservices>

JAX-RPC マッピング ファイル

JAX-RPC マッピング ファイルには、Web サービスと、そのパブリック コントラクトを記述する WSDL ファイルとの間の関係を説明する情報が格納されます。Java インタフェースには、Web サービスを呼び出すクライアントで使用するサービス インタフェース、および Web サービスのサーバサイド実装で使用するサービス エンドポイント インタフェースの両方が含まれます。

JAX-RPC ファイルでは、Web サービスで入力または出力パラメータとして使用する任意のユーザ定義のデータ型の Java 表現と XML 表現 (WSDL で指定) との間のマッピングについても記述します。

JAX-RPC マッピング ファイルには標準名はありません。webservices.xml ファイルは、ファイル名を含む、ファイルへの明示的な参照を作成します。ただし、ファイル名の拡張子は .xml にすることをお勧めします。

以下のサンプル JAX-RPC マッピング ファイルでは、Java インタフェースとこの章で扱っているサンプル Web サービスの WSDL ファイルとの間のマッピングを記述します。

<?xml version="1.0" encoding="UTF-8"?>
<java-wsdl-mapping 
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsdl="http://WarDeploy.org"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://www.bea.com/webservices/xsd/j2ee_jaxrpc_mapping_1_1.xsd"
version="1.1">
  <package-mapping>
<package-type>examples.warDeploy</package-type>
<namespaceURI>http://WarDeploy.org</namespaceURI>
</package-mapping>
  <service-interface-mapping>
<service-interface>javax.xml.rpc.Service</service-interface>
<wsdl-service-name>wsdl:WarDeploy</wsdl-service-name>
<port-mapping>
<port-name>HelloWsPort</port-name>
<java-port-name>WarDeploy</java-port-name>
</port-mapping>
</service-interface-mapping>
  <service-endpoint-interface-mapping>
<service-endpoint-interface>examples.warDeploy.HelloWs
</service-endpoint-interface>
<wsdl-port-type>wsdl:HelloWs</wsdl-port-type>
<wsdl-binding>wsdl:HelloWsBinding</wsdl-binding>
    <service-endpoint-method-mapping>
<java-method-name>sayHello</java-method-name>
<wsdl-operation>sayHello</wsdl-operation>
<method-param-parts-mapping>
<param-position>0</param-position>
<param-type>java.lang.String</param-type>
<wsdl-message-mapping>
<wsdl-message>HelloWs_sayHello</wsdl-message>
<wsdl-message-part-name>String_1</wsdl-message-part-name>
<parameter-mode>IN</parameter-mode>
</wsdl-message-mapping>
</method-param-parts-mapping>
      <wsdl-return-value-mapping>
<method-return-value>java.lang.String</method-return-value>
<wsdl-message>HelloWs_sayHelloResponse</wsdl-message>
<wsdl-message-part-name>result</wsdl-message-part-name>
</wsdl-return-value-mapping>
</service-endpoint-method-mapping>
  </service-endpoint-interface-mapping>
</java-wsdl-mapping>

すべてのアーティファクトの WAR ファイルへのパッケージ化

すべてのアーティファクトを Web アプリケーションの WAR ファイルにパッケージ化するには、次の手順に従います。

  1. ステージング ディレクトリで、標準の Web アプリケーション WAR ファイル ディレクトリを作成し、コンパイルしたクラス ファイル、デプロイメント記述子、および WSDL ファイルをそれぞれ対応するディレクトリにコピーします。以下に、具体的なファイルの場所を示します。
  2. 以下のリストでは、ステージング ディレクトリを基準に、この章の Web サービスのサンプルで使用するファイルの場所を示します。

    ./META-INF/MANIFEST.MF
    ./WarDeploy.xml
    ./WEB-INF/web.xml
    ./WEB-INF/webservices.xml
    ./WEB-INF/wsdl/WarDeploy.wsdl
    ./WEB-INF/classes/examples/warDeploy/HelloJavaBean.class
    ./WEB-INF/classes/examples/warDeploy/HelloWs.class
  3. 以下の例で示すように、jar ユーティリティを使用して、ステージング ディレクトリから Web アプリケーションの WAR ファイルを作成します。
  4. prompt> jar cvf myWebService.war .

 

ページの先頭 前 次