WebLogic Web サービス プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、Implementing Enterprise Web Services 1.1 仕様 (JSR-921) に準拠している 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 サービスを作成するには、次の手順に従います。
エンタープライズ JavaBean 仕様に記載されている標準ガイドラインを除き、Web サービスを実装するステートレス セッション EJB に対する要件または制限はありません。EJB の作成の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』を参照してください。
Bean 実装クラスとそのホーム インタフェースおよびリモート インタフェースのサンプル Java コードについては、「ステートレス セッション EJB の簡単な例」を参照してください。
EJB デプロイメント記述子の記述および生成の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』を参照してください。
前の手順で作成した EJB を記述するサンプル デプロイメント記述子ファイルについては、「サンプルの EJB デプロイメント記述子」を参照してください。
「EJB からのサービス エンドポイント インタフェースの作成」を参照してください。
注意 : weblogic-ejb-jar.xml
デプロイメント記述子ファイルを更新する必要はありません。
「ejb-jar.xml デプロイメント記述子の Web サービス情報による更新」を参照してください。
「EJB 実装の Web サービス用 WSDL ファイルの作成」を参照してください。
webservices.xml
と JAX-RPC マッピング ファイルを作成します。Web サービスの形態によっては、WebLogic 固有の Web サービス デプロイメント記述子 weblogic-webservices.xml
も作成する必要があります。「EJB 実装の Web サービス用デプロイメント記述子ファイルの記述」を参照してください。
「すべてのアーティファクトの JAR ファイルへのパッケージ化」を参照してください。
詳細については、『WebLogic Server 9.1 アプリケーションのデプロイメント』を参照してください。
以下の節では、J2EE Web サービスを実装する簡単なステートレス セッション EJB のサンプル Java コードを示します。EJB は、sayHello()
というビジネス メソッドを定義します。これは、String
を入力として取り、同じ String
を一部変更して返します。
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;
}
以下の節では、HelloBean
EJB の ejb-jar.xml
ファイルおよび weblogic-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>
<!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>
サービス エンドポイント インタフェース (SEI) は、Web サービス オペレーションとしてエクスポーズするステートレス セッション EJB のビジネス メソッドを指定します。これらのオペレーションは、クライアント アプリケーションが Web サービスを呼び出す際に使用する PortType として WSDL でパブリッシュされます。SEI は、クライアントが EJB に対して使用するビジネス メソッドを定義する標準のリモート EJB インタフェースに似ています。
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;
}
サービス エンドポイント インタフェース (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>
WSDL ファイルでは、Web サービスのパブリック コントラクトを定義します。これには、以下のものが含まれます。
注意 : この節では、WSDL ファイルを手動で作成する際の概要について説明します。WSDL ファイルの構造と内容の詳細については、WSDL 仕様を参照してください。
以下の手順を参考に、Web サービスの WSDL ファイルを作成します。
<portType>
要素にマップされます。<portType>
要素の <operation>
子要素にマップされます。<operation>
要素の <input>
子要素、戻り値のパラメータは <output>
子要素に対応します。<input>
および <output>
の message
属性の値は、データ型などのパラメータの形式を記述する <message>
要素の name
属性を指します。注意 : 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">
<input message="tns:HelloWs_sayHello"/>
<operation name="sayHello" parameterOrder="String_1">
<output message="tns:HelloWs_sayHelloResponse"/>
</operation>
</portType>
<bindingname="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">
<soap:address
<port name="HelloWsPort" binding="tns:HelloWsBinding">
location="http://localhost:7001/ejbDeploy/EjbDeployBean"/>
</port>
</service>
</definitions>
この節では、以下の J2EE Web サービス デプロイメント記述子ファイルの作成方法について説明します。
注意 : この節では、J2EE Web サービスのデプロイメント記述子ファイルを手動で作成する際の概要について説明します。このファイルの構造と内容の詳細については、Web Services for J2EE 仕様を参照してください。
webservices.xml
デプロイメント記述子ファイルは、EJB JAR ファイルに格納されている 1 つまたは複数の Web サービスを記述します。デプロイメント記述子ファイル自体も、この EJB JAR ファイルに格納されています。
webservices.xml
ファイルのルート要素は <webservices>
です。<webservice-description>
子要素を使用して 1 つまたは複数の Web サービスを指定できます。各 Web サービスには、以下の情報を指定できます。
<webservice-description-name>
要素で指定)。<wsdl-file>
要素で指定)。<jaxrpc-mapping-file>
要素で指定)。<port-component>
要素で指定)。<port-component>
要素には、以下の情報を指定できます。<port-component-name>
子要素で指定)。<wsdl-port>
要素で指定)。この要素の値は、「EJB 実装の Web サービス用 WSDL ファイルの作成」で、wsdl
ネームスペースとともに作成した WSDL ファイルの <service>
要素の <port>
子要素の name
属性の値と同一のものでなくてはなりません。<service-endpoint-interface>
要素で指定)。 <service-impl-bean>
要素の <ejb-link>
子要素で指定)。この要素の値は、EJB を記述する ejb-jar.xml
ファイル (「サンプルの EJB デプロイメント記述子」で作成したデプロイメント記述子) の <session>
要素の <ejb-name>
子要素と同一のものでなくてはなりません。以下のサンプル 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 マッピング ファイルには、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 ファイルにパッケージ化するには、次の手順に従います。
webservices.xml
デプロイメント記述子は、ejb-jar.xml
ファイルおよび weblogic-ejb-jar.xml
ファイルと同じく、META-INF ディレクトリに格納されます。webservices.xml
ファイルの <wsdl-file>
要素と <jaxrpc-mapping-file>
要素で指定したディレクトリに格納されます。以下のリストでは、ステージング ディレクトリを基準に、この章の 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
prompt> jar cvf myWebService.jar .
Java クラスで実装されている J2EE Web サービスを作成するには、次の手順に従います。
J2EE Web サービスを実装する Java クラスのプログラミング時には、いくつかの要件に従う必要があります。詳細については「Java クラスのプログラミング」を参照してください。
web.xml
) を作成、または既存のものがある場合は更新し、前の手順で作成した Java クラスの記述を追加します。web.xml
で <servlet-class>
要素を使用して、Java クラスを指定します。注意 : Java クラスの指定には <servlet-class>
要素を使用しますが、Java クラスは、サーブレットでなくても構いません。また、たとえば javax.servlet.http.HttpServlet
インタフェースを拡張する必要もありません。
前の手順で作成した Java クラスを格納している Web アプリケーションの web.xml
デプロイメント記述子ファイルのサンプルについては、「サンプルの web.xml デプロイメント記述子」を参照してください。
Web アプリケーション デプロイメント記述子の記述と生成については、『WebLogic Server Web アプリケーション、サーブレット、JSP の開発』を参照してください。
「Java クラスからのサービス エンドポイント インタフェースの作成」を参照してください。
「Java クラス実装の Web サービス用 WSDL ファイルの作成」を参照してください。
webservices.xml
と JAX-RPC マッピング ファイルを作成します。Web サービスの形態によっては、WebLogic 固有の Web サービス デプロイメント記述子 weblogic-webservices.xml
も作成する必要があります。「Java クラス実装の Web サービス用デプロイメント記述子ファイルの記述」を参照してください。
「すべてのアーティファクトの WAR ファイルへのパッケージ化」を参照してください。
詳細については、『WebLogic Server 9.1 アプリケーションのデプロイメント』を参照してください。
Web サービスを実装する Java クラスをプログラミングするには、以下のガイドラインに従います。
finalize()
メソッドを定義してはいけません。注意 : SEI の作成については、「Java クラスからのサービス エンドポイント インタフェースの作成」で説明しています。
javax.xml.rpc.server.ServiceLifeCycle
インタフェースを実装できます。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
ファイルでは、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
インタフェースを拡張する必要もありません。
サービス エンドポイント インタフェース (SEI) は、Web サービス オペレーションとしてエクスポーズする Java クラスのビジネス メソッドを指定します。これらのオペレーションは、クライアント アプリケーションが Web サービスを呼び出す際に使用する PortType として WSDL でパブリッシュされます。
次の 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;
}
WSDL ファイルでは、Web サービスのパブリック コントラクトを定義します。これには、以下のものが含まれます。
注意 : この節では、WSDL ファイルを手動で作成する際の概要について説明します。WSDL ファイルの構造と内容の詳細については、WSDL 仕様を参照してください。
以下の手順を参考に、Web サービスの WSDL ファイルを作成します。
<portType>
要素にマップされます。<portType>
要素の <operation>
子要素にマップされます。<operation>
要素の <input>
子要素、戻り値のパラメータは <output>
子要素に対応します。<input>
および <output>
の message
属性の値は、データ型などのパラメータの形式を記述する <message>
要素の name
属性を指します。注意 : 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">
<input message="tns:HelloWs_sayHello"/>
<operation name="sayHello" parameterOrder="String_1">
<output message="tns:HelloWs_sayHelloResponse"/>
</operation>
</portType>
<bindingname="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">
<soap:address
<port name="HelloWsPort" binding="tns:HelloWsBinding">
location="http://localhost:7001/warDeploy/ws4ee/warDeploy"/>
</port>
</service>
</definitions>
この節では、以下の J2EE Web サービス デプロイメント記述子ファイルの作成方法について説明します。
注意 : この節では、J2EE Web サービスのデプロイメント記述子ファイルを手動で作成する際の概要について説明します。このファイルの構造と内容の詳細については、Web Services for J2EE 仕様を参照してください。
webservices.xml
デプロイメント記述子ファイルは、Web アプリケーションの WAR アーカイブに格納されている 1 つまたは複数の Web サービスを記述します。デプロイメント記述子ファイル自体も、この WAR アーカイブに格納されています。
webservices.xml
ファイルのルート要素は <webservices>
です。<webservice-description>
子要素を使用して 1 つまたは複数の Web サービスを指定できます。各 Web サービスには、以下の情報を指定できます。
<webservice-description-name>
要素で指定)。<wsdl-file>
要素で指定)。<jaxrpc-mapping-file>
要素で指定)。<port-component>
要素で指定)。<port-component>
要素には、以下の情報を指定できます。<port-component-name>
子要素で指定)。<wsdl-port>
要素で指定)。この要素の値は、「Java クラス実装の Web サービス用 WSDL ファイルの作成」で、wsdl
ネームスペースとともに作成した WSDL ファイルの <service>
要素の <port>
子要素の name
属性の値と同一のものでなくてはなりません。<service-endpoint-interface>
要素で指定)。 <service-impl-bean>
要素の <servlet-link>
子要素で指定)。この要素の値は、Java クラスを記述する web.xml
ファイル (「サンプルの web.xml デプロイメント記述子」で作成したデプロイメント記述子) の <servlet>
要素の <servlet-name>
子要素と同一のものでなくてはなりません。以下のサンプル 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 マッピング ファイルには、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>
すべてのアーティファクトを Web アプリケーションの WAR ファイルにパッケージ化するには、次の手順に従います。
webservices.xml
デプロイメント記述子は、web.xml
ファイルおよび weblogic.xml
ファイル (省略可能) と同じく、WEB-INF ディレクトリに格納されます。webservices.xml
ファイルの <wsdl-file>
要素と <jaxrpc-mapping-file>
要素で指定したディレクトリに格納されます。以下のリストでは、ステージング ディレクトリを基準に、この章の 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
prompt> jar cvf myWebService.war .
![]() |
![]() |
![]() |