Я использую cxf 2.4.4 для создания веб-сервисов RESTful
У меня есть этот сервис:
@WebService
public interface Remote {
@POST
@Path("/create")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_XML)
public CustomXML makerService();
}
, который потребляет MULTIPART_FORM_DATA
.
Я хочуограничить размер вложений.Я нашел эту документацию , и она работает, за исключением того, что она возвращает HTTP 500 status
.
Пожалуйста, я хочу знать, как вернуть другой статус (HTTP 413 status
, как ожидалось) иливозможно поймать это исключение и перебросить его.
РЕДАКТИРОВАТЬ
Мне удалось сделать это через перехватчики, как это
@Service("remote")
@InInterceptors(interceptors = {"myCompany.AttachmentInInterceptor"})
public class RemoteImpl implements Remote {
...
}
и перехватчик:
public class AttachmentInInterceptor extends AbstractPhaseInterceptor<Message> {
public AttachmentInInterceptor() {
super(Phase.RECEIVE);
}
public void handleMessage(Message message) {
String contentType = (String) message.get(Message.CONTENT_TYPE);
Map<String, List<String>> headers;
if (contentType != null && contentType.toLowerCase().indexOf("multipart/form-data") >= 0) {
AttachmentDeserializer ad = new AttachmentDeserializer(message);
headers = (Map<String, List<String>>) message.get(Message.PROTOCOL_HEADERS);
String len = headers.get("Content-Length").toString();
len = len.replaceAll("\\[", "");
len = len.replaceAll("\\]", "");
Long length = Long.valueOf(len);
if (length > 100000000) {
throw new Fault(new CustomException("Archivo grande", ErrorCode.ERROR.getCode()));
}
try {
ad.initializeAttachments();
} catch (IOException e) {
throw new Fault(e);
}
}
}
@Override
public void handleFault(Message message) {
}
}
но я все еще не могу отправить требуемый ответ (HTTP 413 status
)
Заранее благодарен за любую помощь