Служба загрузки файлов 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. Если вы установите расширение и запустите приложение.

Вы можете загрузить файл, используя следующий подход.

введите описание изображения здесь

  1. Изменить тип метода на POST из выпадающего списка.
  2. Введите URL
  3. Выберите вкладку Body
  4. Выбрать Form-Data Переключатель
  5. В правой части строки выберите file от выпадающего. как показано на диаграмме.
  6. Выберите файл для загрузки.
  7. Необязательно введите многочастный ключ.
  8. Наконец нажмите кнопку отправить.

Мы можем воспроизвести вашу ошибку, выбрав двоичный переключатель и загрузив файл, как показано ниже.

введите описание изображения здесь

Другие вопросы по тегам