Axis bean シリアライザによるデータタイプマッピング

Web サービスオペレーションによって基本データタイプ以外のオブジェクトが取得または返送される状況に対応するために、Axis では、標準 JavaBeans パターンの get および set アクセッサに従うすべての Java クラスの直列化または直列化の解除を行うことができます。必要に応じて、この機能をサービスまたはクライアント、あるいはその両方に使用できます。

メモ:  WSDL2Java を使用して、複雑なタイプを使用するオペレーションのプロキシまたはスケルトンを生成すると、XML データタイプに対応する Java クラスも生成されます。プロキシ内のコードによって、Axis 内のタイプマッピングが設定されます。スケルトンの場合、タイプマッピングは生成された deploy.wsdd ファイル内に含まれています。

bean マッピングの詳細については、<JRun のルートディレクトリ>/docs/html/thirdparty/axis ディレクトリの『Axis User Guide』を参照してください。

bean マッピングを手動で設定するには

  1. Web サービスまたはクライアント、あるいはその両方で bean マッピングが必要かどうかを検証します。

    たとえば、ユーザー固有の Axis ベースのサービスを使用する場合、または制御が及ばないサービスのためにクライアントを作成する場合があります。

    次のクラスベースの Web サービスでは、userid を指定された getUserメソッドは User オブジェクトを返すので、bean マッピングが必要です。

    import java.util.ArrayList;
    public class UserService {
      private ArrayList users = new ArrayList();
      public UserService() {
        User user1 = new User(0, "John", "Doe");
        User user2 = new User(1, "Jane", "Doe");
        users.add(user1);
        users.add(user2);
      }
        public User getUser(int userid) {
        return (User)users.get(userid);
      }
      public static void main(String args[]) {
        UserService myService = new UserService();
        User myUser = (User)myService.getUser(0);
        System.out.println(myUser.getFirstname());
      }
    }
    
  2. Web サービスが要求または返送するデータの取得または設定を行うための標準
    JavaBeans アクセッサを持つ Java クラスを作成します。

    次の JavaBeans は、手順 1 で導入された User を表します。

    public class User {
      // private 変数
      private int userid;
      private String firstname;
      private String lastname;
      public User() {}
      public User(int userid, String firstname, String lastname) {
        this.userid = userid;
        this.firstname = firstname;
        this.lastname = lastname;
      }
      public int getUserid() {
        return userid;
      }
      public void setUserid(int userid) {
        this.userid = userid;
      }
      public String getFirstname() {
        return firstname;
      }
      public void setFirstname(String firstname) {
        this.firstname = firstname;
      }
      public String getLastname() {
        return lastname;
      }
      public void setLastname(String lastname) {
        this.lastname = lastname;
      }
    }
    
  3. Web サービスがユーザー独自の Axis ベースのサービスであり、サーバサイドで
    JavaBeans を使用している場合は、beanMapping 要素を Web サービスの
    server-config.wsdd ファイルに追加します。

    UserService サービスでは、server-config.wsdd ファイル内の次の beanMapping 要素を使用します。

    <beanMapping qname="ns:local" xmlns:ns="http://finduser.org/xsd"
    languageSpecificType="java:<パッケージ名>.User"/>
    
  4. bean を使用するクライアントを作成します。

    次の JSP は、UserService Web サービスのクライアントです。このクライアントは、Web サービスタグライブラリの invoke タグを使用してそのサービスの getUser オペレーションを呼び出します。またbeanmapping タグを使用して User データタイプを JavaBeans クラスの User にマッピングします。

    <%@ taglib prefix="web" uri="webservicetag" %>
    <%@ page import="<パッケージ名>.User"%>
    <web:beanmapping class="<パッケージ名>.User" namespace="http://
    finduser.org/xsd" type="User"/> 
    <web:invoke 
      namespace="http://finduser.org/"
      url="http://localhost:8100/services"
      operation="getUser"
      result="myresult"
      scope="page">
      <web:param name="userid" value="<%= new Integer(1) %>"/>
    </web:invoke>
    <% User thisUser = (User)pageContext.getAttribute("myresult", 
    pageContext.PAGE_SCOPE); %>
    <%= thisUser.getFirstname() %> <%= thisUser.getLastname() %>
    

    Web サービスタグライブラリの詳細については、弟 19 章、「JSP タグベースのダイナミッククライアントの使用」を参照してください。