Axis2 附件传输 样例 解读

axis2 的客户端发送带附件的过程如下

//设置options
Options options = new Options();
options.setTo(targetEPR);
options.setProperty(Constants.Configuration.ENABLE_SWA,
Constants.VALUE_TRUE);
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setTimeOutInMilliSeconds(1000000);
options.setTo(targetEPR);
options.setAction("urn:uploadFile");

//获取context
String base = System.getenv("AXIS2_HOME");
ConfigurationContext configContext = ConfigurationContextFactory
.createConfigurationContextFromFileSystem(base+File.separator+"repository",
null);

//创建发送客户端
ServiceClient sender = new ServiceClient(configContext, null);
sender.setOptions(options);
OperationClient mepClient = sender
.createClient(ServiceClient.ANON_OUT_IN_OP);

//创建attach的消息上下文,指定attachid
MessageContext mc = new MessageContext();
FileDataSource fileDataSource = new FileDataSource(file);
DataHandler dataHandler = new DataHandler(fileDataSource);
String attachmentID = mc.addAttachment(dataHandler);//重点是这句

//构建信封(xml消息),并将信封设置到消息上下文中
SOAPFactory fac = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope env = fac.getDefaultEnvelope();
OMNamespace omNs = fac.createOMNamespace(
"http://service.soapwithattachments.sample", "swa");
OMElement uploadFile = fac.createOMElement("uploadFile", omNs);
OMElement nameEle = fac.createOMElement("name", omNs);
nameEle.setText(destinationFile);
OMElement idEle = fac.createOMElement("attchmentID", omNs);
idEle.setText(attachmentID);
uploadFile.addChild(nameEle);
uploadFile.addChild(idEle);
env.getBody().addChild(uploadFile);
mc.setEnvelope(env);


//将消息上下文设置到客户端,发送!
mepClient.addMessageContext(mc);
mepClient.execute(true);



1)构建信封的过程即使构建xml数据结构
2)MessageContext 分为In 和Out

服务端接受消息过程如下:

// 获取当前消息上下文
MessageContext msgCtx = MessageContext.getCurrentMessageContext();
// 提取附件id,并获取附件二进制流
Attachments attachment = msgCtx.getAttachmentMap();
DataHandler dataHandler = attachment.getDataHandler(attchmentID);
File file = new File(name);
FileOutputStream fileOutputStream = new FileOutputStream(file);
// 业务代码,写文件
dataHandler.writeTo(fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();


服务端发送response给客户端的消息也可以粘贴附件,就是所谓的axis2 下载文件功能
下面代码接上面代码

OperationContext opCtx = msgCtx.getOperationContext();
MessageContext outMsgCtx = opCtx.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);

DataHandler out = new DataHandler(new FileDataSource(new File("c:\\1.txt")));
String downloadid = outMsgCtx.addAttachment(out);
return downloadid;


客户端拿到响应的message时,就可以根据downloadid找到附件的文件流

其他设置可以参考:http://axis.apache.org/axis2/java/core/docs/mtom-guide.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值