Java中根据WebService的服务端生成客户端,并且实现从客户端发送文件到服务端,测试发送文件大小的临界值

本文介绍了WebService,它是一种跨平台、跨语言的远程调用规范,基于XML、SOAP、WSDL等技术。还提及Java有多种WebService实现框架,如Apache CXF。此外,给出了WebService服务端和客户端的代码示例及测试说明。

关于WebService的一些了解,简单来说,webservice就是远程调用技术,也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册.

XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础

Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

准确的来说,webservice不是一种技术,而是一种规范。是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互,

我们一般就是在具体平台开发webservice接口,以及调用webservice接口,每种开发语言都有自己的webservice实现框架。比如Java 就有 Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF、Apache Wink、Jboss RESTEasyd等等。其中Apache CXF用的比较多,它也可以和Spring整合。

上面是关于WebService的简单介绍:

以下是WebService的代码部分:

服务端代码:

1.创建javaWeb工程

package com.hyan.service;

import java.io.*;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import com.hyan.dao.GetValue;
import com.hyan.toolts.Log4jBean;
import com.hyan.toolts.ReadConfig;
@WebService
public class ServiceHello implements GetValue{
	

	/*
	 * 服务端,读取文件
     *fileContent 文件内容 fileName 文件名称
	 */
	
	public void getValue(String fileContent,String fileName) {
		try {
           //	ReadConfig.PullConfigXml(); //调用自己写好的配置文件
			String filePaths="E:\\eclipse-workspace\\TheService\\src\\"+fileName;
			
			int temp = this.writeFile(filePaths, fileContent.getBytes("GBK"));
			if(temp>=0) {
				System.out.println("写入文件成功!");
			}else {
				System.out.println("写入文件失败!");
			}
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}	

	}
	/*
	 * 写入文件
	 */
	public int writeFile(String filePath, byte[] content) {

		//	LOGBean.logger("debug", "写文件[" + fileName + "]\n", context);
	        System.out.println("开始写文件。。。。");
			FileOutputStream os = null;
			try {
				os = new FileOutputStream(filePath,true);
				//Log4jBean.logger.info("准备写入文件");
				os.write(content);
				//Log4jBean.logger.info("开始刷新文件");
				os.flush();

			} catch (Exception e) {
				//LOGBean.logger("error", "写文件[" + fileName + "]失败 " + e.toString());
				return -1;
			} finally {
				try {
					if (null != os)
						os.close();
				} catch (IOException e) {
				}
			}
		   System.out.println("写入文件成功");
			os = null;
			//LOGBean.logger("debug", "写文件[" + fileName + "]成功", context);
			return 0;
		}
		
	public static void main(String[] args) {
		/**
         * 参数1:服务的发布地址http://localhost:8080/Service/ServiceHello
         * 参数2:服务的实现者new ServiceHello()
         */
		GetValue gv=new ServiceHello();// 发布对外开放的接口
		Endpoint.publish("http://localhost:8080/Service/ServiceHello",gv);
		System.out.println("service success!");
	}

}

2.其中服务端的一个接口:

package com.hyan.dao;

public interface GetValue {
    //获取客户端文件内容及名称
	public void getValue(String fileContent,String fileName);
	//写入文件
	public int writeFile(String filePath, byte[] content);

}

 

测试结果:

 测试地址:http://localhost:8080/Service/ServiceHello?wsdl

客户端代码:

命令提示窗口执行生成命令

 格式:wsimport -s "src目录" -p “生成类所在包名” -keep “wsdl发布地址”

如:wsimport -s E:\\eclipse-workspace\\TheClient\\src -p com.hyan.client -keep http://localhost:8080/Service/ServiceHello?wsd

说明:

1."src目录"地址不可含空格

2.“wsdl发布地址”不要漏了“?wsdl”

3.刷新项目,检查生成类

最终测试

1.创建【Class】类,命名为【ServiceTest】,位于【com.hyan.test】包下。

package com.hyan.test;

import java.io.*;
import java.util.List;

import com.hyan.client.ServiceHello;
import com.hyan.client.ServiceHelloService;
import com.hyan.toolts.Divideflow;
import com.hyan.toolts.IPTimeStamp;
import com.hyan.toolts.ReadConfig;

/*
 * 测试客户端调用服务端方法
 */
public class ServiceTest {
	//@param args

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	  File file = null;
	  String filePaths ="XXXX.txt";
		try {			
		//1.先获得文件句柄,File file=new File("文件名");
		file=new File(filePaths);
		if(file.isFile()&&file.exists()){//判断文件是否存在
			//2.获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
			InputStreamReader read=new InputStreamReader(
              new FileInputStream(file),"GBK");//考虑到编码格式
			BufferedReader br=new BufferedReader(read);
			String lineTxt=new String();
			StringBuilder strBuf=new StringBuilder();
			while((lineTxt=br.readLine())!=null) {	
				strBuf.append(lineTxt);//把文件里面的内容一条一条读出来存在StringBuilder里面
			}
			ServiceHello hello =new ServiceHelloService().getServiceHelloPort();
		
			String[] addTimeFile=file.getName().split("\\.");
			      hello.getValue(strBuf+"\n\r",addTimeFile[0]+"_"+timeStamp.getTimeStamp()+"."+addTimeFile[1]);								
		}else{
          System.out.println("找不到指定的文件");
      }
      } catch (Exception e) {
          System.out.println("读取文件内容出错");
          e.printStackTrace();
      }
	}

}

效果:

第一个为客户端的执行效果

 第二个为服务端的执行效果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉梦洛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值