|
Curl ORBのデータ通信には以下のデータ型を利用することができます。(要はサービスクラスのコンストラクタやメソッドの引数及び戻り値、フィールドのデータクラスとして利用できる方です。)
| Curl |
Java |
| int |
int |
| int8 |
byte |
| int16 |
short |
| int32 |
int |
| int64 |
long |
| float |
float |
| double |
double |
| bool |
boolean |
| char |
char |
| String |
java.lang.String |
| DateTime |
java.util.Date |
| FastArray-of データ型 |
配列 |
| Array (Array-of any) |
List, ArrayList |
| HashTable (HashTable-of any) |
Map, HashMap |
| ByteArray |
com.curl.io.serialize.types.ByteArray |
COM.CURL.ORB.TYPE.SerializableRecordSet COM.CURL.ORB.TYPE.SerializableRecordField COM.CURL.ORB.TYPE.SerializableRecordData(0.7以上でサポート) |
com.curl.orb.type.SerializableRecordSet com.curl.orb.type.SerializableRecordField com.curl.orb.type.SerializableRecordData |
| ユーザ定義型(フィールドは上記のものに限る) |
ユーザ定義型(フィールドは上記のものに限る) |
バージョン0.6から以下のデータ型もサポートされました。
| Curl |
Java |
| COM.CURL.ORB.TYPE.BigInteger |
java.math.BigInteger |
| COM.CURL.ORB.TYPE.BigDecimal |
java.math.BigDecimal |
| COM.CURL.ORB.TYPE.Date |
java.util.Date |
| COM.CURL.ORB.TYPE.CDate |
java.sql.Date |
| COM.CURL.ORB.TYPE.CTime |
java.sql.Time |
| COM.CURL.ORB.TYPE.CTimestamp |
java.sql.Timestamp |
| COM.CURL.ORB.TYPE.Blob |
java.sql.Blob |
| COM.CURL.ORB.TYPE.Clob |
java.sql.Clob |
注意) サーバからのレスポンスとして受け取る場合(戻り値)は、すべてNull許容の型となる。(例、#String, #Foo)
また、Curlのユーザ定義型をJavaのクラスから生成する場合は、”Data Class”としてコード生成ツールから生成します。
さらにバージョン0.8からValueクラスとDecimal型 (Curl8.0のみ)もサポートされました。
注意) Valueクラスを利用する際は、Javaクラスに@ValueClassアノテーションを付与する必要があります。
レコードセットのサンプル
以下のようにサーバ側でレコードセットを作成し、クライアントへ返すことができます。
Java
|
// 0.6 の場合 public SerializableRecordSet createRecordSet() { SerializableRecordSet records = new SerializableRecordSet( new SerializableRecordField[]{ new SerializableRecordField("name", String.class), new SerializableRecordField("age", int.class), new SerializableRecordField("money", double.class), new SerializableRecordField("date", DateTime.class)}); records.addRecord(new Object[]{"hokada", 32, 10.1, new DateTime()}); records.addRecord(new Object[]{"amori", 27, 20000.01, new DateTime()}); records.addRecord(new Object[]{"tyamamoto", 30, 0.0001, new DateTime()}); records.addRecord(new Object[]{"foo", 20, 2.2, new DateTime()}); return records; }
|
|
// 0.7の場合 public SerializableRecordSet createRecordSet() { SerializableRecordSet records = new SerializableRecordSet( new SerializableRecordField[]{ new SerializableRecordField("name", String.class), new SerializableRecordField("age", int.class), new SerializableRecordField("money", double.class), new SerializableRecordField("dt", DateTime.class), new SerializableRecordField("ts", CTimestamp.class), new SerializableRecordField("bigint", com.curlap.orb.type.BigInteger.class) } ); records.addRecord( new SerializableRecordData( new String[]{"name", "age", "money", "dt", "ts", "bigint"}, new Object[]{"hokada", 32, 10.1, new DateTime(), new Timestamp(0), new BigInteger("100")} ) ); records.addRecord( new SerializableRecordData( new String[]{"name", "age", "money", "dt", "ts", "bigint"}, new Object[]{"amori", 27, 20000.01, new DateTime(), new Timestamp(0), new BigInteger("200")}) ); records.addRecord( new SerializableRecordData( new String[]{"name", "age", "money", "dt", "ts", "bigint"}, new Object[]{"tyamamoto", 30, 0.0001, new DateTime(), new Timestamp(0), new BigInteger("300")}) ); records.addRecord( new SerializableRecordData( new String[]{"name", "age", "money", "dt", "ts", "bigint"}, new Object[]{"foo", 20, 2.2, new DateTime(), new Timestamp(0), new BigInteger("400")}) ); return records }
|
Curl
|
{method public {create-record-set}:#SerializableRecordSet {return {self.invoke "createRecordSet"}} }
|| 利用例 {RecordGrid record-source = {foo.create-record-set}}
|
BigInteger、BigDecimalのサンプル
Java
|
import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Blob; import java.sql.Clob; import java.sql.Date; import java.sql.Time; import java.sql.Timestamp;
public class TestTypes {
public BigInteger echoBigInteger(BigInteger bigInteger) { return bigInteger; }
public BigDecimal echoBigDecimal(BigDecimal bigDecimal) { return bigDecimal; }
public Date echoDate(Date sqlDate) { return sqlDate; } public Time echoTime(Time sqlTime) { return sqlTime; }
public Timestamp echoTimestamp(Timestamp sqlTimestamp) { return sqlTimestamp; } public Blob echoBlob(Blob blob) { return blob; } public Clob echoClob(Clob clob) { return clob; } }
|
Curl
|
{define-class public TestTypes {inherits ApplicationContextClient}
|| これは生成されたコード [...]
{method public {echo-date v0:CDate}:#CDate {return {self.invoke "echoDate", arguments = {FastArray v0}}} }
{method public {echo-complex-type v0:ComplexTypeDto}:#ComplexTypeDto {return {self.invoke "echoComplexType", arguments = {FastArray v0}}} }
{method public {echo-big-integer v0:BigInteger}:#BigInteger {return {self.invoke "echoBigInteger", arguments = {FastArray v0}}} }
{method public {echo-big-decimal v0:BigDecimal}:#BigDecimal {return {self.invoke "echoBigDecimal", arguments = {FastArray v0}}} }
{method public {echo-time v0:CTime}:#CTime {return {self.invoke "echoTime", arguments = {FastArray v0}}} }
{method public {echo-timestamp v0:CTimestamp}:#CTimestamp {return {self.invoke "echoTimestamp", arguments = {FastArray v0}}} }
{method public {echo-blob v0:Blob}:#Blob {return {self.invoke "echoBlob", arguments = {FastArray v0}}} }
{method public {echo-clob v0:Clob}:#Clob {return {self.invoke "echoClob", arguments = {FastArray v0}}} } }
|| 以下のように利用
{import * from COM.CURL.ORB}
|| from-int64, from-int, from-String, from-doubleファクトリでBigIntegerのインスタンス生成可能 || add(+), subtract(-), multiple(*), divide(/), to-int, to-int64, to-Stringというメソッドなどで操作可能 def big-integer:BigInteger = {ct.echo-big-integer {BigInteger.from-int 123}}
|| from-int64, from-int, from-String, from-doubleファクトリでBigDecimalのインスタンス生成可能 || add(+), subtract(-), multiple(*), divide(/), to-int, to-int64, to-Stringというメソッドなどで操作可能 def big-decimal:BigDecimal = {ct.echo-big-decimal {BigDecimal.from-double 123.10}}
def date:CDate = {ct.echo-date {CDate}}
def time:CTime = {ct.echo-time {CTime 20000}}
def timestamp:CTimestamp = {ct.echo-timestamp {CTimestamp 40000}}
def blob:Blob = {ct.echo-blob {Blob {{Array-of byte} 'a', 'b', 'c'}}
def clob:Clob = {ct.echo-clob {Clob {{Array-of char} 'a', 'b', 'c'}}}
|
*各クラスは、基本的にJavaのAPIと同等のメソッドを持っています。
|