A biblioteca java atualizada para 1.19.0 e os tipos de retorno do modelo de usuário são todos diferentes
-
26-12-2019 - |
Pergunta
Estou usando a biblioteca cliente Java para a API do Directory aqui:https://developers.google.com/api-client-library/java/apis/admin/directory_v1
O modelo com.google.api.services.admin.directory.model.User mudou de 1.16 para 1.19.
Na versão antiga eu costumava fazer isso:
List<UserAddress> userAddressList = user.getAddresses();
for(UserAddress userAddress : userAddressList) {
///
}
Mas agora user.getAddresses está retornando um objeto.O mesmo negócio para getOrganizations, telefones, etc.Todos eles retornam um Object que, após uma inspeção mais aprofundada, se parece com:
List<ArrayMap<String, String>>
ArrayMap estende GenericJson.
O que preciso fazer para chegar ao UserAddress, além de voltar para a versão anterior?
Solução
É um bug (do meu ponto de vista) nas versões mais recentes.Use um mais antigo como 1.16, 1.17 ou o primeiro 1.18 (o último 1.18 também tem o bug).
Outras dicas
A mesma coisa aconteceu no cliente C# e em maio de 2015, um desenvolvedor do Google chamado Eric Koleda respondeu:
Uma alteração no back-end teve a consequência não intencional de alterar o documento de descoberta do serviço, fazendo com que o campo de endereços (e outros) fosse marcado como type=any.Isso causa problemas para linguagens de tipos fortes como .NET, como você descobriu.A equipe está ciente do problema, mas não está claro quando uma correção estará disponível.
No entanto, o cliente C# ainda tem esse problema, então presumo que o cliente Java também tenha.
Aqui estão alguns problemas que encontrei no rastreador de problemas do Google especificamente para esse problema no cliente Java, mas nenhum deles viu nenhum progresso ainda:
- Edição 3645:Gerador de código quebrado para Directory API no cliente Java:Classe de usuário sem tipos explícitos
- Edição 3730:A versão mais recente do cliente Directory API retorna Object em vez da classe correta