2016-10-08 5 views
0

в моем проекте gwt Я отправляю объекты с каналом gwt api клиенту и использую Autobean для кодирования и декодирования этих объектов. все работает нормально, я получаю действительную строку json на клиенте и могу снова декодировать эту строку json в AutoBean. только autobean.as() не возвращает ничего, кроме самого автообмена.Autobean возвращает autobean после использования as()

IContactDto и ContactDto содержат только геттеры и сеттеры. и это facbory я написал

AutoBeanFactory

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

Серверный код

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

стороне клиента код

это код я использую для декодирования допустимой строки json

// 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$ 

я могу реально использовать методы получения и установки этого объекта, но как только я пытаюсь продолжать работать это те объекты, которые я получаю проблемы с сигнатурой типа.

любые идеи, как я могу получить объект, который я закодировал снова?

+2

Что вы подразумеваете под «у меня проблема с типом подписи»? Что вы хотите сделать, это не работает. Для меня, если вы «можете реально использовать геттеры и сеттеры», тогда все работает по назначению. –

+0

Это ошибка, которую я получаю, когда пытаюсь передать объект Autobean методу, который проверяет IContactDto. Просто невозможно включить автообъем в первоначальный класс. Я могу восстановить объект IContacDto, взяв значения автозахватчика, но это действительно раздражает, а не так, как я думаю, он должен работать. в документации указано, что метод as() возвращает исходный класс, поэтому я задаюсь вопросом, почему он действует. – richard

+0

Ваши ожидания неверны. Я проверю документ, но вы можете гарантировать, что он не должен работать так, как вы ожидаете его работы. –

ответ

0

AutoBean#as() возвращает «реализацию прокси-интерфейс T, который будет делегировать нижележащий завернутый объект, если таковой имеется.» А (источник: javadoc), он никогда не вернется сам обернутый объект.

Кроме того, при десериализации из JSON, нет обернутого объекта, новый autobean создается «с нуля», а затем заполнен JSON (это на самом деле непосредственно ПереноситSplittable из разобранного JSON: супер-легкие, просто тонкая оболочка с оболочкой вокруг объекта JS - или org.json.JSONObject, когда нет в браузере.)