Отправка вложения SOAP с помощью Camel + Spring WS?

Я пытался отправить вложение 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 с помощью Camel + SpringWS?


person NoodleX    schedule 30.08.2011    source источник


Ответы (3)


Я не знаком с 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.

person evandongen    schedule 21.09.2011

Компонент 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(key)=value в заголовке мыла.

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

person Andrej    schedule 20.11.2012

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

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

person Mudassir Rehman    schedule 02.05.2018