axis2 的客户端发送带附件的过程如下
1)构建信封的过程即使构建xml数据结构
2)MessageContext 分为In 和Out
服务端接受消息过程如下:
服务端发送response给客户端的消息也可以粘贴附件,就是所谓的axis2 下载文件功能
下面代码接上面代码
客户端拿到响应的message时,就可以根据downloadid找到附件的文件流
其他设置可以参考:http://axis.apache.org/axis2/java/core/docs/mtom-guide.html
//设置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