soap消息如何传送附件
来源:互联网 发布:windows 查看共享目录 编辑:程序博客网 时间:2024/05/24 07:16
soap消息如何传送附件
项目中使用了soap接口实现远程通讯,有文件传送的需求。常见的解决方案如下:
- 文件内容读出后,使用base64编码传输
- 通过MTOM方式,以消息附件发送
- 如果文件内容过大,可以先通过soap消息传递文件信息,服务端再使用sftp等文件协议主动下载(此方式成本较高,要求客户端提供文件服务)
本文介绍一下第二种方式的处理。
MTOM(Message Transmission Optimization Mechanism),消息传输优化机制,允许将消息中包含的大型数据元素外部化,并将其作为无任何特殊编码的二进制数据随消息一起传送。
*消息定义*
在编写wsdl时,消息结构字段按照如下方式定义:
<element name="Attachment"> <complexType> <sequence> <element name="filename" type="xsd:string"/> <element name="content" type="xsd:base64Binary"/> </sequence> </complexType></element>
为了将其中的content字段转换成附件形式,需要对将该字段按照如下方式定义:
<element name="content" type="xsd:base64Binary" xmime:expectedContentTypes="application/octet-stream"/>
在schema中增加如下内容:
xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
此后,使用cxf发布api时,content字段会被解析为DataHandler类型
@XmlTypepublic class Attachment { private String filename; @XmlMimeType("application/octet-stream") private DataHandler content; public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public DataHandler getContent() { return content; } public void setContent(DataHandler content) { this.content = content;}}
*MTOM支持*
服务端需要提供支持MTOM的服务:
Endpoint ep = Endpoint.publish("http://localhost/submit", new Submit());SOAPBinding binding = (SOAPBinding) ep.getBinding();binding.setMTOMEnabled(true);
本人项目上使用了mule ESB统一发布服务,mule ESB提供了cxf插件用于发布服务,开启MTOM支持需要在cxf插件中增加mtom-enabled=”true” 属性。
*附件传送*
客户端
Attachment attachment = new Attachement();attachment.setFilename("only4Test.zip");attachment.setContent(new DataHandler(new FileDataSource("/home/test/only4Test.zip")));client.someMethod(attachment);
服务端
DataHandler fileHandler = attachment.getContent();InputStream inputStream = fileHandler.getInputStream();...
阅读全文
0 0
- soap消息如何传送附件
- 格式化传送的soap消息
- 如何使用Axis传送附件
- 处理带附件的SOAP消息
- 如何使用Axis传送附件[原]
- 如何使用Axis传送附件[转载]
- 使用 Web Services Enhancements 发送带有附件的 SOAP 消息
- Axis2用法(4)soap消息携带附件
- 如何使用Soap消息调用Web Services
- 如何更改SOAP消息的编码
- j2ee web service开发(三) SAAJ 带附件的soap消息
- SOAP消息
- SOAP消息
- 如何记录Axis 1.4 的WebService SOAP消息?
- 神州数码消息传送器
- 消息传送 Handler
- Handler消息传送机制
- 消息传送机制
- 【面经笔记】TCP流量控制、阻塞控制
- QT学习篇(一) 添加动作
- Javaweb三大组件Servlet、Filter、Listener
- html基础标签
- MongoDB学习
- soap消息如何传送附件
- Web使用读写卡器
- 访问者模式--操作是操作,数据是数据
- jQuery选择器——层次选择器
- 详解build.gradle文件
- JVM学习笔记(3)-垃圾收集
- fabric-hello world
- 【Vertx】利用vertx实现websocket数据推送
- 插件加载---之二