JWS ファイルの構造

JWS ファイルは有効な Java ファイルです。Java をよく理解していない場合や Java の基本的な機能について確認する場合には、Java の概要を参照してください。

このトピックでは、JWS ファイル内の個々の構成要素について説明します。用意されている JWS ファイルのサンプルについては、サンプル Web サービスを参照してください。

JWS ファイルの構成部分

このトピックでは、以下の JWS ファイルの構成部分について説明します。

package 文

package 文は、このファイル内のクラスとオブジェクトが属する Java パッケージを指定します。JWS ファイルでは、パッケージは JWS ファイルが配置されているプロジェクトのディレクトリによって決まります。JWS ファイルがプロジェクトの最上位ディレクトリにある場合、package 文は不要です。ファイルは、プロジェクトのデフォルト パッケージに属することになります。

JWS ファイルがプロジェクトのサブディレクトリにある場合、パッケージ名にはディレクトリ階層を反映する必要があります。たとえば、JWS ファイルが <project>/financial/clientservices ディレクトリにある場合は、次の package 文が必要です。

package financial.clientservices;

WebLogic Workshop では package 文の管理が試みられます。たとえば、プロジェクト ツリーで JWS ファイルをあるディレクトリから別のディレクトリに移動すると、WebLogic Workshop によって移動されたファイルのパッケージ名が更新されます。ただし、パッケージ名を自分で正しく設定しなければならない場合もあります。

import 文

Java ファイルで定義されていないクラスまたはオブジェクトを参照できるようにするには、そのクラスまたはオブジェクト(あるいはそれを定義するパッケージ)の定義をインポートしておく必要があります。この処理は import 文を使用して行います。

JWS ファイルで通常インポートする可能性のあるパッケージまたはクラスには、以下のものがあります。

import weblogic.jws.control.TimerControl;  // TimerControl API
import weblogic.jws.control.JwsContext;    // service's execution context

クラス宣言

JWS ファイルには、1 つの最上位 public クラスの宣言を含める必要があります。これは Web サービスを定義するクラスです。Web サービスの名前が、このクラスの名前になります。MyService という Web サービスのクラス宣言は次のようになります。

public class MyService
{
    ...
}

このトピックで説明する残りの項目はすべて、Web サービス クラスのメンバー変数またはメンバー関数です。

Web サービスのコメントを記述する方法については、Web サービスのコメントを記述するを参照してください。

メンバー変数

Web サービス クラスにはメンバー変数が含まれる場合があります。

public class MyService
{
    
int myMemberVariable;
    ...
}

コメントが記述されていないメンバー変数は、そのクラスの通常のメンバーです。これらのメンバー変数は、自動的に保持され、サービスのメソッドが conversational と示されている場合には特定のクライアントの会話に関連付けられます。

会話の詳細については、会話を使用してステートを保持するを参照してください。

メンバー変数の中には、特殊な意味のある変数としてコメントが記述されるものもあります。Control インスタンスおよび Callback インタフェースに関する、後述の節を参照してください。

Control インスタンス

メンバー変数に @jws:control タグでコメントが記述されている場合、そのメンバー変数はコントロールを表します。コントロールは、データベース、エンタープライズ JavaBean(EJB)、または他の Web サービスなどのリソースへの便利なインタフェースを提供します。

public class MyService
{
    int myMemberVariable;


    /**     *  @jws:control     */    TimerControl delayTimer;    ... }

コントロールに関する詳細については、コントロール : Web サービスからリソースを使用するを参照してください。

JwsContext オブジェクト

各 JWS ファイルには、@jws:context タグでコメントが記述される、weblogic.jws.control.JwsContext タイプの特殊なメンバー変数が含まれる場合があります。デフォルトでは、WebLogic Workshop によって作成された新しい JWS ファイルには、context という名前のこうしたメンバー変数が含まれます。

public class MyService
{


    int myMemberVariable;
    /**     *  @jws:context     */    JwsContext context;    ... }

このような JwsContext インスタンスが JWS ファイルに存在する場合、このインスタンスは実行時の JWS コンテキストへのアクセスに使用できます。

JwsContext インタフェースの詳細については、JwsContext インタフェースを参照してください。

不正な初期化の回避

コントロールおよび context オブジェクトは、Web サービス メソッドのスコープ外では無効です。JWS ファイルのメンバー変数の宣言に関連付けられた初期化コードは、JWS クラスがインスタンス化されるときに実行されます。JWS クラスのインスタンス化は特定の Web サービス メソッド呼び出しの外側で発生するので、こうした初期化は失敗するか、またはコントロールまたは context インスタンスの参照時に予期しない結果を引き起こします。

次のコード例では、serviceResult メンバー変数は someService コントロールでのメソッド呼び出しによって初期化されます。初期化コードが実行されるときに someService コントロール インスタンスは生成されていないので、このコードは無効です。初期化コードは、実行時に NullPointerException を送出します。

public class MyService
{
    /** @jws:control */
    private SomeServiceControl someService;
    ... 
    String serviceResult = someService.getResult();
}

次のコードは適切です。

public class MyService
{
    /** @jws:control */
    private SomeServiceControl someService;
    ... 
    String serviceResult;


   /**     * @jws:operation     */    public void someMethod()    {        ...        serviceResult = someService.getResult();        ...    } }

Callback インタフェース

callback インタフェースは、クライアントへのコールバックが定義される、JWS クラスの内部インタフェース(別のクラスまたはインタフェース内で宣言されるインタフェース)です。デザイン ビューでサービスにコールバックを追加すると、callback メソッドのシグネチャは callback インタフェースのメンバーになります。

public class MyService
{
    int myMemberVariable;


   /**     *  @jws:control     */    TimerControl delayTimer;
   public static interface Callback    {        public void myCallback(String stringArg);    }    public Callback callback;    ... }

callback インタフェースは、WebLogic Workshop によって管理されます。ただし、JWS ファイルや CTRL ファイルと同じように手動で編集することもできます。

callback インタフェースの内容は、サービスの WSDL ファイルにエクスポートされます。

サービスにコールバックを指定することで、サービスのクライアントがこれらのコールバックを処理するだろうという見込みを示します。この指定は、さまざまな理由で一部のクライアントには行えません。

Web サービスが定義するコールバックのコメントを記述する方法については、Web サービスのコメントを記述するを参照してください。

内部クラス

内部クラスは、別のクラスまたはインタフェース内で宣言されるクラスです。内部クラスの一般的な使用方法は、以下のとおりです。

Web サービスが、Java オブジェクトを受け付けたり返したりするメソッドまたはコールバックをパブリッシュする場合、オブジェクトは暗黙的または明示的な XML マップによってクラス間で変換されます。

XML マップの詳細については、XML マップを使用する理由を参照してください。

データベース クエリによって返されるカラム名と一致するメンバー名とタイプを含む内部クラスを作成できます。その後、特定のデータベース クエリが結果をそのクラスのオブジェクトにマップする必要があることを指定できます。

サービスからデータベースを使用する詳細については、データベース コントロール : Web サービスからデータベースを使用するを参照してください。

次の例では、MyService クラスの内部クラスとして Customer が宣言されています。

public class MyService
{
    int myMemberVariable;


   /**     *  @jws:control     */    TimerControl delayTimer;
   public static interface Callback    {        public void myCallback(String stringArg);    }    public Callback callback;
   public class Customer    {        public int custid;        public String name;        public String emailAddress;    }    ... }

メソッド

このトピックでは、メソッドは内部メソッドと区別されています。内部メソッドについては次の節で説明します。

メソッドという用語は、サービスのクライアントに公開されるメソッドを表します。メソッドは @jws:operation タグでコメントが記述されている場合に、クライアントに公開されます。クライアントに公開されるメソッドは、public アクセス修飾子を使用して宣言する必要があります。

次の例では、myMethod はサービス MyService のメソッドです。

public class MyService
{
    int myMemberVariable;


   /**     *  @jws:control     */    TimerControl delayTimer;
   public static interface Callback    {        public void myCallback(String stringArg);    }    public Callback callback;
   public class Customer    {        public int custid;        public String name;        public String emailAddress;    }
   /**     *  @jws:operation     */    public String myMethod(String stringArg)    {        ...    }
   ... }

Web サービス メソッドのコメントを記述する方法については、Web サービスのコメントを記述するを参照してください。

内部メソッド

このトピックでは、内部メソッドはメソッドと区別されています。メソッドについては前述の節で説明しています。

内部メソッドという用語は、サービスのクライアントに公開されないメソッドを表します。内部メソッドは特殊なコメントが記述されない、通常の Java クラス メンバーです。内部メソッドは、設計の必要に応じて、どのアクセス修飾子(publicprivateprotected)を使用して宣言してもかまいません。

次の例では、myInternalMethod はサービス MyService の内部メソッドです。

public class MyService
{
    int myMemberVariable;


   /**     *  @jws:control     */    TimerControl delayTimer;
   public static interface Callback    {        public void myCallback(String stringArg);    }    public Callback callback;
   public class Customer    {        public int custid;        public String name;        public String emailAddress;    }
   /**     *  @jws:operation     */    public String myMethod(String stringArg)    {        ...    }
   private method myInternalMethod(int intArg)    {        ...    }
   ... }

関連トピック

Java の概要

サンプル Web サービス