2016-10-08 3 views
0

dans mon projet gwt J'envoie des objets avec le canal gwt api au client et j'utilise Autobean pour encoder et décoder ces objets. tout fonctionne bien, je reçois une chaîne json valide sur le client et peut décoder cette chaîne json à l'AutoBean de retour. Seul l'objet autobean.as() ne renvoie rien de différent de l'objet lui-même.Autobean retourne un autobean après avoir utilisé as()

IContactDto et ContactD ne contiennent que des getters et setters. et c'est le facbory je l'ai écrit

AutoBeanFactory

public interface DtoFactory extends AutoBeanFactory{ 
    AutoBean<IContactDto> contactDto(IContactDto contactDto);  
} 

Code côté serveur

DtoFactory dtoFactory = AutoBeanFactorySource.create(DtoFactory.class); 
AutoBean<IContactDto> iContactDto = dtoFactory.contactDto(contactDto); 
String sJson = AutoBeanCodex.encode(autoBean).getPayload(); 
// sending this json to the client 

code côté client

cela est le code i utiliser pour décoder la chaîne JSON valide

// sJson string looks like {"id":"6473924464345088", "lastUpdate":"1475914369346", "fullName":"testName1","givenName":"testName2"} 

DtoFactory factory = GWT.create(DtoFactory.class); 
AutoBean<IContactDto> autoBean = AutoBeanCodex.decode(factory, IContactDto.class, sJson); // debugger: IContactDtoAutoBean_1_g$    
IContactDto iDto = autoBean.as(); // debugger still shows IContactDtoAutoBean$1_1_g$ 

i peut réellement utiliser les accesseurs de cet objet, mais dès que j'essaie de continuer à travailler ce ces objets que je reçois un problème avec la signature de type.

des idées comment je peux obtenir l'objet que j'ai codé de nouveau?

+2

Que voulez-vous dire par "J'ai un problème avec la signature de type"? Qu'est-ce que vous voulez faire cela ne fonctionne pas. Pour moi, si vous "pouvez réellement utiliser les getters et setters" alors tout fonctionne comme prévu. –

+0

c'est l'erreur que j'obtiens quand j'essaie de passer l'objet Autobean à une méthode qui excelle un IContactDto. Il est tout simplement impossible de lancer l'autobean dans la classe d'origine. Je peux reconstruire l'objet IContacDto en prenant les valeurs du getter autobean, mais c'est vraiment ennuyeux et pas comme je pense que ça devrait marcher. la documentation indique que la méthode as() renvoie la classe d'origine, donc je me demande pourquoi elle a fait. – richard

+0

Vos attentes sont erronées. Je vais vérifier la doc, mais vous pouvez vous assurer que ce n'est pas supposé fonctionner comme vous l'attendez. –

Répondre

0

AutoBean#as() renvoie une « mise en œuvre par procuration de l'interface T qui délègue au sous-jacent objet enveloppé, le cas échéant. » (source: javadoc), il ne sera jamais retourner l'objet enveloppé lui-même.

De plus, lorsque la désérialisation de JSON, il n'y a pas d'objet enveloppé, un nouveau autobean est créé « à partir de zéro » puis rempli de JSON (il en fait directement enveloppements un Splittable de la analysable JSON: super-léger, à lorsque vous utilisez un objet JS, ou un org.json.JSONObject lorsqu'il n'est pas dans le navigateur.)