Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.01.2010, 00:34
ligett вне форума Посмотреть профиль Отправить личное сообщение для ligett Найти все сообщения от ligett
  № 1  
Ответить с цитированием
ligett

Регистрация: Jan 2010
Сообщений: 2
По умолчанию Проблема сериалиации Java -> ActionScript 3 с BlazeDS

Огромная просьба помочь, 3ий (!) день бьюсь надо проблемой - в отчаянии. Уверен что что-то мелкое, но не могу понять где!!


- Есть два класса: Device и SpliceClosure, Device - предок, SpliceClosure - его потомок
- Одни и те же классы - в Java и в ActionScript
- Почему-то java класс Device сериализуется нормально в AS класс Device
- А класс SpliceClosure начисто отказывается, сериализуется вместо этого в Object и выдает type coercion error
- У меня есть другие унаследованные классы и всё работает нормально, проблема лишь с этим SpliceClosure


Вот код классов и ниже дебаг аутпут BlazeDS (сериализация выглядит идентично для обоих классов!! ошибок явно никаких):

---------------------------- JAVA: Device ---------------------------------------

Код:
public class Device  implements java.io.Serializable {

	private static final long serialVersionUID = 87770011L;

     protected Integer id;
     protected Location location;
     protected String code;
     protected String manufacturer;
     protected String manufacturerTypeCode;
     protected String serialNumber;
     protected Set<DeviceConnector> connectors = new HashSet<DeviceConnector>(0);
     
    public Device() {
    }

    public Device(
    			Location location, 
    			String code, 
    			String manufacturer, 
    			String manufacturerTypeCode, 
    			String serialNumber,
    			Set<DeviceConnector> connectors
    			) {
    	this.location = location;
    	this.code = code;
    	this.manufacturer = manufacturer;
        this.manufacturerTypeCode = manufacturerTypeCode;
        this.serialNumber = serialNumber;
        this.connectors = connectors;
    }
   
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public Location getLocation() {
        return this.location;
    }
    
    public void setLocation(Location location) {
        this.location = location;
    }
    
    public String getCode() {
        return this.code;
    }
    
    public void setCode(String code) {
        this.code = code;
    }

    public String getManufacturer() {
		return manufacturer;
	}

	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}

	public String getSerialNumber() {
		return serialNumber;
	}

	public void setSerialNumber(String serialNumber) {
		this.serialNumber = serialNumber;
	}

	public String getManufacturerTypeCode() {
		return manufacturerTypeCode;
	}

	public void setManufacturerTypeCode(String manufacturerTypeCode) {
		this.manufacturerTypeCode = manufacturerTypeCode;
	}

    public Set<DeviceConnector> getConnectors() {
		return connectors;
	}

	public void setConnectors(Set<DeviceConnector> connectors) {
		this.connectors = connectors;
	}

	public String toString(){
    	StringBuilder r = new StringBuilder("Device[");
    	r.append(" id=" + id);
    	r.append(" code=" + code);
    	r.append("]");
    	
    	r.append(super.toString());
    	
    	return r.toString();
    }
}
-------------------------- ActionScript 3: Device ------------------------------------
Код AS1/AS2:
package sit.si.CableTool.data
{
	import mx.collections.ArrayCollection;
	import net.digitalprimates.persistence.hibernate.HibernateBean;
 
    [RemoteClass(alias="sit.si.data.CableTool.Device")]
    [Managed] 
	public class Device extends HibernateBean
	{
		public var id : Number;
		public var location : Location;
		public var code : String;
     	public var manufacturer : String;
     	public var manufacturerTypeCode : String;
     	public var serialNumber : String;
 
		protected var connectors_: ArrayCollection = new ArrayCollection();
 
		public function get connectors() : ArrayCollection {
			if( connectors_ == null ){
				connectors_ = new ArrayCollection();
			}
			return connectors_;
		}
 
		public function set connectors(connectors_ : ArrayCollection) : void {			
			this.connectors_ = connectors_;
		}
 
 
		public function getCables() : ArrayCollection {
			var cables : ArrayCollection = new ArrayCollection();
			for each( var connector : DeviceConnector in connectors ){
//				if( ! cables.contains( cableEndpoint.cable ) ){
//					cables.addItem( cableEndpoint.cable );
//				}
			}
			return cables;
		}
 
		public function toString() : String {
			var result : String = "Device[";
			result += "Id: " + id;
			result += "Code: " + code;
			result += "Location: " + location;
			result += "Manufacturer: " + manufacturer;
			result += "Serial Number: " + serialNumber;
			result += "]";
 
			return result;
		}
	}
}
--------------- JAVA: SpliceClosure -------------------------------
Код:
public class SpliceClosure extends Device implements java.io.Serializable 
	{

	private static final long serialVersionUID = 87770009L;

    public SpliceClosure() {
    	super();
    }
}
---------------- ActionScript: Splice Closure ----------------------
Код AS3:
package sit.si.CableTool.data
{
	import mx.collections.ArrayCollection;
 
    [RemoteClass(alias="sit.si.data.CableTool.SpliceClosure")]
    [Managed] 
	public class SpliceClosure extends Device
	{
		public override function toString() : String{
			var result : String = "SpliceClosure[";
			result += "Id: " + id;
//			result += "Code: " + code;
//			result += "Number of splicings: " + splicings.length;
			result += "]";
 
			return result;
		}
 
	}
}
--------------BLAZEDS DEBUG OUTPUT --------------------------------------------------------------

Код:
[BlazeDS]Adapter 'java-object' called 'sit.si.CableTool.DAO.Devices.getDevice(java.util.Arrays$ArrayList (Collection size:1)
  [0] = 5454
)'
[BlazeDS]Result: 'Device[ id=5454 code=SPL1123]sit.si.data.CableTool.SpliceClosure@8d5aad'
[BlazeDS]Serializing AMF/HTTP response
Version: 3
  (Message #0 targetURI=/2/onResult, responseURI=)
    (Externalizable Object #0 'DSK')
      (Typed Object #1 'sit.si.data.CableTool.SpliceClosure')
        id = 5454
        connectors = (Externalizable Object #2 'flex.messaging.io.ArrayCollection')
          (Array #3)
        location = null
        manufacturer = null
        serialNumber = "1624887"
        manufacturerTypeCode = "SP16-SERIES-A1"
        code = "SPL1123"
1.263924520428E12
(Byte Array #4, Length 16)
(Byte Array #5, Length 16)
(Byte Array #6, Length 16)

..........


[BlazeDS]Adapter 'java-object' called 'sit.si.CableTool.DAO.Devices.getDevice(java.util.Arrays$ArrayList (Collection size:1)
  [0] = 5555
)'
[BlazeDS]Result: 'Device[ id=5555 code=22222]sit.si.data.CableTool.Device@4ef630'
[BlazeDS]Serializing AMF/HTTP response
Version: 3
  (Message #0 targetURI=/3/onResult, responseURI=)
    (Externalizable Object #0 'DSK')
      (Typed Object #1 'sit.si.data.CableTool.Device')
        id = 5555
        connectors = (Externalizable Object #2 'flex.messaging.io.ArrayCollection')
          (Array #3)
        location = null
        manufacturer = null
        serialNumber = "111111"
        manufacturerTypeCode = "44"
        code = "22222"
1.263924520646E12
(Byte Array #4, Length 16)
(Byte Array #5, Length 16)
(Byte Array #6, Length 16)

Старый 20.01.2010, 18:53
Ixanezis вне форума Посмотреть профиль Отправить личное сообщение для Ixanezis Найти все сообщения от Ixanezis
  № 2  
Ответить с цитированием
Ixanezis

Регистрация: Sep 2009
Сообщений: 18
Если я правильно понял - вам надо сериализовать объект на джаве и десериализовать его во флеше? о_о
В таком случае, странно, что один объект сериализовался нормально. Java сериализует по своим каким-то правилам. И только она нормально может десериализовать. А флеш - во своим. Тут нет стандарта.. Впрочем, я точно не знаю, говорю, что думаю.

Старый 20.01.2010, 19:40
ligett вне форума Посмотреть профиль Отправить личное сообщение для ligett Найти все сообщения от ligett
  № 3  
Ответить с цитированием
ligett

Регистрация: Jan 2010
Сообщений: 2
Не совсем, дело в том что есть стандартные механизмы де- и сериализации - Java <-> AS. В частности этим занимается BlazeDS.

Просто есть частная проблема с одним Java классом, который, гад, не хочет превращаться в правильный AS класс (неправильно десериализуется).

Вот вообщем и думал - может есть у кого догадки - куда смотреть.

Тем не менее, спасибо что пытаетесь помочь Ixanezis

Добавлено через 6 часов 17 минут
для следующих поколений - вот описание проблемы и решение: http://riapriority.com/blogs/graann....sterclassalias

А у меня сработало простое:

var s : SpliceClosure = new SpliceClosure();
в классе инициации..

Создать новую тему Ответ Часовой пояс GMT +4, время: 03:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:45.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.