CMHKOASDWEB服务Word文件下载.docx
《CMHKOASDWEB服务Word文件下载.docx》由会员分享,可在线阅读,更多相关《CMHKOASDWEB服务Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。
![CMHKOASDWEB服务Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/d190d93f-ca11-446d-be18-5619e93530a9/d190d93f-ca11-446d-be18-5619e93530a91.gif)
修改补充
检查定稿
目录
1引言3
1.1目的3
1.2范围3
1.3读者对象3
1.4参考资料3
1.5术语与缩略语3
2需求概述3
3需求分析4
4设计策略4
4.1设计约束4
4.2SOAP消息4
4.2.1不带附件6
4.2.2带附件7
4.3JAXM消息发送模型7
4.4JAXM编码实现9
4.4.1客户端9
4.4.2服务器端10
4.5附件处理11
4.5.1增加附件11
4.5.2处理附件12
4.6中文问题12
4.6.1消息内容12
4.6.2中文名附件12
5系统总体结构14
6环境的配置14
6.1开发环境的配置14
6.2运行环境的配置14
6.3测试环境的配置14
6.3.1客户端14
6.3.2服务器端15
7网络资源15
1引言
1.1目的
在各个应用系统之间互通消息,比如OA系统到OA系统,OA系统到档案系统等其他系统。
1.2范围
适应所有支持Http协议的应用系统。
1.3读者对象
开发人员,设计人员,测试人员,用户
1.4参考资料
资料名称[标识符]
出版单位
作者
日期
1.5术语与缩略语
缩写
原文
中文释意
EZ-OSSP
EZ-CMM/OSSP(OrganizationStandardSoftwareProcess)
EZCROSSCMM机构标准软件过程
WS
WebService
Web服务
JAXM
JavaAPIforXMLMessaging
处理xml消息的javaAPI
JAX-RPC
JavaAPIforXML-basedRPC
基于xml的远程过程调用的javaAPI
SAAJ
SOAPwithAttachmentsAPIforJava
处理soap附件的javaAPI
SOAP
SimpleObjectAccessProtocol
简单对象访问协议
2需求概述
招商局集团OA系统要与其他许多系统进行对接,也就是互相通信。
例如:
◆集团OA系统发一篇公文信息到招商国际OA系统
◆统一用户管理系统发消息到各个OA系统
◆OA系统到档案系统
。
。
这些都要求不需要直接登录到目标系统,比如:
集团OA系统发一篇公文信息到招商国际OA系统,集团OA系统的公文信息发送者并不需要登录到招商国际OA系统(目标系统)。
3需求分析
一个应用系统A往另一个应用系统B发送消息,A是消息发送者,B是消息接收者,这个过程就是单向通信的过程,如果A要求B返回消息的话,那么这个过程就是双向通信的过程。
这种通信过程符合客户端/服务器端通信模型。
A是客户端,B是服务器端,同样A也可以作为服务器端,B作为客户端。
与招商局集团OA系统互相通信的各个应用系统都建立在Http协议上,在他们之间建立统一的通信模式适合采用WEBSERVICE技术。
WEBSERVICE技术是通过Http协议,在客户端与服务器端之间互相传送xml数据,客户端并不需要登录到服务器端,只需要获得对服务器端提供的Web服务的访问权,通常服务器端提供的Web服务都是公开的。
详细说明请参考【WebService解析.doc】
4设计策略
客户端与服务器端通过WEBSERVICE技术进行通信,消息的格式是xml数据,使用的是soap协议进行封装xml数据,可以称之为soap消息。
客户端发送的消息是soap消息,服务器端接收的消息也是soap消息,服务器端返回的消息也是soap消息。
Soap是一个基于XML的用于应用程序之间通信数据编码的传输协议,是新一代跨平台、跨语言分布计算WebServices的重要部分。
详细说明请参考【SOAP解析.doc】
4.1设计约束
招商局集团OA系统是采用java技术开发的,在java平台下开发WebService有以下三个方向:
ApacheAxis、JAX-RPC、JAXM。
◆ApacheAxis一种实现soap协议的引擎,建立在ApacheSoap项目的成果之上。
◆JAX-RPC基于XML的远程过程调用,在JAVA平台上构建互操作Web服务。
◆JAXMJavaAPIforXMLMessaging,处理xml消息的JavaAPI。
用JAXM开发WebService简单易懂,快捷迅速,目前暂定JAXM开发WebService。
4.2SOAP消息
SOAP消息遵循xml规范,包含一个Envelope,而Envelope包含零至多个header以及一个body。
◆Envelope是XML文档的根元,为以下内容提供了了一个容器:
控制信息,消息的收件人,消息本身。
◆header包含控制信息,例如服务属性
◆body包含消息标签以及它的参数,其中的消息标签可以包含自定义xmlDTD或xmlschema的元素。
请参考xml网站。
◆SOAP消息有两种类型,分为不带附件和带附件。
◆举例说明SOAP消息内容格式
.没有带附件:
//soap消息结构头,说明soap消息内容是什么类型。
------=_Part_1_25788693.1111128679954
Content-Type:
text/xml;
charset=UTF-8
Content-Transfer-Encoding:
binary
Content-Id:
<
A89B372213A6DA647DEA57D1ECB5FB17
//soap消息内容,为标准的xml文档。
上面必须空一行。
<
?
xmlversion=”1.0”encoding=”UTF-8”?
>
soap-env:
Envelopexmlns:
soap-env="
http:
//schemas.xmlsoap.org/soap/envelope/"
Header/>
Body>
prefix:
rootxmlns:
prefix="
URI"
example>
SUNW<
/prefix:
root>
/soap-env:
Envelope>
.带附件:
image/gif
1Folder.gif>
//上面必须空一行。
GIF89a雽眯柪览呵尐穜€€€wx$_?
炋(p:
摱煝`u"
_歋b钡~__唞M鏋a!
?
蠍製;
&
4.2.1不带附件
图-1不带附件的SOAP消息
其中Header和SOAPFault是可选的,Header可以多个,Body只有一个,如果有SOAPFault,那么它一定在SOAPBody后面。
4.2.2带附件
图-2不带附件的SOAP消息
附件可以为零个或多个,在SOAPPart部分之后。
4.3JAXM消息发送模型
JAXM使用SOAP消息在消息客户端和服务端传送消息,消息发送连接有两种类型,一种是SOAPConnection,另一种是ProviderConnection。
前者是一种点对点的消息发送模型,后者需要通过MessageProvider来把消息传送到目标。
图-3单向和双向的消息传送方式
不使用MessageProvider,可以带来一些便利,比如:
客户端可以是一般的J2SE程序;
不需要额外的配置。
但是,不使用MessageProvider也有以下的限制:
只能发送request-response类型的消息;
客户端只能是客户端的角色。
用点对点的消息传送方式,调用过程如-4所示
图-4JAXM调用过程
4.4JAXM编码实现
JAXM包提供了开发客户端和服务器端WebService的API。
可以到Sun网站上下载。
4.4.1客户端
(一)创建SOAP连接
(二)创建SOAP消息
(三)填充SOAP消息
(四)发送SOAP消息
(五)处理返回的SOAP消息
一个简单的例子(点对点):
publicclassClientSendMessageServletextendsHttpServlet{
publicvoiddoGet(
HttpServletRequestreq,
HttpServletResponseresp)throwsServletException{
//创建SOAP连接
SOAPConnectionFactoryscf=SOAPConnectionFactory.newInstance();
SOAPConnectioncon=scf.createConnection();
//创建SOAP消息
MessageFactorymf=MessageFactory.newInstance();
SOAPMessagemsg=mf.createMessage();
//填充SOAP消息
SOAPPartsp=msg.getSOAPPart();
SOAPEnvelopeenvelope=sp.getEnvelope();
SOAPHeaderhdr=envelope.getHeader();
SOAPBodybdy=envelope.getBody();
SOAPBodyElementgltp=bdy.addBodyElement(
envelope.createName(“root”,”prefix”,”uri”));
gltp.addChildElement(envelope.createName(
“example”,”prefix”,”uri”)).addTextNode("
SUNW"
);
//发送SOAP消息
//服务器端提供WebService的URL地址
URLurlEndpoint=newURL(“Http:
//localhost:
82/WS/receiver”);
//发送SOAP消息,同时获得应答的SOAP消息
SOAPMessagereply=con.call(msg,urlEndpoint);
//处理返回的SOAP消息,输出到控制台
reply.writeTo(System.out);
)
}
其简单的UML图如下
图-5客户端servlet
4.4.2服务器端
(一)处理客户端发过来SOAP消息
(二)创建应答SOAP消息
(三)填充应答SOAP消息
(四)返回应答SOAP消息
publicclassServerReceiveMessageServletextendsJAXMServletimplementsReqRespListener{
publicSOAPMessageonMessage(SOAPMessagemessage){
//把客户端发过来的SOAP消息输出到控制台
message.writeTo(System.out);
//创建应答SOAP消息
//填充应答SOAP消息
SOAPEnvelopeenv=msg.getSOAPPart().getEnvelope();
env.getBody().addChildElement(
env.createName("
Response"
)).addTextNode("
Thisisaresponse"
//返回应答SOAP消息
retrunmsg;
图-6服务器端servlet
4.5附件处理
SAAJ(SOAPwithAttachmentsAPIforJava)包提供了处理SOAP消息附件的各种方法。
4.5.1增加附件
//附件所在URL地址,比如:
URLurl=newURL(data);
AttachmentPartap=msg.createAttachmentPart(newDataHandler(url));
//设置附件的mime类型,比如:
image/gif
ap.setContentType(type);
//设置附件的标识ID,比如:
xx.gif。
如果不自定义,SOAP会赋给一个随机数。
ap.setContentId(name);
//确定增加附件
msg.addAttachmentPart(ap);
另:
也可以采用以下方式增加附件
//指定附件大小为1M
byte[]bytes=newbyte[1024000];
InputStreamin=newFileInputStream("
test.jpg"
in.read(bytes);
ByteArrayInputStreamstream=newByteArrayInputStream(bytes);
ap.setContent(stream,"
image/jpeg"
ap.setContentId("
test_content"
msg.addAttachmentPart(attachment);
4.5.2处理附件
//迭代多个附件
Iteratorit=msg.getAttachments();
while(it.hasNext()){
//取得单个附件
AttachmentPartap=(AttachmentPart)it.next();
//取得附件的输入流,然后根据需要作相应的处理。
InputStreamin=ap.getDataHandler().getInputStream();
4.6中文问题
在消息发送和接收过程中,必然会遇到中文问题,一是消息的内容的中文问题,二是附件的中文问题。
下面就这两个方面的中文问题作一些讨论。
4.6.1消息内容
可以采用Base64编码对中文内容进行封装发送,对应地,接收到消息后,对存在的Base64内容进行Base64解码,还原成中文内容。
◆对中文编码sun.misc.BASE64Encoder.encode(byte[]bytes),返回String
◆解码还原成中文sun.misc.BASE64Decoder.decodeBuffer(Stringstr),返回byte[]数组
4.6.2中文名附件
如果用URL来指定附件的位置,那么URL所在Web服务器必须支持中文名文件浏览,也就是说:
输入Http:
82/WS/中文.doc,要弹出提示是否下载,不能是找不到路径。
◆Web服务器配置以支持中文名文件浏览
例:
Tomcat的配置
修改$Tomcat_Home/conf/server.xml文件,找到提供Http服务那段配置,通常是
<
connectorport=”8080”…/>
在该元素加上一个属性,URIEncoding=”UTF-8”,如下:
connectorport=”8080”…URIEncoding=”UTF-8”/>
◆对URL的内容编码处理
//比如:
附件的url地址为Http:
82/WS/中文.doc
URLurl=newURL(toUtf8String(“Http:
82/WS/中文.doc”));
函数toUtf8String源码如下:
/**
*将文件名中的汉字转为UTF8编码的串.
*@params原文件名
*@return重新编码后的文件名
*/
publicstaticStringtoUtf8String(Strings){
StringBuffersb=newStringBuffer();
for(inti=0;
i<
s.length();
i++){
charc=s.charAt(i);
if(c>
=0&
c<
=255){
sb.append(c);
}else{
byte[]b;
try{
b=Character.toString(c).getBytes("
utf-8"
}catch(Exceptionex){
System.out.println(ex);
b=newbyte[0];
}
for(intj=0;
j<
b.length;
j++){
intk=b[j];
if(k<
0)k+=256;
sb.append("
%"
+Integer.toHexString(k).
toUpperCase());
}
returnsb.toString();
}
5系统总体结构
图-7系统总体结构
6环境的配置
6.1开发环境的配置
类别
标准配置
最低配置
计算机硬件
笔记本电脑T22或T23系列
软件
WindowsXP,eclipse,j2sdk1.4.2,tomcat5
网络通信
Tcp/ip
其他
版本管理器(VSS,CVS)
6.2运行环境的配置
Sun服务器
Solaris,oracle9i,tomcat5,j2sdk1.4.2
6.3测试环境的配置
6.3.1客户端
◆安装一个jsp/servlet容器,比如tomcat,websphere等。
◆配置servlet
6.3.2服务器端
7网络资源
◆Sun网站Http:
//
◆Ibm网站Http:
◆Xml网站Http:
//www.w3c.org/xml