Невозможно связать RemoteObject с BlazeDS
Я использую BlazeDS в Tomcat7 и Flex. Я пытаюсь использовать пользовательские классы между клиентом и сервером. В как:
package
{
[Bindable]
[RemoteClass(alias="remoting.Product")]
public class Product
{
public var name:String;
public var id:int;
public var isVisible:Boolean;
}
}
В Java:
package remoting;
public class Product {
public String name;
public int id;
public Boolean isVisible;
public Product(){
name = "Product 0.1";
id = 123;
isVisible = false;
}
public void setName(String _name){
name = _name;
}
public void setId(int _id){
id = _id;
}
public void setVisible(Boolean _isVisible){
isVisible = _isVisible;
}
}
Сервисная часть:
public Product echo() {
Product product = new Product();
product.setId(123);
product.setName("My Product");
product.setVisible(true);
return product;
}
Я могу успешно установить пункт назначения RemoteObject и вызвать метод echo(). Возникает событие результата с объектом Product в event.result. Тем не менее, он не содержит каких-либо разумных данных. Переменные из класса AS просто инициализируются со значениями null, 0 и true. Мне интересно, в чем проблема. Я попытался вернуть String с параметрами из Product, и он работает нормально, поэтому они настроены нормально. Проблема в картографировании.
Я мог бы пойти другим путем и реализовать Externalizable, но я не понимаю эту часть из примера:
name = (String)in.readObject();
properties = (Map)in.readObject();
price = in.readFloat();
Что делать, если есть ряд строк?
Приветствия.
2 ответа
В классе Java: используйте приватные поля и реализуйте методы получения.
package remoting;
public class Product {
private String name;
private int id;
private Boolean isVisible;
public Product() {
name = "Product 0.1";
id = 123;
isVisible = false;
}
public void setName(String _name){
name = _name;
}
public String getName(){
return name;
}
public void setId(int _id){
id = _id;
}
public int getId(){
return id;
}
public void setIsVisible(Boolean _isVisible){
isVisible = _isVisible;
}
public Boolean getIsVisible() {
return isVisible;
}
}
Вы также можете перейти с BlazeDS на GraniteDS: последний имеет мощный прозрачный механизм экстернализации, а также инструменты генерации кода, которые действительно могут сэкономить ваше время (см. Документацию здесь).