2010-07-02 29 views

Odpowiedz

11

Spróbuj dodać Response Object jako wartości zwracanej gdzie można ustawić nagłówki ..

Response.ok(/* some entity */).header("CustomHeader", "CustomValue").build(); 

Nie trzeba używać przechwytujących

-1

Sprawdź CustomOutInterceptor.java w folderze src/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ od Dystrybucja źródła cxf-2.3.3 dla działającego demo:

import javax.ws.rs.core.MultivaluedMap; 

import org.apache.cxf.interceptor.Fault; 
import org.apache.cxf.jaxrs.impl.MetadataMap; 
import org.apache.cxf.message.Message; 
import org.apache.cxf.phase.AbstractPhaseInterceptor; 
import org.apache.cxf.phase.Phase; 

public class MyOutInterceptor extends AbstractPhaseInterceptor<Message> { 

    public MyOutInterceptor() { 
     super(Phase.MARSHAL); 
    } 

    public void handleMessage(Message message) throws Fault { 
     MultivaluedMap<String, Object> headers = new MetadataMap<String, Object>(); 
     headers.putSingle("BookId", "123"); 
     message.put(Message.PROTOCOL_HEADERS, headers); 
    } 
} 

Domyślam się, że kod wysłany jako ostatnia próba pochodzi z 1. Próbowałem tego również, nie mogłem go uruchomić albo ...

6

To brzmi jak możesz to zrobić używając CXF CachedOutputStream.

public class MD5OutInterceptor extends AbstractPhaseInterceptor<Message> { 

    public MD5OutInterceptor() { 
     super(Phase.MARSHAL); 
    } 

    public final void handleMessage(Message message) { 


     OutputStream os = message.getContent(OutputStream.class); 
     if (os == null) { 
      return; 
     } 

     final CachedOutputStream cos = new CachedOutputStream(os); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     cos.writeCacheTo(baos); 

     // calculate MD5 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     byte[] mdBytes = md.digest(baos); 

     MultivaluedMap<String, Object> headers = (MetadataMap<String, Object>) message.get(Message.PROTOCOL_HEADERS); 

     if (headers == null) { 
      headers = new MetadataMap<String, Object>(); 
     }    

     headers.add("MD5-Header", new String(mdBytes)); 
     message.put(Message.PROTOCOL_HEADERS, headers); 
    } 
} 

Nie zapomnij skonfigurować przechwytujących w CXF pliku konfiguracyjnego:

<jaxrs:server> 
    <jaxrs:outInterceptors> 
     <ref bean="md5OutInterceptor"> 
    </jaxrs:outInterceptors> 
</jaxrs:server> 

<bean id="md5OutInterceptor" class="com.whatever.MD5OutInterceptor" /> 
Powiązane problemy