Я использую AutoBean для кодирования / декодирования данных в JSON, и это было хорошо в предыдущих версиях GWT.На мой взгляд, AutoBean - очень хороший и удобный инструмент для работы с JSON.Начиная с GWT ver.2.4.0 эта функциональность изменилась, и я потратил некоторое время, чтобы восстановить ее в своем коде.Но только одна часть остается нефиксированной - аннотация @PropertyName.Эта аннотация используется для добавления «псевдонима» к свойствам.Это экономит много сетевого трафика.И теперь это исключение.Пример кода ниже:
import com.google.web.bindery.autobean.shared.AutoBean.PropertyName;
public interface IPersonInfo {
// Name
@PropertyName("n")
public String getName();
public void setName(String name);
// Surname
@PropertyName("s")
public String getSurname();
public void setSurname(String surname);
// other properties...
}
Затем я пытаюсь декодировать это в JSON следующим образом:
AutoBean<IPersonInfo> user = factory.user();
// clone the userDto (it's a new way to clone an object in ver 2.4.0
// instad of deprecated clone() method)
Splittable data = AutoBeanCodex.encode(user);
IPersonInfo userDto = AutoBeanCodex.decode(factory, IPersonInfo.class, data).as();
userDto.setName("Name");
userDto.setSurname("Surname");
//... other properties
Этот фрагмент кода отлично работал в унаследованном коде.Но теперь (в GWT 2.4.0) я получаю исключение:
java.lang.IllegalArgumentException: name
at com.google.web.bindery.autobean.shared.impl.AutoBeanCodexImpl.doCoderFor(AutoBeanCodexImpl.java:524)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.setProperty(AbstractAutoBean.java:276)
at com.google.web.bindery.autobean.vm.impl.ProxyAutoBean.setProperty(ProxyAutoBean.java:253)
at com.google.web.bindery.autobean.vm.impl.BeanMethod$3.invoke(BeanMethod.java:103)
at com.google.web.bindery.autobean.vm.impl.SimpleBeanHandler.invoke(SimpleBeanHandler.java:43)
at $Proxy74.setName(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:104)
at com.google.web.bindery.autobean.vm.impl.ShimHandler.invoke(ShimHandler.java:81)
at $Proxy74.setName(Unknown Source)
Если я удалю @PropertyName из моего интерфейса, то исключение не произойдет.
Я все еще жду, что официальная документация будет обновлена, но она все еще остается со старыми примерами кода.
Может кто-нибудь помочь мне решить эту проблему?Спасибо за совет.
Я использую GWT вер.2.4.0, GAE ver.1.6.1.