spring-ws 使用mtom传输附件

1 篇文章 0 订阅
1 篇文章 0 订阅

发送方代码:
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();//使用自定义marshaller进行xml转换以支持mtom协议
marshaller.setClassesToBeBound(new Class[] { addTaskRequest.class, addTaskResponse.class });
marshaller.setMtomEnabled(true);//开启mtom
WebServiceTemplate mtomClient=new WebServiceTemplate(marshaller);
mtomClient.setDefaultUri(uri);
Wss4jSecurityInterceptor wss4jInterceptor = new Wss4jSecurityInterceptor();
wss4jInterceptor.setSecurementActions(“UsernameToken”);
wss4jInterceptor.setSecurementUsername(taskServiceSend.userName);
wss4jInterceptor.setSecurementPassword(taskServiceSend.password);
wss4jInterceptor.setSecurementPasswordType(“PasswordDigest”);
mtomClient.setInterceptors(new ClientInterceptor[] {wss4jInterceptor});
addTaskResponse response = mtomClient.sendAndReceive(new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage requestMessage) throws IOException, TransformerException {
MarshallingUtils.marshal(marshaller, request, requestMessage);//使用自定义marshaller将request bean转换成soap xml消息以支持mtom
//DOMReader reader=new DOMReader();
//Document document=reader.read(((SaajSoapMessage)requestMessage).getDocument());
//System.out.println(message.convertToXopPackage()+”\n”+message.isXopPackage()+”\n”+message.getAttachments().next().getContentId());
//System.out.println(document.asXML());
}
}, new WebServiceMessageExtractor() {
public addTaskResponse extractData(WebServiceMessage response) throws IOException {
return (addTaskResponse) MarshallingUtils.unmarshal(marshaller, response);//使用自定义marshaller将返回消息转换成response bean以支持mtom
}
});
接收方:
public class taskEndpoint extends AbstractHibernateDao implements IWebservice {
public final static String namespace = “OAToTask”;

@PayloadRoot(localPart = "addTaskRequest", namespace = taskEndpoint.namespace)
@DataResolver
@Transactional
//接收MessageContext类型的request以便使用自定义marshaller对将消息转换成request bean,才能支持mtom
public @ResponsePayload void startTask(@RequestPayload MessageContext messageContext) throws Exception {

Jaxb2Marshaller marshaller = new Jaxb2Marshaller();//使用自定义marshaller进行xml转换以支持mtom协议
marshaller.setClassesToBeBound(new Class[] { addTaskRequest.class, addTaskResponse.class, });
marshaller.setMtomEnabled(true);//开启mtom
addTaskRequest request= (addTaskRequest) MarshallingUtils.unmarshal(marshaller, messageContext.getRequest());//使用自定义marshaller将soap xml消息转换成request bean以支持mtom

//处理request bean中的请求

addTaskResponse response = new addTaskResponse();
DefaultStrategiesHelper strategiesHelper = new DefaultStrategiesHelper(WebServiceTemplate.class);
WebServiceMessageFactory messageFactory = (WebServiceMessageFactory)strategiesHelper.getDefaultStrategy(WebServiceMessageFactory.class);
SaajSoapMessage message=(SaajSoapMessage) messageFactory.createWebServiceMessage();
MarshallingUtils.marshal(marshaller, response, message);//使用自定义marshaller将response bean转化成soap xml消息,以支持mtom
messageContext.setResponse(message);//将response消息传给messageContext返回接收方
}
}
xsd及bean:
xsd中,schema添加 xmlns:xmime=”http://www.w3.org/2005/05/xmlmime”
并将附件设成 name=”fileData” type=”base64Binary” xmime:expectedContentTypes=”application/octet-stream”>
bean中使用 javax.activation.DataHandler;与之对应如:DataHandler dataHandler=new DataHandler(new FileDataSource(filePath));
f.setFileData(dataHandler);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值