Web サービスオペレーションによって基本データタイプ以外のオブジェクトが取得または返送される状況に対応するために、Axis では、標準 JavaBeans パターンの get および set アクセッサに従うすべての Java クラスの直列化または直列化の解除を行うことができます。必要に応じて、この機能をサービスまたはクライアント、あるいはその両方に使用できます。
メモ: WSDL2Java を使用して、複雑なタイプを使用するオペレーションのプロキシまたはスケルトンを生成すると、XML データタイプに対応する Java クラスも生成されます。プロキシ内のコードによって、Axis 内のタイプマッピングが設定されます。スケルトンの場合、タイプマッピングは生成された deploy.wsdd ファイル内に含まれています。
bean マッピングの詳細については、<JRun のルートディレクトリ>/docs/html/thirdparty/axis ディレクトリの『Axis User Guide』を参照してください。
たとえば、ユーザー固有の 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()); } }
次の 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; } }
beanMapping
要素を Web サービスの UserService
サービスでは、server-config.wsdd ファイル内の次の beanMapping
要素を使用します。
<beanMapping qname="ns:local" xmlns:ns="http://finduser.org/xsd" languageSpecificType="java:<パッケージ名>.User"/>
次の 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 タグベースのダイナミッククライアントの使用」を参照してください。