2011-03-19 54 views
0

我有一個實體Bean和它對應的ActionScript類時,我傳遞的是類的一個對象,我得到這個錯誤:GraniteDS無法從動作類轉換爲Java bean ...如何解決這個問題?

13:54:07,750 ERROR [AMFMessageFilter] AMF message error 
org.granite.messaging.amf.io.AMF3SerializationException 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:94) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Array(AMF3Deserializer.java:261) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:124) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:403) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:126) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:88) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readAMF3Data(AMF0Deserializer.java:324) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readData(AMF0Deserializer.java:376) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readArray(AMF0Deserializer.java:239) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readData(AMF0Deserializer.java:362) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readBodies(AMF0Deserializer.java:155) 
    at org.granite.messaging.amf.io.AMF0Deserializer.<init>(AMF0Deserializer.java:94) 
    at org.granite.messaging.webapp.AMFMessageFilter.doFilter(AMFMessageFilter.java:93) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.RuntimeException: Could not read externalized object: [email protected]1a773bd 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:373) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:126) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:88) 
    ... 30 more 
Caused by: org.granite.messaging.amf.io.convert.NoConverterFoundException: Cannot convert: [email protected] to: java.util.Set<com.xpress.spt.beans.SptStatusHist> 
    at org.granite.messaging.amf.io.convert.Converters.getConverter(Converters.java:119) 
    at org.granite.messaging.amf.io.convert.Converters.convert(Converters.java:132) 
    at org.granite.hibernate.HibernateExternalizer.readExternal(HibernateExternalizer.java:189) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:369) 
    ... 32 more 
13:54:07,750 ERROR [[AMFMessageServlet]] Servlet.service() for servlet AMFMessageServlet threw exception 
org.granite.messaging.amf.io.AMF3SerializationException 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:94) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Array(AMF3Deserializer.java:261) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:124) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:403) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:126) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:88) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readAMF3Data(AMF0Deserializer.java:324) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readData(AMF0Deserializer.java:376) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readArray(AMF0Deserializer.java:239) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readData(AMF0Deserializer.java:362) 
    at org.granite.messaging.amf.io.AMF0Deserializer.readBodies(AMF0Deserializer.java:155) 
    at org.granite.messaging.amf.io.AMF0Deserializer.<init>(AMF0Deserializer.java:94) 
    at org.granite.messaging.webapp.AMFMessageFilter.doFilter(AMFMessageFilter.java:93) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.RuntimeException: Could not read externalized object: [email protected] 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:373) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:126) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readObject(AMF3Deserializer.java:88) 
    ... 30 more 
Caused by: org.granite.messaging.amf.io.convert.NoConverterFoundException: Cannot convert: [email protected] to: java.util.Set<com.xpress.spt.beans.SptStatusHist> 
    at org.granite.messaging.amf.io.convert.Converters.getConverter(Converters.java:119) 
    at org.granite.messaging.amf.io.convert.Converters.convert(Converters.java:132) 
    at org.granite.hibernate.HibernateExternalizer.readExternal(HibernateExternalizer.java:189) 
    at org.granite.messaging.amf.io.AMF3Deserializer.readAMF3Object(AMF3Deserializer.java:369) 
    ... 32 more 

我的Java bean類:

package com.xpress.spt.beans; 


import java.sql.Timestamp; 
import java.util.HashSet; 
import java.util.Set; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import javax.persistence.UniqueConstraint; 


/** 
* SptPromotion entity. @author MyEclipse Persistence Tools 
*/ 
@Entity 
@Table(name="SPT_PROMOTION" 
    ,schema="SPT_DEV" 
, uniqueConstraints = {@UniqueConstraint(columnNames="LABEL"), @UniqueConstraint(columnNames="SHORT_DESCRIPTION"), @UniqueConstraint(columnNames="DESCRIPTION")} 
) 

public class SptPromotion implements java.io.Serializable { 


    // Fields  
    private static final long serialVersionUID = 1L; 
    private Long sptCode; 
    private SptMatrixRule sptMatrixRule; 
    private SptStatus sptStatus; 
    private SptProcess sptProcess; 
    private String shortDescription; 
    private String description; 
    private String label; 
    private Timestamp creationDate; 
    private String username; 
    private String bcFlag; 
    private String prorationFlag; 
    private String countConstraintFlag; 
    private String minCommFlag; 
    private Long minCommPeriod; 
    private Long priority; 
    private Timestamp startPromoDate; 
    private Timestamp endPromoDate; 
    private Timestamp lastRunDate; 
    private Set<SptStatusHist> sptStatusHists = new HashSet<SptStatusHist>(0); 
    private Set<SptPromotionParameter> sptPromotionParameters = new HashSet<SptPromotionParameter>(0); 
    private Set<SptPromotionMechanism> sptPromotionMechanisms = new HashSet<SptPromotionMechanism>(0); 
    private Set<SptCustomerPromotionHist> sptCustomerPromotionHists = new HashSet<SptCustomerPromotionHist>(0); 
    private Set<SptLoadData> sptLoadDatas = new HashSet<SptLoadData>(0); 
    private Set<SptDependency> sptDependenciesForSptCode = new HashSet<SptDependency>(0); 
    private Set<SptDependency> sptDependenciesForDepSptCode = new HashSet<SptDependency>(0); 
    private Set<SptQualifiedCustomer> sptQualifiedCustomers = new HashSet<SptQualifiedCustomer>(0); 
    private Set<SptPromotionCriteria> sptPromotionCriterias = new HashSet<SptPromotionCriteria>(0); 
    private Set<SptProcessLog> sptProcessLogs = new HashSet<SptProcessLog>(0); 


    // Constructors 

    /** default constructor */ 
    public SptPromotion() { 
    } 

    /** minimal constructor */ 
    public SptPromotion(Long sptCode, SptMatrixRule sptMatrixRule, SptStatus sptStatus, SptProcess sptProcess, String shortDescription, String description, String label, Timestamp creationDate, String username, String bcFlag, String prorationFlag, String countConstraintFlag, Long priority, Timestamp startPromoDate) { 
     this.sptCode = sptCode; 
     this.sptMatrixRule = sptMatrixRule; 
     this.sptStatus = sptStatus; 
     this.sptProcess = sptProcess; 
     this.shortDescription = shortDescription; 
     this.description = description; 
     this.label = label; 
     this.creationDate = creationDate; 
     this.username = username; 
     this.bcFlag = bcFlag; 
     this.prorationFlag = prorationFlag; 
     this.countConstraintFlag = countConstraintFlag; 
     this.priority = priority; 
     this.startPromoDate = startPromoDate; 
    } 

    /** full constructor */ 
    public SptPromotion(Long sptCode, SptMatrixRule sptMatrixRule, SptStatus sptStatus, SptProcess sptProcess, String shortDescription, String description, String label, Timestamp creationDate, String username, String bcFlag, String prorationFlag, String countConstraintFlag, String minCommFlag, Long minCommPeriod, Long priority, Timestamp startPromoDate, Timestamp endPromoDate, Timestamp lastRunDate, Set<SptStatusHist> sptStatusHists, Set<SptPromotionParameter> sptPromotionParameters, Set<SptPromotionMechanism> sptPromotionMechanisms, Set<SptCustomerPromotionHist> sptCustomerPromotionHists, Set<SptLoadData> sptLoadDatas, Set<SptDependency> sptDependenciesForSptCode, Set<SptDependency> sptDependenciesForDepSptCode, Set<SptQualifiedCustomer> sptQualifiedCustomers, Set<SptPromotionCriteria> sptPromotionCriterias, Set<SptProcessLog> sptProcessLogs) { 
     this.sptCode = sptCode; 
     this.sptMatrixRule = sptMatrixRule; 
     this.sptStatus = sptStatus; 
     this.sptProcess = sptProcess; 
     this.shortDescription = shortDescription; 
     this.description = description; 
     this.label = label; 
     this.creationDate = creationDate; 
     this.username = username; 
     this.bcFlag = bcFlag; 
     this.prorationFlag = prorationFlag; 
     this.countConstraintFlag = countConstraintFlag; 
     this.minCommFlag = minCommFlag; 
     this.minCommPeriod = minCommPeriod; 
     this.priority = priority; 
     this.startPromoDate = startPromoDate; 
     this.endPromoDate = endPromoDate; 
     this.lastRunDate = lastRunDate; 
     this.sptStatusHists = sptStatusHists; 
     this.sptPromotionParameters = sptPromotionParameters; 
     this.sptPromotionMechanisms = sptPromotionMechanisms; 
     this.sptCustomerPromotionHists = sptCustomerPromotionHists; 
     this.sptLoadDatas = sptLoadDatas; 
     this.sptDependenciesForSptCode = sptDependenciesForSptCode; 
     this.sptDependenciesForDepSptCode = sptDependenciesForDepSptCode; 
     this.sptQualifiedCustomers = sptQualifiedCustomers; 
     this.sptPromotionCriterias = sptPromotionCriterias; 
     this.sptProcessLogs = sptProcessLogs; 
    } 


    // Property accessors omitted 
    //............. 

} 

,在這裏它對應的ActionScript類由Gas3代碼生成工具生成:

/** 
* Generated by Gas3 v2.1.0 (Granite Data Services). 
* 
* WARNING: DO NOT CHANGE THIS FILE. IT MAY BE OVERWRITTEN EACH TIME YOU USE 
* THE GENERATOR. INSTEAD, EDIT THE INHERITED CLASS (SptPromotion.as). 
*/ 

package com.xpress.spt.beans { 

    import flash.utils.IDataInput; 
    import flash.utils.IDataOutput; 
    import flash.utils.IExternalizable; 
    import mx.collections.ListCollectionView; 
    import org.granite.collections.IPersistentCollection; 
    import org.granite.meta; 

    use namespace meta; 

    [Bindable] 
    public class SptPromotionBase implements IExternalizable { 

     private var __initialized:Boolean = true; 
     private var __detachedState:String = null; 

     private var _bcFlag:String; 
     private var _countConstraintFlag:String; 
     private var _creationDate:Date; 
     private var _description:String; 
     private var _endPromoDate:Date; 
     private var _label:String; 
     private var _lastRunDate:Date; 
     private var _minCommFlag:String; 
     private var _minCommPeriod:Number; 
     private var _priority:Number; 
     private var _prorationFlag:String; 
     private var _shortDescription:String; 
     private var _sptCode:Number; 
     private var _sptCustomerPromotionHists:ListCollectionView; 
     private var _sptDependenciesForDepSptCode:ListCollectionView; 
     private var _sptDependenciesForSptCode:ListCollectionView; 
     private var _sptLoadDatas:ListCollectionView; 
     private var _sptMatrixRule:SptMatrixRule; 
     private var _sptProcess:SptProcess; 
     private var _sptProcessLogs:ListCollectionView; 
     private var _sptPromotionCriterias:ListCollectionView; 
     private var _sptPromotionMechanisms:ListCollectionView; 
     private var _sptPromotionParameters:ListCollectionView; 
     private var _sptQualifiedCustomers:ListCollectionView; 
     private var _sptStatus:SptStatus; 
     private var _sptStatusHists:ListCollectionView; 
     private var _startPromoDate:Date; 
     private var _username:String; 

     meta function isInitialized(name:String = null):Boolean { 
      if (!name) 
       return __initialized; 

      var property:* = this[name]; 
      return (
       (!(property is SptPromotion) || (property as SptPromotion).meta::isInitialized()) && 
       (!(property is IPersistentCollection) || (property as IPersistentCollection).isInitialized()) 
      ); 
     } 

     //setters and getters omitted 
     //........... 

     public function readExternal(input:IDataInput):void { 
      __initialized = input.readObject() as Boolean; 
      __detachedState = input.readObject() as String; 
      if (meta::isInitialized()) { 
       _bcFlag = input.readObject() as String; 
       _countConstraintFlag = input.readObject() as String; 
       _creationDate = input.readObject() as Date; 
       _description = input.readObject() as String; 
       _endPromoDate = input.readObject() as Date; 
       _label = input.readObject() as String; 
       _lastRunDate = input.readObject() as Date; 
       _minCommFlag = input.readObject() as String; 
       _minCommPeriod = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); 
       _priority = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); 
       _prorationFlag = input.readObject() as String; 
       _shortDescription = input.readObject() as String; 
       _sptCode = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); 
       _sptCustomerPromotionHists = input.readObject() as ListCollectionView; 
       _sptDependenciesForDepSptCode = input.readObject() as ListCollectionView; 
       _sptDependenciesForSptCode = input.readObject() as ListCollectionView; 
       _sptLoadDatas = input.readObject() as ListCollectionView; 
       _sptMatrixRule = input.readObject() as SptMatrixRule; 
       _sptProcess = input.readObject() as SptProcess; 
       _sptProcessLogs = input.readObject() as ListCollectionView; 
       _sptPromotionCriterias = input.readObject() as ListCollectionView; 
       _sptPromotionMechanisms = input.readObject() as ListCollectionView; 
       _sptPromotionParameters = input.readObject() as ListCollectionView; 
       _sptQualifiedCustomers = input.readObject() as ListCollectionView; 
       _sptStatus = input.readObject() as SptStatus; 
       _sptStatusHists = input.readObject() as ListCollectionView; 
       _startPromoDate = input.readObject() as Date; 
       _username = input.readObject() as String; 
      } 
      else { 
       _sptCode = function(o:*):Number { return (o is Number ? o as Number : Number.NaN) } (input.readObject()); 
      } 
     } 

     public function writeExternal(output:IDataOutput):void { 
      output.writeObject(__initialized); 
      output.writeObject(__detachedState); 
      if (meta::isInitialized()) { 
       output.writeObject(_bcFlag); 
       output.writeObject(_countConstraintFlag); 
       output.writeObject(_creationDate); 
       output.writeObject(_description); 
       output.writeObject(_endPromoDate); 
       output.writeObject(_label); 
       output.writeObject(_lastRunDate); 
       output.writeObject(_minCommFlag); 
       output.writeObject(_minCommPeriod); 
       output.writeObject(_priority); 
       output.writeObject(_prorationFlag); 
       output.writeObject(_shortDescription); 
       output.writeObject(_sptCode); 
       output.writeObject(_sptCustomerPromotionHists); 
       output.writeObject(_sptDependenciesForDepSptCode); 
       output.writeObject(_sptDependenciesForSptCode); 
       output.writeObject(_sptLoadDatas); 
       output.writeObject(_sptMatrixRule); 
       output.writeObject(_sptProcess); 
       output.writeObject(_sptProcessLogs); 
       output.writeObject(_sptPromotionCriterias); 
       output.writeObject(_sptPromotionMechanisms); 
       output.writeObject(_sptPromotionParameters); 
       output.writeObject(_sptQualifiedCustomers); 
       output.writeObject(_sptStatus); 
       output.writeObject(_sptStatusHists); 
       output.writeObject(_startPromoDate); 
       output.writeObject(_username); 
      } 
      else { 
       output.writeObject(_sptCode); 
      } 
     } 
    } 
} 

請任何幫助?在此先感謝:)

+0

如果我不得不猜測,自定義命名空間「元」是問題。但是,由於您的AS3類沒有公共變量,你到底希望轉移什麼?通常,AMF對象轉換隻是將一個對象上的公共屬性從一端傳遞到另一端。 – JeffryHouser 2011-03-19 16:59:29

+0

看起來它可能是您在其中一個列表中獲得的對象之一。看起來解串器已經降低了幾個級別。您在集合中獲得的所有對象是否可以serialisable? – 2011-03-19 17:07:32

回答

1

從您的例外......

Caused by: org.granite.messaging.amf.io.convert.NoConverterFoundException: 
Cannot convert: [email protected] 
to: java.util.Set<com.xpress.spt.beans.SptStatusHist> 

...我猜你有SptStatusSet<SptStatusHist>之間的衝突類型。

3

我有這樣的問題。 在我的情況下,它使用模塊時發生。

所以我需要在我的主應用程序中預先加載特定的類。

在Main.mxml:

private var loadClasses:Array = [Funcionario, Cliente, Projeto]; 
1

我們有這個問題太有枚舉。由最近升級的花崗岩解決。這取決於你把花崗岩罐子放在哪裏。如果在jboss/server/default/lib中,你可能會有這個錯誤。如果你的項目中不應該發生granite.jar。無論如何做花崗岩罐新鮮更新...