Interstage Application Server SOAPサービス ユーザーズガイド
目次 索引 前ページ次ページ

第8章 サポートされるデータ型> 8.1 XMLとJavaのデータ型マッピング

8.1.1 単純型

 以下の表にXMLのデータ型と、Java言語のRPCアプリケーションで使用するデータ型の対応を示します。

XMLのデータ型

RPCアプリケーションのパラメタ(Javaのデータ型クラス)

inまたはreturn

outまたはinout

xsd:int

int

YYY.IntHolder

soap:int ※

xsd:unsignedInt

XXX.UnsignedInt

ZZZ.UnsignedIntHolder

xsd:short

short

YYY.ShortHolder

soap:short ※

xsd:unsignedShort

XXX.UnsignedShort

ZZZ.UnsignedShortHolder

xsd:long

long

YYY.LongHolder

soap:long ※

xsd:unsignedLong

XXX.UnsignedLong

ZZZ.UnsignedLongHolder

xsd:byte

byte

YYY.ByteHolder

soap:byte ※

xsd:unsignedByte

XXX.UnsignedByte

ZZZ.UnsignedByteHolder

xsd:float

float

YYY.FloatHolder

soap:float ※

xsd:double

double

YYY.DoubleHolder

soap:double ※

xsd:boolean

boolean

YYY.BooleanHolder

soap:boolean ※

xsd:string

java.lang.String

YYY.StringHolder

soap:string ※

xsd:decimal

java.math.BigDecimal

YYY.BigDecimalHolder

soap:decimal ※

xsd:integer

java.math.BigInteger

YYY.BigIntegerHolder

soap:integer ※

soap:base64

byte[]

YYY.ByteArrayHolder

xsd:base64Binary

byte[]

YYY.ByteArrayHolder

xsd:hexBinary

byte[]

YYY.ByteArrayHolder

AAA:timeInstant

java.util.Calendar

YYY.CalendarHolder

xsd:dateTime

java.util.Calendar

YYY.CalendarHolder

【in/return】

◆符号なし(unsigned)値を表現するクラス

 Java言語には符号なし(unsigned)のデータ型がありません。そのため、符号なし(unsigned)のデータ型を表すクラスとして、Interstage SOAPサービスが提供する以下のクラスを使用します。

クラス名

説明

XXX.UnsignedByte

XMLのデータ型unsignedByteを表すクラスです。

XXX.UnsignedShort

XMLのデータ型unsignedShortを表すクラスです。

XXX.UnsignedInt

XMLのデータ型unsignedIntを表すクラスです。

XXX.UnsignedLong

XMLのデータ型unsignedLongを表すクラスです。

 符号なし値を表すクラスは、以下のメソッドを持ちます。

クラス名

メソッド名

説明

XXX.UnsignedByte

public UnsignedByte(long value)

コンストラクタ。
valueには 0(最小値)から255(最大値)の値を指定します。負の値は指定できません。

public byte byteValue()

byte値として値を返すメソッドです。
インスタンスが128以上のunsignedByte値を表している場合、負のbyte値を返します。

public short shortValue()

short値として値を返すメソッドです。

XXX.UnsignedShort

public UnsignedShort(long value)

コンストラクタ。
valueには0(最小値)から65,535(最大値)の値を指定します。負の値は指定できません。

public short shortValue()

short値として値を返すメソッドです。
インスタンスが32,768以上のunsignedShort値を表している場合、負のshort値を返します。

public int intValue()

int値として値を返すメソッドです。

XXX.UnsignedInt

public UnsignedInt(long value)

コンストラクタ。
valueには0(最小値)から4,294,967,295(最大値)の値を指定します。負の値は指定できません。

public int intValue()

int値として値を返すメソッドです。
インスタンスが2,147,483,648以上のunsignedInt値を表している場合、負のint値を返します。

public long longValue()

long値として値を返すメソッドです。

XXX.UnsignedLong

public UnsignedLong(double value)

コンストラクタ。
valueには0(最小値)から18,446,744,073,709,551,615(最大値)の値を指定します。負の値は指定できません。

public long longValue()

long値として値を返すメソッドです。
インスタンスが9,223,372,036,854,775,808以上のunsignedLong値を表している場合、負のlong値を返します。

public BigInteger bigIntegerValue()

java.math.BigIntegerとして値を返すメソッドです。

 
 以下の例では、2行目で"-1"が、3行目で"255"が表示されます。
  XXX.UnsignedByte ubyte = new XXX.UnsignedByte((long)255); //1行目
  System.out.println(ubyte.byteValue()); //2行目
  System.out.println(ubyte.shortValue()); //3行目

【out/inout】

 out/inoutパラメタを使用する場合、RPCサーバアプリケーションでは、データを保持するHolderクラスを使用します。
 Holderクラスには以下のクラスがあります。

YYY.IntHolder, ZZZ.UnsignedIntHolder, YYY.ShortHolder, ZZZ.UnsignedShortHolder, ZZZ.DateHolder, YYY.LongHolder, ZZZ.UnsignedLongHolder, YYY.ByteHolder, ZZZ.UnsignedByteHolder, YYY.FloatHolder, YYY.DoubleHolder, YYY.BooleanHolder, YYY.StringHolder, YYY.ByteArrayHolder, YYY.BigDecimalHolder, YYY.BigIntegerHolder
ZZZ.ArrayOfIntHolder, ZZZ.ArrayOfUnsignedIntHolder, ZZZ.ArrayOfShortHolder, ZZZ.ArrayOfUnsignedShortHolder, ZZZ.ArrayOfDateHolder,
ZZZ.ArrayOfLongHolder, ZZZ.ArrayOfUnsignedLongHolder, ZZZ.ArrayOfByteHolder, ZZZ.ArrayOfUnsignedByteHolder,
ZZZ.ArrayOfFloatHolder, ZZZ.ArrayOfDoubleHolder, ZZZ.ArrayOfBooleanHolder, ZZZ.ArrayOfStringHolder, ZZZ.ArrayOfBigDecimalHolder, ZZZ.ArrayOfBigIntegerHolder
ZZZ.ArrayOfInt2DHolder, ZZZ.ArrayOfUnsignedInt2DHolder, ZZZ.ArrayOfShort2DHolder, ZZZ.ArrayOfUnsignedShort2DHolder, ZZZ.ArrayOfDate2DHolder,
ZZZ.ArrayOfLong2DHolder, ZZZ.ArrayOfUnsigned2DLongHolder, ZZZ.ArrayOfByte2DHolder, ZZZ.ArrayOfUnsignedByte2DHolder,
ZZZ.ArrayOfFloat2DHolder, ZZZ.ArrayOfDouble2DHolder, ZZZ.ArrayOfBoolean2DHolder, ZZZ.ArrayOfString2DHolder, ZZZ.ArrayOfBigDecimal2DHolder, ZZZ.ArrayOfBigInteger2DHolder

 これらのクラスは保持しているデータを表すvalueフィールドと、コンストラクタのみを持つクラスです。
 以下にintを保持するYYY.IntHolderクラスの場合のフィールド、およびコンストラクタについて説明します。他のYYY.データ型名Holderクラス、ZZZ.データ型名Holderクラスも同様に、保持する型のvalueフィールド、デフォルトコンストラクタ、初期値を指定するコンストラクタを持ちます。

クラス名

メソッド名

説明

YYY.IntHolder

public int value

フィールド。
インスタンスが現在保持しているint値です。

public IntHolder()

デフォルトコンストラクタ。
valueフィールドとして0を持つインスタンスを構築します。

public IntHolder(int initial)

コンストラクタ。
valueフィールドとしてinitialを持つインスタンスを構築します。

 RPCサーバアプリケーションのメソッドは、out/inoutパラメタとしてHolderクラスのインスタンスを受け取ります。受け取ったインスタンスのvalueフィールドを更新することで、新しい値がRPCクライアントアプリケーションへout/inoutパラメタとして送信されます。

 
 Holderクラスの使用例

 // RPCサーバメソッド
 public int server_method
     (int  in_para,  IntHolder  inout_para, StringHolder  out_para) {
   int  number = inout_para.value;  // inoutパラメタは入力値を参照し必要な処理を行う
      :
 // out/inout パラメタのvalueフィールドに値を代入(return時、クライアントに送信される)
   inout_para.value = 10;
   out_para.value = "abc";
      :
 }

 スタブ方式のRPCクライアントアプリケーションでは、out/inoutパラメタとしてHolderクラスのインスタンスを使用します。RPCサーバアプリケーションを呼び出した後、Holderクラスのインスタンスのvalueフィールドに、RPCサーバアプリケーションから返信された値が設定されています。以下に取得方法の例を示します。

 // スタブ方式のRPCクライアントアプリケーション
 import javax.xml.rpc.holders.IntHolder;
      :
 // パラメタの用意(arg3がoutパラメタ)
   int arg1 = 100;
   int arg2 = 200;
   IntHolder arg3 = new IntHolder();
 //パラメタが int(in),int(in),int(out)のサーバメソッド呼出し(targetがスタブオブジェクト)
   int result = target.opInt( arg1, arg2, arg3 );

// outパラメタの値を取得
   System.out.println( "arg3 = " + arg3.value );
      :
 }

 DII方式のRPCクライアントアプリケーションではHolderクラスは参照しません。out/inoutパラメタを取得するには、RCPサーバアプリケーションを呼び出した後、javax.xml.rpc.CallクラスのgetOutputParamsメソッドの返り値であるjava.util.Mapオブジェクトのgetメソッド(引数はパラメタ名)で取得します。outパラメタもinoutパラメタも値の取得方法は同じです。
 以下に取得方法の例を示します。

 // RPC-DIIクライアントアプリケーション
      :
 // out/inout パラメタの値を取得
   java.util.Map outParams = call.getOutputParams();
   Integer inout = (Integer)outParams.get("inout_para");  // パラメタ名 inout_para
   String out = (String)outParams.get("out_para");  // パラメタ名 out_para
      :
 }

 RPCサーバアプリケーションのout/inoutパラメタで3次元以上の配列データを使用する場合は、RPCサーバアプリケーションでその配列データをvalueフィールドに持つHolderクラスを作成します。以下にintの3次元配列をvalueフィールドに持つHolderクラスの作成例を記述します。

 
 RPCサーバアプリケーションで使用するHolderクラス作成例(単純配列型)

 import javax.xml.rpc.holders.Holder;
 public class ArrayOfInt3DHolder implements Holder {
   public int[][][] value;
   public ArrayOfInt3DHolder() {} // デフォルトコンストラクタ
   public ArrayOfInt3DHolder(int[][][] initial){
     value = initial;
   }
 }

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005