Служба загрузки файлов CXF: не удалось определить границу из сообщения
Я создаю прототип очень просто POST
Сервис для загрузки файла:
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("fileUpload")
public Response uploadFile(MultipartBody body) {
//never gets to here
System.out.println("In uploadFile");
//TODO: implementation
return Response.ok().build();
}
я получил
org.apache.cxf.interceptor.Fault: Не удалось определить границу из сообщения!
Я также попытался заменить объявление метода:
public Response uploadFile(List<Attachment> attachments,
@Context HttpServletRequest request) {
Согласно некоторым выводам Google, без помощи.
Я использую два разных клиента для вызова этого сервиса: chrome: // poster, в котором есть поле для вложения файла и простой Python
Сценарий, как объясняется здесь. Оба клиента дают одинаковый результат.
Как я должен изменить свою реализацию сервиса или вызов или оба, чтобы иметь возможность пройти валидацию CXF и войти в фактическое тело сервиса?
РЕКОМЕНДАЦИИ:
1 ответ
Код на стороне сервера выглядит нормально. Проблема в том, как вы отправляете данные от клиента. Вы отправляете данные в виде потока в полезной нагрузке, а не в качестве вложения, которое имеет границы. Для быстрой проверки вы можете включить ведение журнала запросов и ответов, включив функцию CXF LoggingFeature
или перехватчики LoggingInInterceptor
а также LoggingoutInterceptor
, В журнале, если вы видите данные, поступающие с полезной нагрузкой, вы отправляете данные в виде потока, в этом случае вам нужно изменить способ отправки данных, иначе вы можете изменить потребление на application / octetstream и получать данные с использованием inputsream напрямую.
Я не знаю, какой инструмент вы используете, однако я использую расширение Chrome для почтальона для тестирования сервисов REST. Если вы установите расширение и запустите приложение.
Вы можете загрузить файл, используя следующий подход.
- Изменить тип метода на
POST
из выпадающего списка. - Введите
URL
- Выберите вкладку
Body
- Выбрать
Form-Data
Переключатель - В правой части строки выберите
file
от выпадающего. как показано на диаграмме. - Выберите файл для загрузки.
- Необязательно введите многочастный ключ.
- Наконец нажмите кнопку отправить.
Мы можем воспроизвести вашу ошибку, выбрав двоичный переключатель и загрузив файл, как показано ниже.