零配置简单实现AXIS2上传文件(异步,基于注解)

采用eclipse开发Axis2是非常方便的,这里我强烈推介大家采用eclipse来开发

本例我们采用jax ws来发布webservice,来实现AXIS2上传文件的功能,我们首先写服务端代码:

首先我们定义接口:


import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface IUpfile {
	//上传的数据和需要上传到那一个地址
	@WebMethod
	public boolean setFile(String dir,boolean appand,String data);
	//清空文件
	@WebMethod
	public boolean isEmpty(String dir);

}

@WebService 和下面的@WebMethod 注释分别表示这是一个webservice类,以及那些方法被发布出去

下面我们实现这个接口,这个实现类有点复杂,大家慢慢看吧,高手就请默默的走开哦


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.jws.WebService;

@WebService(serviceName="upfile",endpointInterface="study.ws.jaxws.ffile.IUpfile")
public class Upfile implements IUpfile{
	private BufferedWriter bw = null;
	FileWriter fw;

	@Override
	public boolean setFile(String dir,boolean appand,String data) {
		boolean b = true;
		//如果为假表示创建BufferedWriter失败
		if(!setUpfile(dir,appand)){
			System.out.println("创建BufferedWriter失败");
			return false;
		}
		
		if(bw == null){
			System.out.println("BufferedWriter空异常,函数setUpfile");
			return false;
		}
		if(data != null){
			try {
				bw.write(data);
				bw.write("\n");
				Thread.sleep(5000);
				sleeps();
			} catch (IOException e) {
				e.printStackTrace();
				// TODO Auto-generated catch block
				System.out.println("文件上传失败");
				b = false;
				return false;
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			System.out.println("文件上传成功");
		}
			
		try {
			bw.flush();
			fw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
	}


	
	//必须先运行这个,可以获得一个文件写入流
	private boolean setUpfile(String dir,boolean appand){
		try {
			//true表示追加
			fw = new FileWriter(dir,appand);
			bw = new BufferedWriter(fw);
			return true;
		} catch (IOException e) {
			System.out.println("创建BufferedWriter失败");
			return false;
		}
	}



	@Override
	public boolean isEmpty(String dir) {
		File f = new File(dir);
		System.out.println("未清空前文件的大小是:"+f.length());
		try {
			fw = new FileWriter(dir);
			bw = new BufferedWriter(fw);
			bw.write("");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("清空后文件的大小是:"+f.length());
		if(f.length()>0){
			return false;
		}else{
			return true;
		}
		
	}

	private void sleeps(){
		System.out.println("这里执行了其他的程序");
	}
}

这个实现类中,注解需要使用endpointInterface进行全路径指定,serviceName表示发布服务的名称


接下来我们将这个包发布成jar

QQ图片20151020171740

注意,需要将这个jar发布到tomcat下的  axis2\WEB-INF\servicejars\ 这个目录下哦,当然servicejars是可以更改的,默认是发布到这里


然后我们启动我们的tomcat

然后打开URL

http://localhost:8080/axis2/services/upfile?wsdl

我们会看到我们发布的应用已经能够发布成功了


接下来我们使用eclipse发布客户端程序

首先创建一个项目

再右键点击这个项目发布web service client


1


点击下一步,将我们的wsdl的url地址复制进去


2

稍等一下,点击finish完成创建

这时我们刚创建的项目就会生成我们需要的java类


3

这些生成的java类大家可以研究下,其中本例中我们用到的是IUpfileProxy代理类

现在我们开始创建客户端测试代码吧


public class jaxws_file {

	public static void main(String[] args) {
		IUpfile file = new IUpfileProxy();
		BufferedReader br = null;
		FileReader fd = null;
		String str = null;
		boolean b = true;
		
		try {
			fd = new FileReader("D:\\111.html");
			br = new BufferedReader(fd);
			
			System.out.println("开始上传文件成功");
			
			str = br.readLine();
			while (str != null) {
				if(!file.setFile("d:\\test\\aab.tet",true,str)){
					System.out.println("发生错误了哦,准备清空文件");
					file.isEmpty("d:\\test\\aab.tet");
					if(file.isEmpty("d:\\test\\aab.tet")){
						System.out.println("清空文件成功");
					}else{
						System.out.println("清空文件失败");
					}
					b = false;
					break;
				}
					
				str = br.readLine();
			}
			if(b){
				file.setFile("d:\\test\\aaa.tet",true,null);
				System.out.println("上传文件成功");
			}
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			br.close();
			fd.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

以上代码实现了向服务器端传送数据,服务器端保存数据的功能,如果遇到错误会有提示或清空文件的功能



写在最后:

本例中所需要的jar包,可在apache官方网站下载到:http://axis.apache.org/axis2/java/core/download.cgi。

本例中使用了零配置发布(jaxws),需要将jdk目录中的tools.jar复制到项目中,或复制到tomcat的lib目录中,否则会提示错误:

<error><description>Unable to generate WSDL 1.1 for this service</description><reason>If you wish Axis2 to automatically generate the WSDL 1.1, then please set useOriginalwsdl as false in your services.xml</reason>javax.xml.ws.WebServiceException: Error occurred generating WSDL file for Web service implementation class {study.ws.jaxws.ffile.Upfile}


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img