[英]Sending SOAP attachment with Camel+Spring WS?
我一直在嘗試使用Camel + SpringWS發送SOAP附件。
以下是RouteBuilder類中的代碼,端點正常運行,我已經得到了空的SOAP響應:
from("spring-ws:rootqname:{http://www.lala.org/Bean}GetBookRequest?endpointMapping=#endpointMapping").process(new Processor() {
public void process(Exchange arg0) throws Exception {
//SpringWebserviceMessage msg = (SpringWebserviceMessage) arg0.getIn(); // --> SpringWebserviceMessage instance
arg0.getOut().addAttachment("test",new DataHandler(new FileDataSource("c:/CompanyLogo.jpg")));
}
});
我也嘗試過通過SpringWebserviceMessage添加附件,但是沒有任何效果。 有誰知道如何用Camel + SpringWS添加SOAP附件?
我不熟悉Camel,但我確實記得有一種情況,我也必須在spring-ws消息中放置一個SOAP附件。 對我來說,訣竅是使用SaajSoapMessage。
以下是有關如何在Java中使用spring-ws附加文件的代碼段:
JAXBElement<ShowCandidateType> responseElement = (JAXBElement<ShowCandidateType>) kandidaatServiceTemplate.marshalSendAndReceive(
objectFactory.createProcessCandidate(processCandidate),
new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
SaajSoapMessage saajMessage = (SaajSoapMessage) message;
//Use the file name as the contentId
saajMessage.addAttachment(file.getName(), file);
}
}
);
關鍵是實現doWithMessage並將WebServiceMessage強制轉換為SaajSoapMessage。
Spring-WS的Camel組件不包含正式發布的任何附件/標頭支持。
但是, camel-spring-ws的最新快照包含解決此問題的補丁。
看這里: https : //issues.apache.org/jira/browse/CAMEL-5724
這是建議功能的最新文檔
標頭和附件傳播
端點將使用所謂的“ 鈎子 ” MessageFilter(BasicMessageFilter提供了默認實現)將交換頭和附件傳播到WebSdrviceMessage響應中。
現在你可以使用了
exchange.getOut().getHeaders().put("myCustom","myHeaderValue")
exchange.getIn().addAttachment("myAttachment", new DataHandler(...))
注意:如果管道中的交換頭包含文本,它將在soap頭中生成Qname(key)= value屬性。
推薦的方法是直接創建QName
類,並將其放入標頭的任何鍵中。
不知道您的Web服務如何期望附件。 我需要使用駱駝+肥皂發送附件。 如果計划使用“ @mtom”,則需要添加一個二進制消息部分,然后需要添加附件,並帶有對二進制部分的引用。 否則,如果您的Web服務正在使用base64編碼的附件。 您只需要設置文件內容,base64編碼為message中的附件字段名稱。
如果您可以共享wsdl,我將能夠為您提供更好的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.