У меня тоже была эта проблема сегодня. После большого плача и скрежета зубов я смог изменить класс StreamInterceptor в демонстрационной версии configuration_interceptor , которая поставляется с источником CXF:
OutputStream os = message.getContent(OutputStream.class);
CachedStream cs = new CachedStream();
message.setContent(OutputStream.class, cs);
message.getInterceptorChain().doIntercept(message);
try {
cs.flush();
CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class);
String soapMessage = IOUtils.toString(csnew.getInputStream());
...
Переменная soapMessage
будет содержать полное сообщение SOAP. Вы должны быть в состоянии манипулировать мыльным сообщением, сбрасывать его в выходной поток и выполнять вызов message.setContent(OutputStream.class...
, чтобы внести изменения в сообщение. Это не дает никаких гарантий, так как я сам новичок в CXF!
Примечание. CachedStream - это закрытый класс в классе StreamInterceptor. Не забудьте настроить перехватчик для работы в фазе PRE_STREAM, чтобы перехватчики SOAP могли написать сообщение SOAP.