2016-10-31 4 views
0

Ich versuche, Ausnahmen mit der ResponseExceptionMapper-Klasse für meine CXF-Client zu behandeln.ResponseExceptionMapper in CXF-Client

ExceptionHandlingCode:

public class MyServiceRestExceptionMapper implements ResponseExceptionMapper<Exception> { 


private static final Logger LOGGER = LoggerFactory.getLogger(MyServiceRestExceptionMapper .class); 

public MyServiceRestExceptionMapper() { 
} 

@Override 
public Exception fromResponse(Response response) { 

    LOGGER.info("Executing MyServiceRestExceptionMapper class"); 

    Response.Status status = Response.Status.fromStatusCode(response.getStatus()); 

    LOGGER.info("Status: ", status.getStatusCode()); 

    switch (status) { 

     case BAD_REQUEST: 
      throw new InvalidServiceRequestException(response.getHeaderString("exception")); 

     case UNAUTHORIZED: 
      throw new AuthorizationException(response.getHeaderString("exception")); 

     case FORBIDDEN: 
      throw new AuthorizationException(response.getHeaderString("exception")); 

     case NOT_FOUND: 
      throw new 
        EmptyResultDataAccessException(response.getHeaderString("exception")); 

     default: 
      throw new InvalidServiceRequestException(response.getHeaderString("exception")); 

    } 

} 

} 

CXF Client-Code:

String url1= 
WebClient client = createWebClient(url1).path(/document); 
client.headers(someHeaders); 
Response response = client.post(byteArry); 

Für den Erfolg Szenarien, ich bin die richtige Antwort-Code von 200 bekommen, aber für Ausfallszenarien, bekomme ich nie eine Antwort Code.

Auch gibt es eine bessere Möglichkeit, Ausnahmen in CXF-Client zu behandeln.

Könnte jemand bitte dabei helfen.

Antwort

1

Wie haben Sie den ResponseExceptionMapper beim WebClient registriert?

Sie brauchen so etwas wie diese

List<Object> providers = new ArrayList<Object>(); 
providers.add(new MyServiceRestExceptionMapper() 
WebClient client = WebClient.create(url, providers); 

Ich schlage vor, ein WebApplicationException insteadof Exception zu verwenden, da das Standardverhalten, diese Art von Ausnahme ausgelöst wird, wenn kein ResponseExceptionMapper registriert ist. Geben Sie außerdem die Ausnahme zurück, werfen Sie sie nicht. Der Ausnahme-Mapper sollte so aussehen.

public class MyServiceRestExceptionMapper implements ResponseExceptionMapper<WebApplicationException> 

    public MyServiceRestExceptionMapper() { 
    } 

    @Override 
    public WebApplicationException fromResponse(Response response) { 
     //Create your custom exception with status code 
     WebApplicationException ex = ... 

     return ex; 
    } 
}