Java AMF/JAX-RS问题(一些是一般性的,一些是具体的)
如果有任何错误,请原谅我——我对Java完全陌生。我的任务是为即将到来的Facebook游戏设置客户端/服务器架构。在服务器端,我有:Java AMF/JAX-RS问题(一些是一般性的,一些是具体的),java,apache-flex,jax-ws,jax-rs,enunciate,Java,Apache Flex,Jax Ws,Jax Rs,Enunciate,如果有任何错误,请原谅我——我对Java完全陌生。我的任务是为即将到来的Facebook游戏设置客户端/服务器架构。在服务器端,我有: 爪哇 雄猫 放松 火焰 阐明 所有人都和马文在一起。我可以用@Path()注释RESTful端点,当我在浏览器中点击它们时,它们将吐出在AMF中序列化的对象。到现在为止,一直都还不错。现在我需要在客户端/Flex端使用这些端点。Enounciate已经为我在Java中用@XmlRootElement注释的类型生成了文件,我可以在AS3代码中使用这些类型。问题
- 爪哇
- 雄猫
- 放松
- 火焰
- 阐明
function resourceRetrieved(event:Event):void {
var stream:URLStream = URLStream( event.target );
var resource:SomeJavaClass = ( stream.readObject() as SomeJavaClass );
lblResult.text = resource.message;
}
var request:URLRequest = new URLRequest("http://localhost:8080/rest/somefunc");
request.method = URLRequestMethod.GET;
var variables:URLVariables = new URLVariables();
variables.message = "This is my test string!";
request.data = variables;
var resourceStream:URLStream = new URLStream();
resourceStream.addEventListener("complete", resourceRetrieved)
resourceStream.load(request);
function onSomeFuncEvent(event:SomeJavaServiceEvent):void {
lblResult.text = event.result;
}
var service:SomeJavaService = new SomeJavaService();
service.addEventListener( SomeJavaServiceEvent.SomeFuncEvent, onSomeFuncEvent );
service.someFunc("This is my test string!");
丑陋-我必须手工写这篇文章,以获得强打字的好处。然而!我在深入研究源代码时注意到,如果使用@WebService和@WebMethod标记而不是@Path,那么我的服务类的优秀强类型AS3包装器将由Enounciate生成,以及相应的AS3事件。它还生成正确的services-config.xml!然后,用法变成如下所示:
function resourceRetrieved(event:Event):void {
var stream:URLStream = URLStream( event.target );
var resource:SomeJavaClass = ( stream.readObject() as SomeJavaClass );
lblResult.text = resource.message;
}
var request:URLRequest = new URLRequest("http://localhost:8080/rest/somefunc");
request.method = URLRequestMethod.GET;
var variables:URLVariables = new URLVariables();
variables.message = "This is my test string!";
request.data = variables;
var resourceStream:URLStream = new URLStream();
resourceStream.addEventListener("complete", resourceRetrieved)
resourceStream.load(request);
function onSomeFuncEvent(event:SomeJavaServiceEvent):void {
lblResult.text = event.result;
}
var service:SomeJavaService = new SomeJavaService();
service.addEventListener( SomeJavaServiceEvent.SomeFuncEvent, onSomeFuncEvent );
service.someFunc("This is my test string!");
正如您所看到的,生成代码的使用者不需要知道端点在哪里,从事件返回什么类型,等等。我想走这条路,因为我相信这样会更容易维护。这就引出了我的问题:
BlazeDS和GraniteDS是我能想到的唯一两个。在我看来,它们都很好,所以请随意挑选。感谢您提供的信息丰富的回复。在您回复之前,我做了更多的挖掘,并决定将JAX-WS与AMF结合使用是更好的方法。我很高兴你的建议也一样。BlazeDS是为RPC而不是REST设计的。在Flex中,您可以使用REST服务和基于WSDL的服务,而无需BlazeDS或GraniteDS等中间件解决方案。如果您想用AMF序列化服务调用的结果和参数,您需要在服务器端使用BlazeDS—毕竟AMF是最优化的序列化协议之一。