Чтобы получить ответ xml из сообщения мыла, вы можете использовать «CacheAndWriteOutputStream» и «CachedOutputStreamCallback».В классе обратного вызова вы можете получить сообщение до закрытия потока.Скажем, наш out LoggingInterceptor - это «wsLoggingOutInterceptor», который можно настроить в файле контекста следующим образом:
<bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="logOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<bean id="wsLoggingOutInterceptor" class="org.jinouts.webservice.logging.WSLoggingOutInterceptor"></bean>
<cxf:bus>
<cxf:inInterceptors>
<ref bean="loggingInInterceptor"/>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="logOutInterceptor"/>
<ref bean="wsLoggingOutInterceptor"/>
</cxf:outInterceptors>
</cxf:bus>
Обратите внимание, что здесь у нас также есть перехватчик по умолчанию, который доступен с jar-файлами CXF.Теперь в нашем собственном перехватчике мы можем написать следующее сообщение для регистрации выходного ответного сообщения или вы также можете отредактировать здесь:
/**
* @author asraf
* asraf344@gmail.com
*/
public class WSLoggingOutInterceptor extends AbstractLoggingInterceptor
{
public WSLoggingOutInterceptor()
{
super(Phase.PRE_STREAM );
}
@Override
public void handleMessage ( Message message ) throws Fault
{
// TODO Auto-generated method stub
OutputStream os = message.getContent ( OutputStream.class );
CacheAndWriteOutputStream cwos = new CacheAndWriteOutputStream ( os);
message.setContent ( OutputStream.class, cwos );
cwos.registerCallback ( new LoggingOutCallBack ( ) );
}
@Override
protected Logger getLogger ( )
{
// TODO Auto-generated method stub
return null;
}
}
class LoggingOutCallBack implements CachedOutputStreamCallback
{
@Override
public void onClose ( CachedOutputStream cos )
{
try
{
if ( cos != null )
{
System.out.println ("Response XML in out Interceptor : " + IOUtils.toString ( cos.getInputStream ( ) ));
}
}
catch ( Exception e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onFlush ( CachedOutputStream arg0 )
{
}
}
Посмотрите этот сайт для получения более подробной информации: http://cxf.apache.org/docs/interceptors.html