spring-ws 使用mtom傳輸附件

發送方代碼:
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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章