나는이 서비스를 편안하고 웹 서비스 아파치 CXF 설정 업로드 크기
를 만들기 위해 CXF 2.4.4을 사용하고 있습니다.첨부 파일 크기를 제한하고 싶습니다. this documentation을 찾았습니다. 단, 작업 결과는 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
)
사전에 도움을 주셔서 감사합니다.
안녕하세요, 감사를 반환합니다. 나는 당신이 말한 것을 시도했지만, 클라이언트로부터 http 요청을 실행할 때 나는 여전히 500을 얻는다. 내가 뭘 잘못하고 있는지 모르겠다. –
@MHero : 아주 이상하다. 어쩌면 당신은 CXF에 대한 버그를 제기해야한다. (예를 들어, 500 번으로의 변환을 일으키는 또 다른 필터를 설치하지 않았다면, 나는 과거에 비슷한 바보 같은 일을했다.) –