Я использую 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
как и ожидалось) или, может быть, поймать это исключение и повторно выдать его.
EDIT
Мне удалось сделать это через перехватчики, вот так
@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
)
Я благодарю любую помощь заранее