SOAPMessage, странное поведение при извлечении SOAPBody - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь извлечь текст сообщения мыла, используя перехватчик cxf.Вот код:

@Component
public class SoapBodyExtractorInterceptor extends AbstractSoapInterceptor {

private static final Logger logger = LogManager.getLogger(SoapBodyExtractorInterceptor.class);

public SoapBodyExtractorInterceptor() {
    super(Phase.PRE_PROTOCOL);
}

@Override
public void handleMessage(SoapMessage soapMessage) throws Fault {
    try {
        InputStream is = soapMessage.getContent(InputStream.class);
        SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);
        SOAPBody soapBody = request.getSOAPBody();

        DOMSource source = new DOMSource(soapBody);
        StringWriter stringResult = new StringWriter();
        TransformerFactory.newInstance().newTransformer().transform(source, new StreamResult(stringResult));

        soapMessage.getExchange().put(ExchangeContextEnum.XML_SOAP_BODY.toString(), stringResult.toString());
    } catch (SOAPException | IOException | TransformerException e) {
        logger.warn("An error occurred while extracting soap body.");
        throw new Fault(e);
    }
}
}

Что происходит, когда метод request.getSOAPBody() выполняется, он выдает com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source

Причина: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.

Но если вызватьэтот метод во второй раз на том же объекте, используя отладчик, он на самом деле работает нормально.Такое поведение кажется мне действительно странным.Как я могу это исправить?

...