接口 interface

import  J2EE技术的爬虫.util.Collection;
import  J2EE技术的爬虫.util.List;

public   interface  IMathService  {
 
/** */ /**
  * 加
  * 
@param  a
  * 
@param  b
  * 
@return
  
*/

 
public   int  add( int  a, int  b);
 
/** */ /**
  * 减
  * 
@param  a
  * 
@param  b
  * 
@return
  
*/

 
public   int  sub( int  a, int  b);
/** */ /**
上传二进制文件
*/

  
public  String sendFile(String fileName, byte [] file );
 
}



实现 implements

import  J2EE技术的爬虫.io.File;
import  J2EE技术的爬虫.io.FileOutputStream;
import  J2EE技术的爬虫.sql.Connection;
import  J2EE技术的爬虫.sql.ResultSet;
import  J2EE技术的爬虫.sql.Statement;
import  J2EE技术的爬虫.util.ArrayList;
import  J2EE技术的爬虫.util.Collection;
import  J2EE技术的爬虫.util.List;

import  com.newsoft.oa.bean.User;
import  com.newsoft.oa.uitl.Connector;
import  com.thoughtworks.xstream.XStream;

public   class  MathServiceImpl  implements  IMathService {
  
public   int  add( int  a, int  b) {
   
return  a + b;
  }

  
  
public   int  sub( int  a, int  b) {
   
return  a - b;
  }
 
  
public  String getWelComeStr(String name) {
   
return   " hi  " + name + " ! 欢迎你 " ;
  }

  
public  List getUsers() {
   List l
= new  ArrayList();
   l.add(
" name " );
   l.add(
" password " );
   l.add(
" sex " );
   
return  l;
  }


public  String sendFile(String fileName,  byte [] filebytes)  {
 
try {
  String path
= "" ;
   
if (filebytes != null && filebytes.length > 0 ) {
    File file
= new  File( " / " + fileName);
    
    file.createNewFile();
    FileOutputStream fos
= new  FileOutputStream(file);
    fos.write(filebytes);
    fos.close();
    path
= file.getAbsolutePath();
    System.out.println(path);
    
    file
= null ;
    
   }

   
   
return  path;
 }
catch (Exception ex) {
  
return   " false " ;
 }

}



}



 


配置文件

放在 Classes/META-INF/xfire/service.xml;里面

<? xml version="1.0" encoding="UTF-8" ?>
< beans  xmlns ="http://xfire.codehaus.org/config/1.0" >
 
< service >
  
< name > MathService </ name >
  
< namespace > newsoft/oa/MathService </ namespace >
  
< serviceClass >
   com.newsoft.oa.services.IMathService
  
</ serviceClass >
  
< implementationClass >
   com.newsoft.oa.services.MathServiceImpl
  
</ implementationClass >

 
</ service >
</ beans >


其实是借鉴了Spring的写法,用过Spring不会对着陌生,(Application-context.xml)

WEB-XML加上

< servlet >
  
< servlet-name > XFireServlet </ servlet-name >
  
< servlet-class >
   org.codehaus.xfire.transport.http.XFireConfigurableServlet
  
</ servlet-class >
 
</ servlet >

 
< servlet-mapping >
  
< servlet-name > XFireServlet </ servlet-name >
  
< url-pattern > /servlet/XFireServlet/* </ url-pattern >
 
</ servlet-mapping >

 
< servlet-mapping >
  
< servlet-name > XFireServlet </ servlet-name >
  
< url-pattern > /services/* </ url-pattern >
 
</ servlet-mapping >


最后就是客户端了

/   / Create a metadata of the service              
 Service serviceModel 
=   new  ObjectServiceFactory().create(IMathService. class ); 
//  Create a proxy for the deployed service      
  
 XFireProxyFactory factory 
=   new  XFireProxyFactory(XFireFactory.newInstance().getXFire());   
 String serviceUrl 
=   " http://localhost:8080/ws/services/MathService " ;
  client 
=   null ;       
 
try   {          
   client 
= (IMathService) factory.create(serviceModel, serviceUrl);  
   File file
=new File("c:\\SUPERMAP 白皮书.pdf");
   FileInputStream fis
=new FileInputStream(file);
   
byte[] b=new byte[fis.available()];
   fis.read(b);
  System.out.println(client.sendFile(file.getName(), b));
 }
  catch  (Exception ex)  {         
   ex.printStackTrace();
 }
                            // Invoke the service    
  int  serviceResponse  =   0 ;
 
int  a = 10 ,b = 20 ;

就是

Service serviceModel = new ObjectServiceFactory().create(IMathService.class); 
 XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());  
 String serviceUrl = http://localhost:8080/ws/services/MathService;

三行字建立连接请求,

太轻松了

传输文件速度也可以,二进制,2M多的文件,也能轻松传递

用.net和delphi平台测试,兼容性没问题(按道理 soap,也不应该有问题)

这是为客户搭建的在 档案系统和OA审批间作文件归档的尝试项目

哈,完整的项目代码,就不方便讲了。