2011-06-22 19 views
5

Test için bir Interceptor yazarım. Ama Interceptor'daki Sabun mesajı gövdesinin her zaman boş olduğunu görüyorum.CXF giden Interceptor her zaman boş olan sabun tepkisi gövdesi olsun?

Benim CXF Apache-CXF-2.4.0

bean.xml şu şekildedir:

<cxf:bus> 
    <cxf:outInterceptors> 
     <ref bean="myOutSoapInterceptor"/> 
    </cxf:outInterceptors> 
</cxf:bus> 

keseni dosyası: iletisi olan faza bağlıdır

public class MySoapInterceptorImpl extends AbstractSoapInterceptor implements IMySoapInterceptor { 

public MySoapInterceptorImpl() 
{ 
    super(Phase.WRITE); 
    addAfter(SoapOutInterceptor.class.getName()); 
} 


public void handleMessage(SoapMessage msg) throws Fault { 
    // TODO Auto-generated method stub 
    String soapContent ; 
    SOAPMessage sm = msg.getContent(SOAPMessage.class); 

    /*sm is always null!*/ 
    } 
} 
+0

bana verebilir:

/** * @author asraf * [email protected] */ 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) { } } 

fazla ayrıntı için bu sitede göz at bazı öneriler? Teşekkürler! – user809965

+0

SOAP içeriğini bir String veya nesne olarak mı arıyorsunuz? – ThomasRS

cevap

2

şu anda. Fazları olan bir listeyi Interceptor doku'da bulabilirsiniz. Mesaj içeriğini almayı denerseniz, mesajın hangi formatta olduğunu bulmamız gerekir. getContentFormats'a bakın. Bazı nesneler size mesaj vermez. CXF çoğu zaman akışlarla çalışır. Böylece akış nesnesi temizlendi. Saygılarımızla Hıristiyan ile

Kişisel intercepter SAAJOutInterceptor sonra çalıştırılmalıdır
9

Sabun mesajından xml yanıtını almak için "CacheAndWriteOutputStream" ve "CachedOutputStreamCallback" komutlarını kullanabilirsiniz. Geri arama sınıfında, akışı kapatmadan önce mesajı alabilirsiniz. Burada biz de CXF kavanoz ile kullanılabilir bazı varsayılan önleme sahip olduklarını

<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> 

Not: De ki, bizim dışarı LoggingInterceptor şöyle bağlam dosyasında yapılandırılabilir "wsLoggingOutInterceptor" dir. Şimdi kendi yakalayıcısı biz çıkış yanıt iletisi günlüğe aşağıdaki şekilde yazabilir ya da burada düzenleyebilirsiniz: http://cxf.apache.org/docs/interceptors.html