2011-01-31 32 views
5

Tôi đã viết trình chặn chặn tùy chỉnh thực hiện một số xác thực tham số. Tôi muốn có thể trả về một mã lỗi và tuần tự hóa một lớp được chú thích JAXB làm phần trả lời.Apache CXF: cách trả về phản hồi lỗi từ thiết bị chặn

Nếu tôi ném một ngoại lệ WebApplicationException, nó không có bất kỳ xử lý đặc biệt nào được thực hiện để tuần tự hóa đối tượng Response bên trong (điều này có ý nghĩa; Tôi giả định rằng được thực hiện bởi một kẻ đánh chặn khác).

Làm cách nào tôi nên dừng việc chặn chuỗi chặn nhưng vẫn có JAXB tuần tự hóa đối tượng phản hồi?

Trả lời

3

Vâng, ít nhất trong dòng chảy chặn CXF-RS JAX, nếu bạn thiết lập:

message.getExchange().put(Response.class, response); 

... sau đó các dịch vụ thực tế không nhận được viện dẫn, trong khi các giai đoạn khác không nhận được viện dẫn. Chưa đào vào mã CXF để xem nơi mà đá logic trong

Vì vậy, tôi đã xây dựng một câu trả lời như thế này:.

Response response = Response 
    .status(Response.Status.FORBIDDEN) 
    .entity(new ErrorEntity("This is a JAXB object with an error string")) 
    .build(); 

Tôi cũng có một số xác thực tùy chỉnh chạy trong một CXF JAX-RS lọc và tôi chỉ muốn kiểm tra các tham số khi xác thực là ổn, vì vậy tôi đặt lớp chặn tham số của mình để chạy trong giai đoạn PRE_INVOKE.

+0

Nhưng cách này không hoạt động nếu chúng tôi làm việc với giao thức SOAP. Ai đó có thể vui lòng cung cấp thông tin cập nhật cho trường hợp SOAP? –

Các vấn đề liên quan