基于spring+cxf实现用户文件传输的webservice.docx
文本预览下载声明
基于spring+cxf实现用户文件传输的webservice
1 引言
在EDI系统中,用户数量较多,并且信息化水平差距较大,所以对报文的收发方式具有多样化的需求。相对其他访问方式而言,http(s)的访问在防火墙限制、安全性等方面都有较好表现。因此,有相当部分用户提出通过webservice发送报文的需求。本文介绍了如何采用cxf结合spring框架实现具有文件上传和相关查询功能的webservice,以便其在使用.net或其他框架开发的MIS系统中能够自动生成报文并上传。同时,该webservice还提供了用户基本身份验证功能,对访问请求进行限制。
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
2.功能分析
(1)该webservice需要提供报文上传到服务器上的基本功能。
(2)用户可以查询已经发送的报文历史信息列表,包括报文名称、报文大小和发送时间。
(3)由于不是开放服务,所以还需要对用户身份进行基本认证。
3.服务构建
(1)定义要提供的服务接口
首先要定义webservice输入输出的数据类型,主要包括报文名称、报文类型、报文发送时间以及处理文件流的DataHandler属性。代码片段如下:
public class MsgItem
{
//报文名称
private String filename;
//报文类型
private String filetype;
//传输时间
private String trans_time;
//文件流指针
private DataHandler msgfile;
public String getFilename()
{
return filename;
}
public void setFilename(String filename)
{
this.filename = filename;
}
public String getFiletype()
{
return filetype;
}
public void setFiletype(String filetype)
{
this.filetype = filetype;
}
public String getTrans_time()
{
return trans_time;
}
public void setTrans_time(String trans_time)
{
this.trans_time = trans_time;
}
public DataHandler getMsgfile()
{
return msgfile;
}
public void setMsgfile(DataHandler msgfile)
{
this.msgfile = msgfile;
}
}
在定义好输入输出的数据结构后,就可以定义要提供的业务服务接口。在该接口中使用@WebService注释来声明接口名称和命名空间,使用@WebResult注释来声明返回变量名称,使用@WebParam注释来声明传入变量名称,代码片段如下:
/**
*报文上传服务接口
*/
@WebService(name = MsgTrans, targetNamespace = /com/test/busw/service/file)
public interface MsgTrans
{
/**
* 上传报文
* @param item 报文实例
* @return 报文上传结果消息
*/
@WebResult(name = up_ret)
public String UploadMsg
(
@WebParam(name = msg_item)
MsgItem item
);
/**
* 查询报文信息列表
* @return 报文信息列表
*/
@WebResult(name = msgList)
public ListObject select_msglist ();
}
(2)实现接口
在完成接口的定义之后,可以开始编写java类来实现上述接口。此处使
显示全部