BlazeDS не конвертирует классы Scala в AMF - PullRequest
0 голосов
/ 02 февраля 2012

Я новичок в Scala и BlazeDS. Я пытаюсь написать очень простое приложение, в котором flex вызывает метод getBook, а служба Scala возвращает объект Book. Там нет базы данных. Все, что я делаю, это то, что я создаю новый Экземпляр Книги и возвращаю его.

Моя проблема в том, что я не получаю действительный объект Book на 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")
    }

Гибкая боковая книга (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 1014 *

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

    }
}
* * 1016 Remoting-config.xml * * 1017
<destination id="greetingService">
    <properties>
        <source>scalaDemo.GreetingService</source>
        <scope>application</scope>
    </properties>
</destination>

Я поместил классы scala в классы tomcat / webapps / blazeds / WEB-INF / (я использую сервер под ключ blazeds)

Пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 04 февраля 2012

Хорошо.Вот где я ошибся.Прости BlazeDS.Я обвинил вас ни за что.

Так я определил свой Класс Книги в Scala (неправильный способ)

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

Чтобы объект Scala был сериализован BlazeDS, нам нужно убедиться, чтоиз 2 вещей.

  • Каждому атрибуту класса должна предшествовать аннотация @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) 

Даниэль С. Сорбаль, спасибо вам за интерес.Теперь моей следующей задачей будет заставить Hibernate разговаривать со Scala.

...