Ao definir interfaces de serviço móvel, o servidor não pode utilizar a sintaxe completa do Java. Essa restrição ocorre devido a limitações nos ambientes de desenvolvimento móvel, especialmente no iOS, e ajuda a manter as definições de interface simples.
As especificações de definição de interface abrangem três tipos de definições:
Especificações para classes de dados com suporte nativo: Classes Java nativas e classes wrapper compatíveis.
Especificações para classes de interface do usuário: Interfaces definidas pelo usuário que contêm declarações de métodos para chamadas de API.
Especificações para classes de entidade definidas pelo usuário: Classes de entidade definidas pelo usuário que contêm declarações de campos. Essas classes são referenciadas por parâmetros de método ou valores de retorno em classes de interface, ou por outras classes de entidade definidas pelo usuário.
Especificações para classes de dados com suporte interno
Tipos de dados não compatíveis
Não use aninhamento multicamada para tipos de contêiner.
Não utilize
ListouMapsem especificar genéricos.Não use um tipo de array como genérico para
ListouMap.Bytes únicos não são compatíveis. No entanto, arrays de bytes (
byte[]) são aceitos.Não utilize arrays de objetos. Use uma lista.
Não nomeie propriedades como
dataoudescription. Esses nomes entram em conflito com propriedades do iOS.A chave de um
Mapdeve ser umaString.Não use classes abstratas como tipos.
Não use classes de interface como tipos.
Exemplos incorretos:
public class Req {
private Map<String,List<Person>> map; // Do not use multilayer nesting for container types.
private List<Map<Person>> list; // Do not use multilayer nesting for container types.
private List list1; // Specify generics for List or Map.
private Map map1; // Specify generics for List or Map.
private List<Person[]> listArray; // Do not use an array type as a generic for List or Map.
private byte b; // Single bytes are not supported.
private Person[] personArray; // Do not use object arrays. Use a list instead.
private String description; // Do not name a property description.
}
Tipos de dados compatíveis
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 (Note: You must specify type parameters. Do not use concrete child classes.)
java.util.Map (Note: You must specify type parameters. Do not use concrete child classes. The key type must be String.)
Enum
byte[]
Formato correto:
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;
}
Especificações para classes de interface do usuário
Parâmetros de método
Não referencie:
Tipos de enumeração
Genéricos diferentes de
Map,ListeSetClasses abstratas
Classes de interface
Arrays de tipos primitivos
É permitido referenciar:
Classes de entidade concretas. O tipo de dados da referência deve corresponder ao tipo real do objeto. Não use uma referência de classe pai para apontar para um objeto de classe filha.
Classes de dados com suporte nativo. Não aninhe tipos de coleção como arrays,
Map,ListouSet.
Os exemplos a seguir são incorretos:
Map<String,String[]>
Map<String,List<Person>> // Person is a concrete entity class.
List<Map<String,Person>>
List<Person[]>
Valores de retorno de método
Não referencie:
Tipos de enumeração
Genéricos diferentes de
Map,ListeSetClasses abstratas
Classes de interface
Arrays de tipos primitivos
É permitido referenciar:
-
Classes de dados concretas. O tipo de dados da referência deve corresponder ao tipo real do objeto. Não use uma referência de classe pai para apontar para um objeto de classe filha. Por exemplo, não use uma referência
Objectpara apontar para outros objetos.ImportanteSe a classe pai for uma classe concreta, a ferramenta de geração de código não conseguirá detectar essa falha.
Classes de dados com suporte nativo, conforme definido no início deste tópico. Não aninhe tipos de coleção como arrays,
Map,ListouSet. Para mais informações, consulte os exemplos acima.
Definições de método
Use a anotação
@OperationType. A ferramenta de geração de código ignora métodos sem essa anotação.Não sobrecarregue métodos.
Limitações da ferramenta de geração de código
A ferramenta permite herança nas definições de classe de interface, mas mescla a hierarquia de classes.
A ferramenta permite variáveis definidas em classes de interface, mas as ignora.
A ferramenta permite declarações de exceção em métodos de interface, mas as ignora.
Um arquivo source pode conter apenas uma definição de classe de interface. Não é possível incluir outras definições de classe, como classes internas ou anônimas.
A classe de interface e seus tipos referenciados devem ser classes de dados com suporte nativo ou ter definições disponíveis no código-fonte.
Especificações para classes de entidade definidas pelo usuário
Definições de campo
Não referencie:
Tipos de enumeração
Genéricos diferentes de
Map,ListeSetClasses abstratas
Classes de interface
Arrays de tipos primitivos
É permitido referenciar:
Classes de entidade concretas. O tipo de dados da referência deve corresponder ao tipo real do objeto. Não use uma referência de classe pai para apontar para um objeto de classe filha.
Classes de dados com suporte nativo. Não aninhe tipos de coleção como arrays,
Map,ListouSet. Para mais informações, consulte os exemplos acima.Propriedades com o modificador
transientsão ignoradas.-
Constantes definidas como
final static int. Outras constantes ou variáveis estáticas que não atendam a esse requisito são ignoradas.NotaEvite definir variáveis de membro que comecem com
is.
Definições de classe
Classes podem herdar de outras classes de entidade.
Declarações de métodos são ignoradas. A ferramenta de geração de código cria automaticamente métodos setter e getter com base nos campos da classe de entidade.
Limitações da ferramenta de geração de código
Declare apenas uma propriedade por linha.
A ferramenta permite interfaces implementadas por classes de entidade definidas pelo usuário, mas as ignora.
Um arquivo source pode conter apenas uma definição de classe de entidade definida pelo usuário. Não é possível incluir outras definições de classe, como classes internas ou anônimas.
A classe de entidade e seus tipos referenciados devem ser classes de dados com suporte nativo ou ter definições disponíveis no código-fonte.