Поддерживает ли SaajSoapMessageFactory Mtom резонанс на стороне клиента? - PullRequest
0 голосов
/ 01 декабря 2018

Я пишу Spring Webservice Client, который вызывает SOAP-сервис, он возвращает SOAP-ответ с вложением (MTOM-> XOP включает тег в Response).

В моем текущем клиентском коде я использую SaajSoapMessageFactory и вставляюто же самое в моем WebServiceTemplate также я установил MtomEnabled в true в моем маршаллере.

При этой настройке, когда я вызываю свою службу SOAP, мой клиентский код может читать тело ответа SOAP, но часть вложения в теле ответа пуста,Для того же запроса в SOAP UI я могу получить вложение.

Поддерживает ли SaajSoapMessageFactory на стороне клиента ответ MTOM?

1 Ответ

0 голосов
/ 10 декабря 2018

Я извлек вложение с помощью SaajSoapMessageFactory

@SuppressWarnings("rawtypes")
public class MtomContentRespExtractor implements WebServiceMessageExtractor {


    private static final Logger logger = LoggerFactory.getLogger(MtomContentRespExtractor.class);

    private JAXBContext jaxbContext = null;
    private Class<MyContentResponse> responseType;

    public MtomContentRespExtractor(JAXBContext jaxbContext,
                       Class<MyContentResponse> responseType) {
        this.jaxbContext  = jaxbContext;
        this.responseType = responseType;

    }

    @Override
    public Object extractData(WebServiceMessage webServiceMsg) throws IOException, TransformerException {


        JAXBElement<MyContentResponse> jaxbElement = null;
        MyContentResponse myContResp = null;


        try {

            jaxbElement = jaxbContext.createUnmarshaller()
                          .unmarshal(webServiceMsg.getPayloadSource(), responseType);

            Attachment attachment = (Attachment) ((SaajSoapMessage) webServiceMsg).getAttachments().next();
            myContResp =    (MyContentResponse) jaxbElement.getValue();
                        attachment.getInputStream()

            //Logic for response


        } catch (JAXBException e) {
            logger.error(e.getMessage());
        }


        return myContResp;
    }
...