【问题标题】:BlazeDS is not converting Scala classes to AMFBlazeDS 没有将 Scala 类转换为 AMF
【发布时间】:2012-02-02 11:54:56
【问题描述】:

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

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

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 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);
        }

    }
}

远程配置.xml

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

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

请帮帮我。

【问题讨论】:

  • 你得到了什么?请提供更多信息,了解当您尝试运行它时会发生什么。
  • 它发回一个 id=Nan,authors=Null,name=Null 的 vo.Book 对象

标签: scala blazeds


【解决方案1】:

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

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

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 对话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 2019-10-09
    • 2016-07-27
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 2011-11-12
    相关资源
    最近更新 更多