Отправка вложения SOAP с помощью Camel + Spring WS? - PullRequest
1 голос
/ 30 августа 2011

Я пытался отправить SOAP-вложение с помощью Camel + SpringWS.

Ниже приведен код внутри моего класса 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, но это не дает никакого эффекта.Кто-нибудь знает, как добавить SOAP Attachment с помощью Camel + SpringWS?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Я не знаком с Camel, но я помню случай, когда мне приходилось помещать вложение SOAP в сообщение также с spring-ws. Для меня трюк заключался в использовании SaajSoapMessage.

Ниже приведен фрагмент о том, как прикрепить файл с помощью spring-ws в java:

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.

1 голос
/ 20 ноября 2012

Компонент Camel для Spring-WS не содержит официально выпущенных вложений / заголовков.

Однако последний снимок camel-spring-ws содержит исправление, которое решает эту проблему.

Смотрите здесь: https://issues.apache.org/jira/browse/CAMEL-5724

Вот текущий документ о предлагаемой функциональности

Распространение заголовка и вложения

Конечная точка будет использовать так называемый " hook " MessageFilter (реализация по умолчанию предоставляется BasicMessageFilter) для распространения заголовков и вложений обмена в ответ WebSdrviceMessage.

Теперь вы можете использовать

exchange.getOut().getHeaders().put("myCustom","myHeaderValue")
exchange.getIn().addAttachment("myAttachment", new DataHandler(...))

Примечание. Если заголовок обмена в конвейере содержит текст, он генерирует атрибут Qname (ключ) = значение в заголовке мыла.

Рекомендуется создать класс QName напрямую и вставить любой ключ в заголовок.

0 голосов
/ 02 мая 2018

Не знаю, как ваш веб-сервис ожидает вложения.У меня было требование отправить вложение, используя Camel + Soap.Если вы планируете использовать '@mtom', вам нужно добавить двоичную часть сообщения, а затем добавить вложение со ссылкой на двоичную часть.Или, если ваш веб-сервис использует вложения в кодировке base64.Вам просто нужно установить содержимое вашего файла, base64 в кодировке с именем поля вложения в сообщении.

Если вы сможете поделиться wsdl, я смогу помочь вам лучше.

...