xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<namespace>http://localhost:8090/WebServiceTest
</namespace>
<serviceClass>service.IHelloWorld</serviceClass>
<implementationClass>service.HelloWorldImpl
</implementationClass>
</service>
</beans>
接口文件:
package service;
public interface IHelloWorld {
//sayHello 方法声明了Web服务对外暴露的接口
public long upload(String filename,int action,String datastr);
}
服务端文件:
package service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.servlet.http.HttpServletRequest;
import org.codehaus.xfire.transport.http.XFireServletController;
import org.codehaus.xfire.util.Base64;
public class HelloWorldImpl implements IHelloWorld {
/**
* @filename:要下载的文件名(全名);
* @action:客户端要上传一份文件,考虑到断点续传功能,就必须要知道服务器上的文件现在的大小,才能确定从哪个位置开始传输,所以设计了这个action参数,值为0时表示询问文件大小,为1时表示传输的第三个参数datastr就是经过Base64编码的文件内容字符串;
* @datastr:经过Base64编码的内容字符串;
* @return:把文件的实时大小作为最新位置返回;
*/
public long upload(String filename,int action,String datastr){
String filepath="e://aaa//";
long filesize=0;
try{
if (!filename.equals(null) && !filename.equals("")){
File file=new File(filepath+filename);
if(action==0){
return file.length();
}else{
RandomAccessFile raf=new RandomAccessFile(file,"rw");
raf.seek(file.length());//先定位
byte[] bytes = Base64.decode(datastr);
raf.write(bytes);
//raf.skipBytes(datastr.length());//顺序写
raf.close();
//System.out.println("文件位置:"+file.length());
//System.out.println("写入长度:"+datastr.length());
filesize=file.length();
}
}
return filesize;
}catch(Exception e){
e.printStackTrace();
return 0;
}
}
}
客户端代码:
package service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.http.HttpTransport;
import org.codehaus.xfire.util.Base64;
public class DynamicClientTest {
public Object[] getWebService(String surl,String saction,Object[] objarr) throws MalformedURLException,Exception
{
Client client = new Client(new URL(surl));
//client.setProperty("mtom-enabled", "true");
client.setProperty(HttpTransport.CHUNKING_ENABLED,"true");
Object[] results = client.invoke(saction, objarr);
return results;
}
public static void main(String[] args) throws MalformedURLException,Exception {
String surl="http://localhost:8080/WebServiceTest/services/HelloWorldService?wsdl";
DynamicClientTest web=new DynamicClientTest();
Long start=System.currentTimeMillis();
DynamicClientTest web=new DynamicClientTest();
Object[] results4=web.getWebService(surl, "upload", new Object[] { "test.rar",0,null});
long startpost=(Long)results4[0];
//System.out.println("起始位置:"+startpost);
int BUFFER_LENGTH = 1024 * 20;//一次性读入大小
int SLEEP_TIME=250;//循环读次数
long filesize=0;
FileInputStream fis = null;
try {
File upfile=new File("e://GMS.rar");
filesize=upfile.length();
//System.out.println("文件大小:"+filesize);
fis=new FileInputStream(upfile);
fis.skip(startpost);//读文件前,先定位
while(startpost<filesize){
StringBuffer sb = new StringBuffer();
int time=0;
byte[] buffer = new byte[BUFFER_LENGTH];
int count=-1;
while (time<SLEEP_TIME && (count = fis.read(buffer)) != -1) {//这里要特别注意“time<SLEEP_TIME”条件一定要放在“(count = fis.read(buffer)) != -1”的前面,“&&”是在满足第一个条件的前提下才继续判断第二个条件的,否则,不管是否执行循环下面的代码,只要fis.read(buffer)一执行,读取文件的定位都会往后移,这样会造成下一次循环读取的数据就不对了。
sb.append(Base64.encode(buffer,0,count));
time++;
}
String ret= sb.toString();
results4=web.getWebService(surl, "upload", new Object[] { "test.rar",1,ret});
startpost=(Long)results4[0];
//System.out.println("位置:"+startpost);
}
Long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new Exception("出错啦!", e);
} catch (IOException e) {
e.printStackTrace();
throw new Exception("出错啦!", e);
} catch (Exception e) {
throw new Exception("出错啦!", e);
} finally {
fis.close();
}
}
}
相关推荐
在本篇中,我们将深入探讨如何使用XFire框架来实现Web服务。XFire是一个轻量级的Java Web Service框架,它允许开发者快速、方便地创建和消费SOAP服务。这篇文章可能是系列教程的第二部分,旨在帮助读者理解并掌握...
"Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。...通过本文,我们可以更好地理解和应用 XFire 框架,提高 Web 服务的开发和集成效率。
标题 "java+xfire(web service) + php 客户端 并实现文件加密" 描述了一个集成项目,其中涉及到Java、XFire(一个基于Java的Web服务实现框架)和PHP的交互,以及文件加密功能。这个项目的目标是构建一个安全的分布式...
XFire框架是一个基于Java的Web服务实现,它在早期为开发者提供了一种高效、轻量级的方式来创建和消费Web服务。这个"xfire框架jar包合集 大全"包含了不同版本的XFire核心库,这对于我们理解XFire的功能和历史演变至关...
首先,我们来看标题中的"使用XFire实现SOAP的webservice数据传输源码"。要创建一个SOAP Web服务,你需要以下步骤: 1. **定义服务接口**:使用Java编程语言定义服务接口,这些接口将代表可供远程调用的方法。 ```...
Java使用XFire实现Web服务(WebServices)是Java开发中的一种常见技术,它允许应用程序通过网络交换数据。XFire是一个轻量级、高性能的框架,它简化了在Java应用程序中创建和消费Web服务的过程。本篇文章将深入探讨...
这个压缩包“Android应用源码之在远程上传以及下载图片---XFire框架.zip”显然是一个示例项目,它利用了XFire框架来实现这些功能。XFire是一款轻量级的Java Web服务框架,它提供了SOAP和RESTful服务的支持。虽然...
在Java中,有很多库可以帮助开发者实现对Web服务的调用,其中之一就是XFire。这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它...
在"xfire webservice 上传下载源码"这个主题中,我们将深入探讨如何使用XFire来实现文件的上传和下载功能,以及相关的核心概念和技术细节。 **一、XFire简介** XFire是Apache CXF的前身,其设计目标是简化Web服务的...
本文将深入探讨如何利用XFire实现附件上传功能,这对于构建支持文件交互的Web应用至关重要。 首先,我们需要了解XFire的基础知识。XFire(现已被Apache CXF项目合并)是一个基于Java的开源Web服务框架,它利用了...
在IT行业中,Web服务是一种允许不同应用程序之间进行通信的技术,而`xfire`是一个流行的Java框架,用于构建和消费Web服务。本示例将详细解释如何利用xfire框架搭建一个包含SOAP Header身份验证和WS-Security身份验证...
XFire是一个古老的但功能强大的Java Web服务框架,它为开发者提供了简单、高效的接口来创建和消费Web服务。这篇博文将深入探讨如何搭建XFire框架并进行实际应用。 首先,我们来了解XFire的基本概念。XFire是Apache ...
XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保数据安全传输。 XFire是早期的一个开源项目,它是一个快速、灵活的Web服务框架,支持SOAP...
本文将详细介绍如何使用Java语言结合XFire框架来实现对WebService接口的调用。文中将涵盖从服务端到客户端的整个开发流程,包括环境搭建、服务端接口的定义与发布、以及客户端的调用等关键步骤。 #### 二、环境准备...
Java Web服务(Xfire Demo)是面向开发者的一个实例教程,它主要展示了如何利用Xfire库来创建和使用Java Web服务。Xfire是一个轻量级、快速且易于使用的框架,专门用于构建基于SOAP(简单对象访问协议)的Web服务。在...
在Java中,实现Web服务的一种流行框架就是XFire,一个快速、轻量级的SOAP(Simple Object Access Protocol)引擎。本教程将深入讲解如何使用XFire创建和消费Java Web服务。 一、Web服务基础 Web服务是基于开放标准...
虽然XFire不直接提供全面的安全解决方案,但它支持基于SOAP消息的安全特性,如WS-Security(Web Services Security),可以集成其他安全框架来实现身份验证、授权和加密等功能。 9. **与CXF的关系**: 随着时间的...
这个源码示例将展示如何利用XFire框架来实现这两个功能。 首先,我们需要在Android项目中集成XFire库。这可以通过添加依赖或者直接将库文件导入项目完成。集成后,我们需要创建一个服务接口,定义上传和下载图片的...