2012-02-02 47 views
0

我是Scala和BlazeDS的新手。我试图编写一个非常简单的应用程序,其中flex将调用一个名为getBook的方法,并且Scala服务返回一个Book对象。没有涉及数据库。我所做的只是创建一个新的Book实例并将其返回。BlazeDS不会将Scala类转换为AMF

我的问题是,我没有得到Flex上的有效书籍对象作为响应。我在这里包括代码。

Scala的书(scalaDemo.vo.Book.scala)

package scalaDemo.vo 

case class Book (id:Long,name:String,authors:String) 

Scala的服务(scalaDemo.GreetingService.scala)

package scalaDemo 
    import scalaDemo.vo.Book 

    class GreetingService { 

     def sayHello = "Hello, World!" 

     def getBook (name:String):Book = new Book (10,name,"author") 
    } 

Flex端书(vo.Book.as)

package vo 
{ 
     [RemoteClass(alias="scalaDemo.vo.Book")] 
     public class Book 
     { 
       public var id:Number; 
       public var name:String; 
       public var authors:String; 
     } 
} 

GreetingService.as

package services 
{ 
    import mx.rpc.AsyncResponder; 
    import mx.rpc.AsyncToken; 
    import mx.rpc.remoting.RemoteObject; 

    public class GreetingService 
    { 
     protected var ro : RemoteObject = new RemoteObject ("greetingService"); 

     public function sayHello (responder:AsyncResponder) : void { 
      var token : AsyncToken = ro.sayHello(); 

      token.addResponder(responder); 
     } 

     public function getBook (name:String,responder:AsyncResponder) : void { 
      var token : AsyncToken = ro.getBook(name); 

      token.addResponder(responder); 
     } 

    } 
} 

的remoting-config.xml中

<destination id="greetingService"> 
    <properties> 
     <source>scalaDemo.GreetingService</source> 
     <scope>application</scope> 
    </properties> 
</destination> 

我已经把tomcat下/ webapps /目录BlazeDS的/ WEB-INF/classes中(我使用BlazeDS的交钥匙服务器)

请帮我Scala类。

+0

你得到了什么_do_?请提供更多关于当您尝试运行时会发生什么的信息。 – 2012-02-02 14:39:32

+0

它发回一个vo.Book对象,id = Nan,authors = Null,name = Null – Jijo 2012-02-02 18:02:56

回答

2

好的。这是我出错的地方。我很抱歉BlazeDS。我没有责怪你。

这是我如何定义我的书类在斯卡拉(错误的方式)

package scalaDemo.vo 
case class Book (id:Long,name:String,authors:String) 

对于要由我们需要确保的两件事情BlazeDS的序列化Scala的对象。

  • 类的每个属性应该通过注释@BeanProperty
  • 类的每个属性应申报的前面为var

这里是我在我的问题提到的scalaDemo.Book的正确定义。

package scalaDemo.vo 
import scala.reflect.BeanProperty 

case class Book (
    @BeanProperty 
    var id:Long, 
    @BeanProperty 
    var name:String, 
    @BeanProperty 
    var authors:String) 

Daniel C. Sorbal感谢您的关注。现在我的下一个任务是让Hibernate和Scala交谈。