2010-10-20 20 views
6

Spring-ws uç noktasında HTTP başlıklarına nasıl erişebilirim?Spring-ws uç noktadaki HTTP üstbilgileri nasıl erişilir?

Benim kod şöyle görünür:

public class MyEndpoint extends AbstractMarshallingPayloadEndpoint { 
    protected Object invokeInternal(Object arg) throws Exception { 
     MyReq request = (MyReq) arg; 
     // need to access some HTTP headers here 
     return createMyResp(); 
    } 
} 

invokeInternal() parametre olarak sadece unmarshalled JAXB nesne alır. invokeInternal() içinde istekle birlikte gelen HTTP başlıklarına nasıl erişebilirim?

Muhtemelen işe yarayacak bir yol, ThreadLocal değişkenine üstbilgi değerlerini depolayan bir Servlet filtresi oluşturmaktır, daha sonra invokeInternal() içinde erişilebilir, ancak bunu yapmak için daha güzel, daha fazla yay benzeri bir yol var mı?

cevap

12

Bu yöntemleri ekleyebilirsiniz. TransportContextHolder, bir iş parçacığı yerel değişkeninde aktarımla ilgili bazı verileri (bu durumda HTTP) tutacaktır. 'a TransportContext'dan erişebilirsiniz.

protected HttpServletRequest getHttpServletRequest() { 
    TransportContext ctx = TransportContextHolder.getTransportContext(); 
    return (null != ctx) ? ((HttpServletConnection) ctx.getConnection()).getHttpServletRequest() : null; 
} 

protected String getHttpHeaderValue(final String headerName) { 
    HttpServletRequest httpServletRequest = getHttpServletRequest(); 
    return (null != httpServletRequest) ? httpServletRequest.getHeader(headerName) : null; 
} 
1

Aynı tür bir sorunla karşılaştım (bkz. Bu other question). WS'ye Content-Type başlığı eklemem gerekiyordu. Servlet Filtresinin yoluna gittim. Çoğu zaman, HTTP başlıklarını bir web servisinde değiştirmenize gerek yoktur. Ama ... teori ile uygulama arasında bir fark var.

İlgili konular