Я пытаюсь извлечь текст сообщения мыла, используя перехватчик 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.
Но если вызватьэтот метод во второй раз на том же объекте, используя отладчик, он на самом деле работает нормально.Такое поведение кажется мне действительно странным.Как я могу это исправить?