Spring + JAX-WS + Flex 简单实现示例

最近在考虑java服务端与Flex客户端如何更加方便的交互。

首先想到的是AMF,其次是webservice。相比之下,webservice应用更加广泛。故在此先记录webservice的思路。有关AMF的研究将在后面的文章中记录。

为了保证代码简洁,这里使用sun 推出的JAX-WS实现方案。实现与flex客户端的上传与下载功能。

首先是webservice接口声明,注意:多个参数的情况下一定要加WebParam注解,否则只能识别第一个参数,其他参数将被忽略。

@WebService
public interface ITestService {
    
    @WebMethod
    public String upload(
            @WebParam String filename,
            @WebParam byte[] bytes);
    
    @WebMethod
    public byte[] download(String filename);
}

下面是接口实现代码,实现两个功能,处理上传二进制数据并保存,读取文件并返回。

@WebService(serviceName="test")
@Service
public class TestService implements ITestService {   
    @Override
    public String upload(String filename, byte[] bytes) {               
        FileOutputStream fos = null;
        try {
            File f = new File("/tmp",filename);
            System.out.println(f.getAbsolutePath());
            fos = new FileOutputStream(f);
            fos.write(bytes);
        }  catch (IOException e) {            
            e.printStackTrace();
        } finally{
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {                
                    e.printStackTrace();
                }
            }            
        }
        return filename;
    }
    @Override
    public byte[] download(String filename) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(new File("/tmp",filename));
            byte[] bytes = new byte[1024];
            int len = -1;
            while((len = fis.read(bytes))!=-1){
                bos.write(bytes, 0, len);
            }            
        } catch (IOException e) {            
            e.printStackTrace();
        } finally{
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {                    
                    e.printStackTrace();
                }
            }
        }
        return bos.toByteArray();
    }

}

然后是与spring的集成,spring会自动帮我们扫描带有WebService注解的类并发布为服务。此处的IP设为0.0.0.0代表服务端的任何IP都能访问

<bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter">
     <property name="baseAddress" value="http://0.0.0.0:9080/ws/" />
</bean>

启动服务成功后,在浏览器里输入http://localhost:9080/ws/test?wsdl 进行验证

下面是Flex客户端的调用,也一并记录下来。

public class TestWsdl 
{
        private var ws:WebService = new WebService;        
        
        public function TestWsdl(url:String) 
        {
            ws.loadWSDL(url);
        }       
        
        // 提示用户选择本地文件,并上传
        public function upload():void {
            var fr:FileReference = new FileReference;
            fr.addEventListener(Event.COMPLETE, function():void {                         
                invoke("upload", function(rs:String):void {
                    trace(rs," uploaded!");
                }, fr.name,fr.data);
            } );
            fr.addEventListener(Event.SELECT, function():void {                
                fr.load();                
            } );
            fr.browse();
        }
        
        // 将文件下载到本地。此操作会弹出下载框
        public function download():void {
            var fr:FileReference = new FileReference;
            var filename:String = "test.txt";
            invoke("download", function(rs:ByteArray):void {
                fr.save(rs, filename);
            },filename );
        }
        
        // 客户端调用的通用入口
        public function invoke(methodName:String, callback:Function, ...args):void {
            ws.addEventListener(ResultEvent.RESULT, function(re:ResultEvent):void {
                callback && callback(re.result);
                ws.removeEventListener(ResultEvent.RESULT, arguments.callee);
            } );
            ws.addEventListener(FaultEvent.FAULT, function(fe:FaultEvent):void {
                trace(fe.fault);
                ws.removeEventListener(FaultEvent.FAULT, arguments.callee);
            } );
            var op:AbstractOperation = ws.getOperation(methodName);
            op.send.apply(op, args);
        }
}

最后是Flex端的调用代码

private var client:TestWsdl = new TestWsdl("http://localhost:9080/ws/test?wsdl");                
        
private function upload():void {
    client.upload();
}
        
private function download():void {
    client.download();
}

至此,整个过程就完成了,当然这仅仅是一个开始,还有验证等一些更加复杂的操作。研究成熟以后再补上。

时间: 2024-10-03 00:34:13

Spring + JAX-WS + Flex 简单实现示例的相关文章

【java开发系列】—— spring简单入门示例

1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转\依赖注入,和AOP面向切面编程. 1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字. 控制反转意思就是说,当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring). 依赖注入意思就是说,spring主动创建被调用类的对象,然后把这个对象注入到我们

Springmvc整合tiles框架简单入门示例(maven)

Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积分下载): http://download.csdn.net/detail/zhangbing2434/9435460(这里用的是Idea,eclipse,导入的时候可能会有些差异) 1.tiles依赖的jar包:     maven代码: <dependency> <groupId>

hydra简单使用示例

本内容为网上收集整理,仅作为备忘!! hydra简单使用示例: 破解https: # hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https 破解teamspeak: # hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak 破解cisco: # hydra -P pass.txt 10.36.16.18 cisco # hydra -m cloud -P pass.txt 10.36.16.18 c

Ext简单demo示例

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <titl

Salesforce用Apex判断Role Hierarchy的简单代码示例

由于role不同于Profile,带有阶层性质,所以有一些自定义功能要依赖于这种阶层的设定.这样就涉及到role hierarchy的判断问题. 我是一个绝懒之人,所以去网上搜了一下,能找到的方案都或多或少有些缺陷 . 我所提供的方案也是如此,但是想比于浪费太多SOQL查询次数来讲,role的数量不超过50000条已经是足够好了.// 这里Update一下,其实根本不会有那么多的Role,因为默认500,向Salesforce技术支持提票才能达到10000. Talk is cheap, sho

Spring security oauth2最简单入门环境搭建

关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+spring mvc+spring security+Oauth2基本姿势,如果前面都没看过请及时关闭本网页. 我有信心我的这个blog应该是迄今为止使用spring security oauth2最简单的hello world app介绍了,如果你下下来附件源码还看不懂,请留言.. 其他能搜到的如h

数组的简单使用示例

/* ============================================================================ Name : TestArray.c Author : lf Version : Copyright : Your copyright notice Description : 数组的简单使用示例 =======================================================================

SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法

首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml配置文件.我现在使用的是spring boot ,没有了xml文件配置就方便多了.我同样尝试了两种方式,也都是简单的查询,需要更复杂的查询,还需要我研究研究.往下看,需要先配置springboot的开发环境,需要大致了解springboot,这里可以看下面两篇文章: springboot 项目新建 springboot

Spring温习(1)--最基础的示例

Spring温习(1)--最基础的示例 博客分类: 框架-Spring专栏 SpringXMLBeanWebDAO 从现在开始,我将从Spring为起点,逐步复习几大框架各方面的知识,以便今后查看使用 第一各Spring示例 必须包:spring-framework-2.5.6\dist\spring.jar spring-framework-2.5.6\lib\jakarta-commons\common-logging.jar 为了方便测试还需要:spring-framework-2.5.6