Показать сообщение отдельно
Старый 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)