挠痒痒的专栏

彪悍的人生不需要解释

用户操作
[即时聊天] [发私信] [加为好友]
挠痒痒ID:chnic
1432次访问,排名2万外,好友3人,关注者7人。
彪悍的人生不需要解释
chnic的文章
原创 8 篇
翻译 0 篇
转载 0 篇
评论 4 篇
挠痒痒的公告
写Blog主要为了沉淀一下自己的所学。这里的博文都是从我的另一博客copy来的。http://chnic.javaeye.com
最近评论
yong_shang808808:D:\jboss-4.2.1.GA\server\default\deploy\axisfile.war\WEB-INF>java org.apache.ax
is.client.AdminClient deploy.wsdd
Processing file deploy.wsdd
Exception: AxisFault
faultCode……
chnic:不好意思,源代码blog上面都有的。
你可以自己copy. 我基本上是在一份源代码上做的所有东西。
wsdd 还有一些相关文件早就改的面目全非了。
你照着我的步骤一步一步来 不会出错的。
singlesword2007:写的不错!深入而且易懂,期待下一篇!
allisgone:可以发一个完整的例子给我吗?发到邮箱里,谢了
文章分类
收藏
    相册
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 利用AXIS开发Webservice(五) —— 如何传递文件收藏

     | 旧一篇: 利用AXIS开发Webservice(四) —— 如何抛出自定义异常

    趁着放假来更新一下博客,今天来介绍一下如何利用AXIS来传递文件。因为这已经是关于AXIS的第五篇文章了,所以讲的会比较快,有不明白的朋友可以翻翻前面的文章来参考一下。

    直入主题,我们先来编写服务器代码
    package com.chnic.webservice;

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;

    import javax.activation.DataHandler;

    public class FileTransfer {

        
    public FileTransfer(){
            
        }

        
        
    public String transfer(DataHandler handler, String fileName){
            String fullPath 
    = "C:/" + fileName;
            File file 
    = new File(fullPath);
            
    int flag = 0;
            
    if(handler == null)
                
    return "failure";
            
    if(fileName == null)
                
    return "failure";
            
            
    try {
                InputStream input 
    = handler.getInputStream();
                FileOutputStream fos 
    = new FileOutputStream(file);
                
    byte[] buffer=new byte[4096];
                
    while((flag=input.read(buffer))!=-1){
                    fos.write(buffer,
    0,flag);
                }

                input.close();
                fos.close();
            }
     catch (IOException e) {
                e.printStackTrace();
                
    return "failure";
            }

            
    return "Success";
        }

    }

    transfer方法是service端接受客户端传来文件的方法,方法里面有两个参数,第一个是DataHandler。这个类可以看成是一个传 送器,通过专门的序列化类将文件序列化。这个类的具体方法可以查一下SUN的API文档。第二个参数是一个String字符串,参数名就可以看出来,传递 的是文件名。

    这个方法从DataHandler得到一个输入流,从这个流里读出数据然后写到一个新文件里。这些都是一些基本的Java I/O操作。应该不会太难。服务器代码编写完之后下来是deploy.wsdd发布文件。

    <deployment xmlns="http://xml.apache.org/axis/wsdd/" 
        xmlns:java
    ="http://xml.apache.org/axis/wsdd/providers/java">
        
        
    <service name="FileTransfer" provider="java:RPC">
            
    <parameter name="className" value="com.chnic.webservice.FileTransfer"/>
            
    <parameter name="allowedMethods" value="transfer"/>
            
    <parameter name="scope" value="session"/>
            
            
    <operation name="transfer"
                       qname
    ="operNS:transfer"
                       xmlns:operNS
    ="file"
                       returnQName
    ="fileSend" 
                       returnType
    ="rtns:string" 
                       xmlns:rtns
    ="http://www.w3.org/2001/XMLSchema">
                       
                  
    <parameter name="handler" type="tns:string" 
                             xmlns:tns
    ="http://www.w3.org/2001/XMLSchema"/>
                  
    <parameter name="fileName" type="myns:DataHandler" 
                             xmlns:tns
    ="http://www.w3.org/2001/XMLSchema"/>
            
    </operation>
            
            
    <typeMapping qname="myns:DataHandler" xmlns:myns="http://fileTransfer.sample"
              languageSpecificType
    ="java:javax.activation.DataHandler"
              serializer
    ="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
              deserializer
    ="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
              encodingStyle
    ="http://schemas.xmlsoap.org/soap/encoding/"/>
        
    </service>
    </deployment>

    这个配置文件也不多介绍了,前几篇关于这几个元素的介绍已经比较清楚了,在这里有必要提一下 org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory 这个类。前面序列化对象的时候提到序列化不同对象的时候需要不同的工厂类,同样在序列化文件的时候就要用这个工厂类。编写完一切,启动tomcat然后发 布服务。

    服务器端的代码已经编写完成了,现在轮到客户端代码。因为是个简单的sample,所以做的事情也比较简单就是把C盘根目录上的一个文件通过webwervice储存到C盘,当然文件名要用另外一个。下面是客户端代码。

            String fileName = "C:/sample.txt";
            DataHandler dh
    =new DataHandler(new FileDataSource(fileName));
            String endpoint
    ="http://localhost:8080/axis/services/FileTransfer";
            
            Service service
    =new Service();
            Call call
    =(Call) service.createCall();
            call.setTargetEndpointAddress(
    new java.net.URL(endpoint));
            call.setOperationName(
    new QName(endpoint, "transfer"));
            QName qnameattachment
    =new QName("http://fileTransfer.sample",
                    
    "myns:DataHandler");
            
            call.registerTypeMapping(dh.getClass(),
                    qnameattachment,
                    JAFDataHandlerSerializerFactory.
    class,
                    JAFDataHandlerDeserializerFactory.
    class);
            
            call.addParameter(
    "s1",qnameattachment,ParameterMode.IN);
            call.addParameter(
    "s2",XMLType.XSD_STRING,ParameterMode.IN);
            call.setReturnClass(String.
    class);
            String ret
    =(String)call.invoke(new Object[] {dh,"aaaaaa.txt"});
            System.out.println(
    "transfer success....");
            System.out.println(ret);

    客户端通过DataHandler取得源文件,之后注册DataHandler,注册两个输入参数和一个输出参数。之后传入相关的参数。新文件也在C盘下面名字为aaaaa.txt。运行测试代,控制台打出两句话。

    transfer success....
    Success

    说明测试成功,到C盘上也可以找到aaaaa.txt这个文件。

     

    发表于 @ 2008年04月08日 15:28:00|评论(loading...)|编辑

     | 旧一篇: 利用AXIS开发Webservice(四) —— 如何抛出自定义异常

    评论

    #yong_shang808808 发表于2008-12-02 15:37:12  IP: 125.34.48.*
    D:\jboss-4.2.1.GA\server\default\deploy\axisfile.war\WEB-INF>java org.apache.ax
    is.client.AdminClient deploy.wsdd
    Processing file deploy.wsdd
    Exception: AxisFault
    faultCode: {http://xml.apache.org/axis/}HTTP
    faultSubcode:
    faultString: (404)/axis/services/AdminService
    faultActor:
    faultNode:
    faultDetail:
    {}:return code: 404
    &lt;html&gt;&lt;head&gt;&lt;title&gt;JBossWeb/2.0.0.GA - Error report&lt;/title&
    gt;&lt;style&gt;&lt;!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;backg
    round-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;col
    or:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,
    sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-fami
    ly:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:T
    ahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tah
    oma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : bla
    ck;}A.name {color : black;}HR {color : #525D76;}--&gt;&lt;/style&gt; &lt;/head&g
    t;&lt;body&gt;&lt;h1&gt;HTTP Status 404 - /axis/services/AdminService&lt;/h1&gt;
    &lt;HR size=&quot;1&quot; noshade=&quot;noshade&quot;&gt;&lt;p&gt;&lt;b&gt;type&
    lt;/b&gt; Status rep
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 挠痒痒