Interstage Application Server SOAPサービス ユーザーズガイド |
目次 索引 |
第8章 サポートされるデータ型 | > 8.1 XMLとJavaのデータ型マッピング |
以下の表に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 |
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) |
コンストラクタ。 |
public byte byteValue() |
byte値として値を返すメソッドです。 |
|
public short shortValue() |
short値として値を返すメソッドです。 |
|
XXX.UnsignedShort |
public UnsignedShort(long value) |
コンストラクタ。 |
public short shortValue() |
short値として値を返すメソッドです。 |
|
public int intValue() |
int値として値を返すメソッドです。 |
|
XXX.UnsignedInt |
public UnsignedInt(long value) |
コンストラクタ。 |
public int intValue() |
int値として値を返すメソッドです。 |
|
public long longValue() |
long値として値を返すメソッドです。 |
|
XXX.UnsignedLong |
public UnsignedLong(double value) |
コンストラクタ。 |
public long longValue() |
long値として値を返すメソッドです。 |
|
public BigInteger bigIntegerValue() |
java.math.BigIntegerとして値を返すメソッドです。 |
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 |
これらのクラスは保持しているデータを表すvalueフィールドと、コンストラクタのみを持つクラスです。
以下にintを保持するYYY.IntHolderクラスの場合のフィールド、およびコンストラクタについて説明します。他のYYY.データ型名Holderクラス、ZZZ.データ型名Holderクラスも同様に、保持する型のvalueフィールド、デフォルトコンストラクタ、初期値を指定するコンストラクタを持ちます。
クラス名 |
メソッド名 |
説明 |
---|---|---|
YYY.IntHolder |
public int value |
フィールド。 |
public IntHolder() |
デフォルトコンストラクタ。 |
|
public IntHolder(int 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; } } |
目次 索引 |