如何在soap请求里绑定一个文件

1、导入的类大致如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import org.apache.axiom.attachments.Attachments;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.OperationClient;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.MessageContext;

2、主要代码大致如下:
private static EndpointReference targetEPR = new EndpointReference("soap 的地址");
Options options = new Options();
options.setTo(targetEPR);
options.setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE);
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
// Increase the time out when sending large attachments
options.setTimeOutInMilliSeconds(100000);
options.setTo(targetEPR);
//urn后面跟的是soap消息的名字
options.setAction("urn:importTreeFile");
ConfigurationContext configContext = ConfigurationContextFactory
.createConfigurationContextFromFileSystem(null, null);
ServiceClient sender = new ServiceClient(configContext, null);
sender.setOptions(options);
OperationClient mepClient = sender.createClient(ServiceClient.ANON_OUT_IN_OP);
//构建soap请求,并设置contentID,soap是通过contentID来找对应的文件的
ImportTreeFileRequestMsgDocument msg = ImportTreeFileRequestMsgDocument .Factory.newInstance()
ImportTreeFileRequestMsgDocument.setContentID("file");
DataHandler dh = null;
MessageContext mc = new MessageContext();
FileDataSource fds = new FileDataSource("文件名”);

try {
dh = new DataHandler(fds);
} catch (RuntimeException e) {
e.printStackTrace();
}
Attachments att = new Attachments();
att.addDataHandler("file", dh);
mc.setAttachmentMap(att);
SOAPFactory fac = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope env = fac.getDefaultEnvelope();

env.getBody().addChild(toOM(msg, false));
mc.setEnvelope(env);

mepClient.addMessageContext(mc);
mepClient.execute(true);
readAttachment(mc);

private org.apache.axiom.om.OMElement toOM(
com.huawei.www.ngin.routetree.ImportTreeFileRequestMsgDocument param, boolean optimizeContent) {
org.apache.axiom.om.impl.builder.StAXOMBuilder builder = new org.apache.axiom.om.impl.builder.StAXOMBuilder(
org.apache.axiom.om.OMAbstractFactory.getOMFactory(), new org.apache.axis2.util.StreamWrapper(param
.newXMLStreamReader()));
org.apache.axiom.om.OMElement documentElement = builder.getDocumentElement();

((org.apache.axiom.om.impl.OMNodeEx) documentElement).setParent(null);
return documentElement;
}


private void readAttachment(org.apache.axis2.context.MessageContext messageContext) {

String contentID = messageContext.getAttachmentMap().getAllContentIDs()[0];

DataHandler dh = messageContext.getAttachment(contentID);

dh.getDataSource().getName();

InputStream is = null;
try {
is = dh.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String line = null;

while ((line = br.readLine()) != null) {

System.out.println("client read2:" + line);
}

} catch (IOException e) {
e.printStackTrace();
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值