モバイルサービスインターフェイスを定義する際、サーバーサイドでは完全な Java 構文を使用できません。この制限は、モバイル開発環境、特に iOS の制約によるものであり、インターフェイス定義をシンプルに保つために役立ちます。
インターフェイス定義仕様は、以下の 3 種類の定義を対象とします:
ネイティブでサポートされるデータクラスの仕様:サポートされるネイティブ Java クラスおよびラッパークラス。
ユーザーインターフェイスクラスの仕様:API 呼び出しのメソッド宣言を含む、ユーザー定義のインターフェイス。
ユーザー定義エンティティクラスの仕様:フィールド宣言を含む、ユーザー定義のエンティティクラス。これらのクラスは、インターフェイスクラスのメソッドパラメーターや戻り値、または他のユーザー定義エンティティクラスによって参照されます。
内部でサポートされるデータクラスの仕様
サポートされていないデータの型
コンテナー型に多層ネストを使用しないでください。
ジェネリクスを指定せずに `List` または `Map` を使用しないでください。
`List` または `Map` のジェネリクスとして配列型を使用しないでください。
単一バイトはサポートされていません。ただし、バイト配列 (`byte[]`) はサポートされています。
オブジェクト配列を使用しないでください。代わりにリストを使用してください。
プロパティに `data` または `description` という名前を付けないでください。これらの名前は iOS のプロパティと競合します。
`Map` のキーは `String` である必要があります。
抽象クラスを型として使用しないでください。
インターフェイスクラスを型として使用しないでください。
不正な例:
public class Req {
private Map<String,List<Person>> map; // コンテナー型に多層ネストを使用しないでください。
private List<Map<Person>> list; // コンテナー型に多層ネストを使用しないでください。
private List list1; // List または Map にジェネリクスを指定してください。
private Map map1; // List または Map にジェネリクスを指定してください。
private List<Person[]> listArray; // List または Map のジェネリクスとして配列型を使用しないでください。
private byte b; // 単一バイトはサポートされていません。
private Person[] personArray; // オブジェクト配列を使用しないでください。代わりにリストを使用してください。
private String description; // プロパティに description という名前を付けないでください。
}サポートされているデータの型
boolean, char, double, float, int, long, short
java.lang.Boolean
java.lang.Character
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.util.List (注:型パラメーターを指定する必要があります。具象子クラスは使用しないでください。)
java.util.Map (注:型パラメーターを指定する必要があります。具象子クラスは使用しないでください。キーの型は String である必要があります。)
Enum
byte[]正しいフォーマット:
public class Req {
private String s = "ss";
private int i;
private double d;
private Long l;
private long l1;
private boolean b;
private List<String> stringList;
private List<Person> personList;
private Map<String,Person> map;
private byte[] bytes;
private EnumType type;
}
public class Person {
private String name;
private int age;
}ユーザーインターフェイスクラスの仕様
メソッドパラメーター
参照しないでください:
列挙型
`Map`、`List`、`Set` 以外のジェネリクス
抽象クラス
インターフェイスクラス
プリミティブ型の配列
参照できます:
具象エンティティクラス。参照データ型は実際のオブジェクトタイプと一致する必要があります。親クラス参照を使用して子クラスオブジェクトを指さないでください。
ネイティブでサポートされるデータクラス。配列、`Map`、`List`、`Set` などのコレクション型をネストしないでください。
以下は不正な例です:
Map<String,String[]>
Map<String,List<Person>> // Person は具象エンティティクラスです。
List<Map<String,Person>>
List<Person[]>メソッドの戻り値
参照しないでください:
列挙型
`Map`、`List`、`Set` 以外のジェネリクス
抽象クラス
インターフェイスクラス
プリミティブ型の配列
参照できます:
具象データクラス。参照データ型は実際のオブジェクトタイプと一致する必要があります。親クラス参照を使用して子クラスオブジェクトを指さないでください。たとえば、`Object` 参照を使用して他のオブジェクトを指さないでください。
重要親クラスが具象クラスの場合、コード生成ツールはこのエラーを検出できません。
本トピックの冒頭で定義されている、ネイティブでサポートされるデータクラス。配列、`Map`、`List`、`Set` などのコレクション型をネストしないでください。詳細については、上記の例をご参照ください。
メソッド定義
`@OperationType` アノテーションを使用してください。このアノテーションがないメソッドは、コード生成ツールによって無視されます。
メソッドをオーバーロードしないでください。
コード生成ツールの制限事項
このツールはインターフェイスクラス定義での継承を許可しますが、クラス階層はマージされます。
このツールはインターフェイスクラスで定義された変数を許可しますが、無視します。
このツールはインターフェイスメソッドでの例外宣言を許可しますが、無視します。
1 つのソースファイルに含めることができるインターフェイスクラス定義は 1 つだけです。内部クラスや匿名クラスなど、他のクラス定義を含めることはできません。
インターフェイスクラスとそれが参照する型は、ネイティブでサポートされるデータクラスであるか、ソースコード内で定義が利用可能である必要があります。
ユーザー定義エンティティクラスの仕様
フィールド定義
参照しないでください:
列挙型
`Map`、`List`、`Set` 以外のジェネリクス
抽象クラス
インターフェイスクラス
プリミティブ型の配列
参照できます:
具象エンティティクラス。参照データ型は実際のオブジェクトタイプと一致する必要があります。親クラス参照を使用して子クラスオブジェクトを指さないでください。
ネイティブでサポートされるデータクラス。配列、`Map`、`List`、`Set` などのコレクション型をネストしないでください。詳細については、上記の例をご参照ください。
`transient` 修飾子を持つプロパティは無視されます。
`final static int` として定義された定数。この要件を満たさない他の定数や静的変数は無視されます。
説明`is` で始まるメンバー変数の定義は避けてください。
クラス定義
クラスは他のエンティティクラスから継承できます。
メソッド宣言は無視されます。コード生成ツールは、エンティティクラスのフィールドに基づいて setter および getter メソッドを自動的に生成します。
コード生成ツールの制限事項
1 行につき 1 つのプロパティのみを宣言してください。
このツールはユーザー定義エンティティクラスによって実装されたインターフェイスを許可しますが、無視します。
1 つのソースファイルに含めることができるユーザー定義エンティティクラス定義は 1 つだけです。内部クラスや匿名クラスなど、他のクラス定義を含めることはできません。
エンティティクラスとそれが参照する型は、ネイティブでサポートされるデータクラスであるか、ソースコード内で定義が利用可能である必要があります。