CXF klienta Interceptor Validation z niestandardowym odpowiedzi nie działa

głosy
0

Próbuję napisać niestandardowy CXF Interceptor zrobić kilka walidacji SOAP na żądanie do usługi internetowej. Opierając się na wynikach walidacji, chcę zablokować żądanie do usługi internetowej i zwróci odpowiedź z niektórych zmodyfikowanych parametrów.

W tym pisałem niestandardową CXF ininterceptor rozciągający się od AbstractPhaseInterceptor, aby uruchomić w fazie USER_LOGICAL, co robi walidacji, ale nie jestem w stanie powstrzymać późniejsze połączenia do serwisu WWW, a także nie jest w stanie przekazać obiekt klienta Response (niestandardowego obiektu Response typ jest taki sam jak typ zwracany usług internetowych). W jaki sposób można to zrobić za pomocą przechwytujących?

Utwórz 13/06/2013 o 13:11
użytkownik
W innych językach...                            


3 odpowiedzi

głosy
0

Można przerwać wykonywanie interceptorChain tym WebService przy użyciu abortmetody

public void handleMessage(SoapMessage message) {

    InterceptorChain chain = message.getInterceptorChain();
    chain.abort();
}
Odpowiedział 13/06/2013 o 17:06
źródło użytkownik

głosy
0

Coś takiego, nie ma potrzeby, aby grać z łańcuchem Interceptor.

public void handleMessage(Message message) {
   //your logic
   Response response = Response.status(Status.UNAUTHORIZED).type(MediaType.APPLICATION_JSON).build();
   message.getExchange().put(Response.class, response);

}
Odpowiedział 14/06/2013 o 05:38
źródło użytkownik

głosy
1

Zrobiłem rozeznanie na czubku od nadirsaghar i uważam, że jest to rozwiązanie dostępne cleanes. Korzystanie message.getExchange () w JAX-WS jest pełna bólu, ponieważ trzeba skonfigurować kanał i samemu wypełnić komunikat odpowiedzi ...

Więc lepiej zrobić to w ten sposób, przy użyciu HttpServletResponse. - Trzeba mieć java servlet-api.jar na swojej drodze. Jeśli rozwój bez Maven, po prostu połączyć go ze swoim serwerze (np tomcat) katalogu, ale exlude ją od wdrożenia.

<!-- With Maven add the following dependency -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <!-- The version should match your WebService version e.g. 3.0 for JDK7-->
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

Z zakresu pod warunkiem, że nie zostanie wdrożony i jest tylko dostępna, dzięki czemu można uzyskać dostęp do klasy HttpServletResponse.

Twój kod Handler:

@Override
public void handleMessage( final Message message ) throws Fault
{
    if( shouldBlockMessage( message ) )
    {
        message.getInterceptorChain().abort();

        final HttpServletResponse response = (HttpServletResponse)message.get( AbstractHTTPDestination.HTTP_RESPONSE );

        // To redirect a user to a different Page
        response.setStatus( HttpServletResponse.SC_MOVED_TEMPORARILY );
        response.setHeader( "Location", "http://www.bla.blubb/redirectPage" );

        // Other possibility if a User provides faulty login data
        response.setStatus( HttpServletResponse.SC_FORBIDDEN );
    }
}
Odpowiedział 06/06/2014 o 07:52
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more