用户操作
[即时聊天] [发私信] [加为好友]
曹翔ID:java_xiang
16221次访问,排名7304(1)好友1人,关注者2
阿翔编程学
java_xiang的文章
原创 43 篇
翻译 0 篇
转载 7 篇
评论 8 篇
曹翔的公告
WebService,Java,J2EE 任何个人和单位均可免费复制,拷贝,复制时请注明出处。但如需商业用途或者使用,修改其中的全部或者部分代码,图片。请先和作者联系.
最近评论
asdf:很好,谢谢分享
xiang:恩,好吧,那句话怎么说的,反正就是帮人帮到底的意思吧。
丫头:这个多代码,别人找都难找,想想起他改良的办法啦,帮人帮到底么。。。。
xunmenglin:义愤填庸了~~~~
xunmenglin:我顶阿
楼主说得好啊
文章分类
收藏
    相册
    阿翔的相册
    Blog链接
    傻丫头的Blog
    冰冻小子的Blog
    大中华办公软件在线
    我的CSDN博客
    我的新浪Blog
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 阿翔编程学-Web Service详细解析及使用方法(完整版)包括XFire Axis CXF 安全 性能测试收藏

    新一篇: 阿翔编程学-XFire | 旧一篇: 阿翔编程学-Web Service详细解析及使用方法(全) 包括XFire、Axis、CXF 修改版(二)

     
    Web Service详细解析及使用方法   
      
     
     
    XFire
    XFire简介
           它拥有一个轻量级的信息处理模块,通过STAX来与SOAP信息相结合。提供了一个工作在web services下的简单API,支持POJOschema开发。XFire CodeHaus 推出的下一代的 Java SOAP框架,它构建了 POJO SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。通过提供简单的API和支持标准协议,可以很方便的开发面向服务的程序。内建在STAX基于流的XML解析引擎的基础上,XFire拥有很高的性能。
    XFire特性
           1)支持重要的web服务标准,如SOAPWSDLWS-IWS-AddressingWS-Security基本概要等
           2)高性能的SOAP栈设计
           3)可插拔的绑定,支持POJOXMLBeansJAXB1.1JAXB2castor
           4) jsr181规范
           5)支持多种传输协议:HTTPJMSXMPPIn-JVM
           6)可嵌入式的API
           7) JBI支持
           8)客户端和服务器端的存根创建工具
           9) JAX-WS的早期支持
    XFire使用
           首先打开IDE,创建一个普通的Java工程,将XFire所需要的jar加入到工程的类库引用中。创建一个简单的Java文件,这个文件只有一个名为sayHello的成员方法。
           //包名
    package net.ruixin.webservicedemo;
    /**
         * 服务实现类的实现
         * @author caoxiang
     */
    public class HelloWorldServiceImpl implements IHelloWorldService {
         /**
            * 返回名称的方法
            * @param name 名称
            */
        public String sayHello(String name){
            return "您好,"+name;
        }
    }
           //包名
    package net.ruixin.webservicedemo;
    /**
         * 服务接口类的创建
         * @author caoxiang
     */
    public interface IHelloWorldService {
            /**
             * 返回名称的方法
             * @param name 名称
             * @return 返回值
             */
            public String sayHello(String name);
    }
    配置services.xml
    <beans xmlns="http://xfire.codehaus.org/config/1.0">
    <service>
                   <name>HelloWorldService</name>
                  <serviceClass>
                       net.ruixin.webservicedemo.IHelloWorldService
                  </serviceClass>
                   <implementationClass>
                       net.ruixin.webservicedemo.HelloWorldServiceImpl
                  </implementationClass>
                   <scope>application</scope>
             </service>
    </beans>
     
        标签说明:
    WebService的服务名
    <name>HelloWorldService</name>
    WebService的服务接口类<serviceClass>net.ruixin.webservicedemo.IHelloWorldService
    </serviceClass>
    WebService的服务接口实现类<implementationClass>net.ruixin.webservicedemo.HelloWorldServiceImpl</implementationClass>
    WebService的服务有效范围
    <scope>application</scope>
           //包名
    package net.ruixin.webservicedemo;
    import java.net.MalformedURLException;
    import org.codehaus.xfire.XFireFactory;
    import org.codehaus.xfire.client.XFireProxyFactory;
    import org.codehaus.xfire.service.Service;
    import org.codehaus.xfire.service.binding.ObjectServiceFactory;
    /**
         * 测试服务类的创建
         * @author caoxiang
     */
    public class HelloWorldClient {
           /**
             * 测试主程序
             * @param args
             * @throws Exception
        */
            public static void main(String args[]) {
               //通过接口类创建Service对象
                 Service srvcModel = new ObjectServiceFactory()
                     .create(IHelloWorldService.class);
               //通过XFire的工厂类创建工厂对象
    XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
    //访问的地址
    String helloWorldURL="http://localhost:5200/xfire_sample/services/HelloWorldService";
    //异常处理
                 try {
                  //创建服务对象
    IHelloWorldService srvc = (IHelloWorldService) factory.create(srvcModel, helloWorldURL);
    //调用服务中的方法,并显示其结果
                     System.out.print(srvc.sayHello("dennis"));
               //异常处理
                 } catch (MalformedURLException e) {
                  //显示错误信息
                     e.printStackTrace();
                 }
    }
    }
           XFireAxis以及其他的一些商业产品都提供了wsdl文档创建客户端代码的工具。这里XFire提供的wsgen工具来创建客户端的访问代码。
           WsgenXFire提供的一个ant task,task的申明如下:
           <target name="Wsgen">
    <taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="build.classpath" />
        <wsgen outputDirectory="build.classpath" wsdl="http://localhost:portno/xfire_sample/services/HelloWorldService?wsdl" package="client" />
    </target>
    outputDirectory属性定义了创建代码的存放路径,wsdlweb服务的wsdl文件,package代表创建的代码的package。还可以通过binding属性指定bind类型,jaxb或者是xmlbeans
    这样就会在outputDirectory属性指定的目录下创建多个Java文件,这些文件提供了访问web服务的方法。
    XFire框架中,我们有两种方式将 POJO 发布成 Web 服务:
    方式1:直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布
    <beans xmlns="http://xfire.codehaus.org/config/1.0">
    <service>
            <name>HelloWorldService</name>
            <serviceClass>
                net.rubyeye.webservicedemo.IHelloWorldService
            </serviceClass>
            <implementationClass>
                net.rubyeye.webservicedemo.HelloWorldServiceImpl
            </implementationClass>
            <style>wrapped</style>
            <use>literal</use>
            <scope>application</scope>
    </service>
     
    </beans>
    方式2:基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务;
     
    package com.test;
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    @WebService(name="Hello",serviceName="Hello",
           targetNamespace="http://www.oksonic.cn/xfire")
    public class Hello {
            @WebMethod
            @WebResult
            public String getName(@WebParam String name){
               return "Hello world " + name;
            }
    }
    <beans xmlns="http://xfire.codehaus.org/config/1.0">
        <service>
           <serviceClass>com.test.Hello</serviceClass>
           <serviceFactory>jsr181</serviceFactory>
        </service>
    </beans>
    XFire总结
           XFire做为Java SOAP的开发框架,具备一定的优越性,比如他能够快速的开发,能够比较容易的部署到服务器上,做为soap4j的下一代开源框架,XFire不但拥有了上一代的优势,而且在其优势的基础上也进行了一定的扩展,增加了许多的扩展,对于webservice的开发,XFire做到了可以快速开发,快速部署,在服务器方面,XFire的性能比较优越,相比其他的web service框架,XFire的性能也是比较优越的。XFire在发布之后,如果客户端需要使用已经发布的web service,那么他就必须通过服务端程序生成客户端代码或者将服务端的接口类写入到客户端,在这方面Axis做得比XFire要好,因为Axis是面向wsdl的,针对的是服务的描叙,而并非是服务的本质(类和接口),对于使用者来说XFire开发简单,部署方便,性能优越这些都是XFire作为web service的优势所在,正如敏捷式一书的作者,这么说过,作为开发效率和速度是最重要的。
    Axis
    Axis简介
    AxisApache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本,C++的版本正在开发之中。Axis v1.1软件包可以从http://ws.apache.org/axis/dist/1_1/下载得到。
    但是Axis不仅仅是一个SOAP引擎,它还包括:
        1)
    一个独立运行的SOAP服务器
        2)
    、一个servlet引擎的插件,这个servlet引擎可以是Tomcat
        3)
    、对WSDL的扩展支持
        4)
    、一个将WSDL的描述生成JAVA类的工具
        5)
    、一些示例代码
        6)
    、还有一个监控TCP/IP包的工具
    SOAP简介
    SOAP是一个基于XML的用于应用程序之间通信数据编码的传输协议。最初由微软和Userland Software提出,随着不断地完善和改进,SOAP很快被业界广泛应用,目前完全发布版本是1.1。在其发展过程中,W3C XML标准工作小组积极促成SOAP成为一个真正的开放标准。在写作此文档之时,SOAP1.2草案已经发布,1.21.1中相对混乱的部分做了改进。SOAP被广泛作为新一代跨平台、跨语言分布计算Web Services的重要部分。
    Axis使用
    //包名
    package zpf;
    /**
      * 服务实现类的实现
      * @author caoxiang
    */
    public class SSOWebservice
    {
        /**
         登陆并得到用户信息
         */
        public boolean login(String loginid, String password) {
           //判断用户是否登陆成功的标记
           boolean ret = false;
           if (loginid.equals("caoxiang") && password.equals("caoxiang "))
               ret = true;
           else
               ret = false;
           //返回
           return ret;
        }
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <servlet>
           <servlet-name>XFireServlet</servlet-name>
           <servlet-class>
               org.codehaus.xfire.transport.http.XFireConfigurableServlet
           </servlet-class>
           <load-on-startup>0</load-on-startup>
        </servlet>
        <servlet-mapping>
           <servlet-name>XFireServlet</servlet-name>
           <url-pattern>/services/*</url-pattern>
        </servlet-mapping>
        <servlet>
           <servlet-name>AxisServlet</servlet-name>
           <servlet-class>
               org.apache.axis.transport.http.AxisServlet
           </servlet-class>
        </servlet>
        <servlet>
           <servlet-name>AdminServlet</servlet-name>
           <servlet-class>
               org.apache.axis.transport.http.AdminServlet
           </servlet-class>
           <load-on-startup>100</load-on-startup>
        </servlet>
        <servlet>
           <servlet-name>SOAPMonitorService</servlet-name>
           <servlet-class>
               org.apache.axis.monitor.SOAPMonitorService
            </servlet-class>
           <init-param>
               <param-name>SOAPMonitorPort</param-name>
               <param-value>5001</param-value>
           </init-param>
           <load-on-startup>100</load-on-startup>
        </servlet>
        <servlet-mapping>
           <servlet-name>AxisServlet</servlet-name>
           <url-pattern>/servlet/AxisServlet</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
           <servlet-name>AxisServlet</servlet-name>
           <url-pattern>*.jws</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
           <servlet-name>AxisServlet</servlet-name>
           <url-pattern>/services/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
           <servlet-name>SOAPMonitorService</servlet-name>
           <url-pattern>/SOAPMonitor</url-pattern>
        </servlet-mapping>
        <mime-mapping>
           <extension>wsdl</extension>
           <mime-type>text/xml</mime-type>
        </mime-mapping>
        <mime-mapping>
           <extension>xsd</extension>
           <mime-type>text/xml</mime-type>
        </mime-mapping>
    </web-app>
    <?xml version="1.0" encoding="gb2312"?>
    <deployment xmlns="http://xml.apache.org/axis/wsdd/"
        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
        <globalConfiguration>
           <parameter name="adminPassword" value="admin" />
           <parameter name="enableNamespacePrefixOptimization"
               value="true" />
           <parameter name="attachments.Directory"   value="D:\jakarta-tomcat-5.0.28\webapps\axis\WEB-INF\attachments" />
           <parameter name="disablePrettyXML" value="true" />
           <parameter name="attachments.implementation"
               value="org.apache.axis.attachments.AttachmentsImpl" />
           <parameter name="sendXsiTypes" value="true" />
           <parameter name="sendMultiRefs" value="true" />
           <parameter name="sendXMLDeclaration" value="true" />
           <requestFlow>
               <handler type="java:org.apache.axis.handlers.JWSHandler">
                  <parameter name="scope" value="session" />
               </handler>
               <handler type="java:org.apache.axis.handlers.JWSHandler">
                  <parameter name="scope" value="request" />
                  <parameter name="extension" value=".jwr" />
               </handler>
           </requestFlow>
        </globalConfiguration>
        <handler name="LocalResponder"
           type="java:org.apache.axis.transport.local.LocalResponder" />
        <handler name="URLMapper"
           type="java:org.apache.axis.handlers.http.URLMapper" />
       <handler name="Authenticate"    type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"     />
        <!-- 自定义服务开始 -->
        <!-- 单点登陆服务 add by Zhang.P.F -->
        <service name="SSOWebservice" provider="java:RPC">
           <parameter name="allowedMethods" value="*" />
           <parameter name="className" value="zpf.SSOWebservice" />
           <operation name="login" returnType="ns:boolean">
               <parameter name="loginid" type="ns:String" />
               <parameter name="password" type="ns:String" />
           </operation>
        </service>
        <!-- 自定义服务结束 -->
        <service name="AdminService" provider="java:MSG">
           <parameter name="allowedMethods" value="AdminService" />
           <parameter name="enableRemoteAdmin" value="false" />
       <parameter name="className" value="org.apache.axis.utils.Admin" />
           <namespace>http://xml.apache.org/axis/wsdd/</namespace>
           <namespace>http://xml.apache.org/axis/wsdd/</namespace>
        </service>
        <service name="Version" provider="java:RPC">
           <parameter name="allowedMethods" value="getVersion" />
           <parameter name="className" value="org.apache.axis.Version" />
        </service>
        <transport name="http">
           <requestFlow>
               <handler type="URLMapper" />
               <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
           </requestFlow>
           <parameter name="qs:list"
               value="org.apache.axis.transport.http.QSListHandler" />
           <parameter name="qs:wsdl"
               value="org.apache.axis.transport.http.QSWSDLHandler" />
           <parameter name="qs.list"
               value="org.apache.axis.transport.http.QSListHandler" />
           <parameter name="qs.method"
               value="org.apache.axis.transport.http.QSMethodHandler" />
           <parameter name="qs:method"
               value="org.apache.axis.transport.http.QSMethodHandler" />
           <parameter name="qs.wsdl"
               value="org.apache.axis.transport.http.QSWSDLHandler" />
        </transport>
        <transport name="local">
           <responseFlow>
               <handler type="LocalResponder" />
           </responseFlow>
        </transport>
    </deployment>
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import javax.xml.rpc.ParameterMode;
    /**
      * 客户端登陆类的实现
      * @author caoxiang
    */
    public class CallC
    {
    /**
        * 测试主程序
        * @param args
       * @throws Exception
    */
       public static void main(String [] args) throws Exception {
           try{
            //服务路径
               String endpoint = "http://localhost:5200/axis_sample/services/SSOWebservice";
            //用户名
               String user= new String("1");
            //
               String password=new String("2");
            //服务对象
               Service service = new Service();
            //调用服务的对象
               Call call = (Call) service.createCall();
               //设置目标服务
               call.setTargetEndpointAddress(new java.net.URL(endpoint));
            //设置调用的方法
               call.setOperationName("login");
              //设置参数
               call.addParameter("loginid", XMLType.XSD_STRING, ParameterMode.IN);
            //设置参数
               call.addParameter("password", XMLType.XSD_STRING, ParameterMode.IN);
               call.setReturnType(XMLType.XSD_BOOLEAN);
               //用于判断用户是否登陆的成功的标记
               Boolean bv = false;
            //判断服务对象是否为空
               if(call!=null) {
                  //调用服务端程序,并接收服务端的返回值
                     bv = (Boolean)call.invoke(new Object[] {user, password});
               }
            //如果登陆成功
               if(bv) {
                    System.out.println("用户登陆成功了" );
               } else {
                    System.out.println("用户登陆失败了" );
               }
           }
           //异常处理
           catch(Exception e){
            //显示错误
               e.printStackTrace();
           }
       }
    }  
           因为项目中可能会用到web service提供的文件下载与上传功能,下面就简单举例介绍Axis中是如何实现文件上传与下载的。
           ● 创建服务类
              package zpf;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
     
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
     
    import org.apache.log4j.Logger;
     
    public class FileService {
    static Logger logger = Logger.getLogger(FileService.class.getName());
     
            public static String Repository = "C://uploads";
     
            public String putFile(DataHandler dh, String name) {
              if (name == null)
                name = "test.tmp";
                 logger.debug("文件名为空,设置文件名");
              try {
                File dir = new File(Repository);
                  if (!dir.exists()) {
                   dir.mkdir();
                   logger.debug("附件存放目录为空,创建 uploads 目录");
                   }
                   InputStream input = dh.getInputStream();
                  FileOutputStream fos = new FileOutputStream(new File(dir, "aa.txt"));
                   byte[] buffer = new byte[1024 * 4];
                   int n = 0;
                   while ((n = input.read(buffer)) != -1) {
                     fos.write(buffer, 0, n);
                   }
                   input.close();
                   fos.close();
                } catch (IOException e) {
                   e.printStackTrace();
                }
                return name + "send OK";
              }
     
            public DataHandler[] getFile(String name) throws IOException {
           // File dir=new File(Repository);
           // if(!dir.exists())
           // dir.mkdir();
           // File data=new File(dir,name);
           // if(data.exists())
           //         return new DataHandler(new FileDataSource(data));
           // else
           //         return null;
           // }
           DataHandler ret[] = new DataHandler[1];
     
           java.io.File myFile = new java.io.File("C:\\00.txt");
           if (myFile.isFile() && myFile.canRead()) {
               String fname = myFile.getAbsoluteFile().getCanonicalPath();
               ret[0] = new DataHandler(new FileDataSource(fname));
           }
           return ret;
         }
     
    }
         部署描叙文件
    <service name="FileService" provider="java:RPC">
             <parameter name="className" value="zpf.FileService"/>
             <parameter name="allowedMethods" value="*"/>
     <operation name="getFile" returnQName="returnqname" returnType="ns1:DataHandler" xmlns:SchemaNS="http://www.w3.org/2001/XMlSchema">
              <parameter name="name" type="SchemaNS:string"/>
              </operation>
              <operation name="putFile" returnQName="returnqname" returnType="ns1:DataHandler" xmlns:SchemaNS="http://www.w3.org/2001/XMlSchema">
              <parameter name="dh" type="ns1:DataHandler"/>
              <parameter name="name" type="SchemaNS:string"/>
              </operation>
    </service>
    服务端代码
    package zpf;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.InputStreamReader;
     
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
    import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
     
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
     
    public class CallFileService {
     
               private String fileName;
     
               public static void main(String[] args) {
                  CallFileService.doPut("C:\\00.txt");
               }
     
            //文件上传
     
            public void PutFile(String fileName) {
               this.fileName = fileName;
            }
     
            public boolean doPut() {
               return doPut(fileName);
            }
     
            public static boolean doPut(String fileName) {
               String name = fileName;
               try {
    String endpoint = "http://localhost:5200/axis_sample/services/FileService";
               Service service = new Service();
               Call call = (Call) service.createCall();
               DataHandler dh = new DataHandler(new FileDataSource(fileName));
               call.setTargetEndpointAddress(new java.net.URL(endpoint));
               call.setOperationName(new QName(endpoint, "putFile"));
               QName qnameattachment = new QName("FileService", "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.setReturnType(XMLType.XSD_STRING);
               String uploadedFN = (String) call.invoke(new Object[] { dh, name });
               if (uploadedFN != null && uploadedFN.trim().length() > 0) {
                  return true;
               }
               } catch (Exception e) {
    //logger.error("调用文件上传Web服务出错:" + e.getMessage());
               return false;
               }
               return false;
            }
     
            //文件下载:
     
            public void GetFile(String fileName) {
               this.fileName = fileName;
            }
     
            public boolean doGet() {
               return doGet(fileName);
            }
     
            public static boolean doGet(String fileName) {
               InputStreamReader ins = null;
               BufferedReader br = null;
               FileWriter fw = null;
     
               try {
    String endpoint = "http://localhost:5200/axis_sample/services/FileService";
                   Service service = new Service();
                   Call call = (Call) service.createCall();
                   DataHandler dh = new DataHandler(new FileDataSource(fileName));
    call.setTargetEndpointAddress(new java.net.URL(endpoint));
                   call.setOperationName(new QName(endpoint, "getFile"));
                   QName qnameattachment = new QName("FileService", "DataHandler");
    call.registerTypeMapping(dh.getClass(), qnameattachment,
                      JAFDataHandlerSerializerFactory.class,
                      JAFDataHandlerDeserializerFactory.class);
                      call.addParameter("s1", qnameattachment, ParameterMode.IN);
     
    call.setReturnType(new QName("FileService", "DataHandler"),
                      DataHandler.class);
                   DataHandler ret = (DataHandler) call
                      .invoke(new Object[] { fileName });
                   ins = new InputStreamReader(ret.getInputStream());
                   br = new BufferedReader(ins);
                   File dir = new File("DownLoadFile");
                   if (!dir.exists()) {
                      dir.mkdir();
                      // logger.debug("下载文件存放目录不存在,创建"+dir.getAbsolutePath()+" 】目录");
                   }
                   File f = new File(dir, fileName + "_reply");
                   fw = new FileWriter(f);
                   String tmp = br.readLine();
                   while (tmp != null) {
                      fw.write(tmp + "\n");
                      tmp = br.readLine();
                   }
               } catch (Exception e) {
    // logger.error("调用文件下载Web服务出错:" + e.getMessage());
                   return false;
               } finally {
                   try {
                      br.close();
                      ins.close();
                      fw.close();
                      } catch (Exception ee) {
     
                   }
               }
               return false;
               }
     
               /*
             public   static   void   main(String[]   args)  
             {  
             try  
             {  
             Service   service   =   new   Service();  
             Call   call   =   (Call)   service.createCall();  
         call.setTargetEndpointAddress(   "http://localhost:5200/axis_sample/services/FileService"   );  
            call.setOperationName(   "getFile"   );  
               QName   qnameAttachment   =   new   QName("TransFile","DataHandler");  
           call.registerTypeMapping(DataHandler.class,   qnameAttachment,                                                                    
         
             JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class);    
         call.addParameter("a",   XMLType.XSD_STRING   ,ParameterMode.IN);  
         call.setReturnType(XMLType.SOAP_ARRAY);  
         javax.activation.DataHandler[]   ret   =   (javax.activation.DataHandler[])call.invoke(new    
         
         Object[]{"lishu"});      
         for   (int   i   =   0;   i   <   ret.length;   i++)  
         {  
         DataHandler   recDH   =   ret[i];  
         System.out.println(recDH.getName());
         java.io.File   receivedFile   =   new   java.io.File("D:\\"+recDH.getName());//文件生成  
         }  
         }    
         catch   (Exception   ex)  
         {  
         ex.printStackTrace();  
         }  
         }   */
    }
    Axis总结
           Axis做为soap4j的下一代开源框架,它提供了支持java SOAP服务器的API,但是Axis在配置文件和部署服务上都是比较繁琐的,在服务器性能方面Axis的性能没有用XFire部署的服务性能要高,但是Axis在发布客户端代码时比XFire要方便,因为Axis可以不需要服务端生成的接口和类便可以调用服务端程序,但是XFire需要服务端的程序或者服务端生成的客户端程序。虽然Axis没有比较全面的文档,但是Axis的接口还是比较简单的,可以进行简单的一次开发,对于部署,Axis配置文件虽然繁琐,但是都是XML文件的形式表达的,所以对于修改Axis文件还是比较简单的,之所以Axis的用户比XFire