AutoBeanを使用してデータを JSON にコーディング/デコードしますが、以前の GWT バージョンでは問題ありませんでした。私の意見では、AutoBean は JSON を処理するための非常に優れた便利なツールです。GWT ver.2.4.0 以降、この機能が変更されたので、時間をかけてコードで復元しました。ただし、まだ修正されていない部分は 1 つだけです - アノテーション @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版。1.6.1.