Невозможно связать 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: последний имеет мощный прозрачный механизм экстернализации, а также инструменты генерации кода, которые действительно могут сэкономить ваше время (см. Документацию здесь).

Другие вопросы по тегам