BlazeDS没有将Scala类转换为AMF

时间:2012-02-02 11:54:57

标签: scala blazeds

我是Scala和BlazeDS的新手。我正在尝试编写一个非常简单的应用程序,其中flex将调用名为getBook的方法,而Scala服务返回Book对象。没有涉及数据库。我所做的就是我正在创建一个新的Book of Book并返回它。

我的问题是我没有在Flex上获得有效的Book对象作为响应。我在这里包含了代码。

Scala Book(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 Side Book(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);
        }

    }
}

远程-config.xml中

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

我已将scala类放在tomcat / webapps / blazeds / WEB-INF / classes下(我正在使用blazeds交钥匙服务器)

请帮帮我。

1 个答案:

答案 0 :(得分:2)

确定。这是我出错的地方。我很抱歉BlazeDS。我什么都不责备你。

这就是我在Scala中定义我的Book类的方式(错误的方式)

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交谈。