Я пытаюсь выполнить запрос к службе jaxrs, которая имеет тип носителя, установленный в multipart/form-data
. Этот запрос содержит список объектов (xml) и изображение (png, двоичный). Я создал запрос, описанный в этом потоке от BalusC.
Запрос выглядит нормально после проверки его в wirehark, за исключением ошибочной контрольной суммы ip-заголовка (говорит что-то о "может быть вызвано разгрузкой контрольной суммы IP".)
Моя большая проблема здесь заключается в том, как обрабатывать множественный запрос со стороны службы. Я не хочу включать какие-либо библиотеки из apache.cxf, resteasy или что-то в этом роде. Все, на что я хочу положиться, это jaxrs api.
Две части запроса имеют имена deliveries
и signature
, где подпись представляет собой файл изображения png, отправленный как двоичный файл. Список поставок должен анализироваться из xml (сущность имеет аннотацию xmlrootelement
и т.д., Поэтому эта часть работает отдельно). Я попытался таким образом прочитать разные части, но это был действительно длинный снимок;
@PUT
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(@FormParam("deliveries") List<Delivery> deliveries, @FormParam("signature")File signature) {
//do something with the signature(image) and the list of deliveries.
}
Это не работает, и он дает мне 404 код статуса http, если я запускаю запрос на Websphere, и 415, когда я запускаю запрос на встроенный openejb (в нашей тестовой платформе интеграции). Если я удалю аннотации FormParam
, запрос будет успешным.
Как я могу прочитать разные части многостраничного запроса, используя только jaxrs api?
ИЗМЕНИТЬ
Итак, я привязал PUT
к POST
и добавил аннотацию @Encoding
к параметрам следующим образом:
@POST
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(
@Encoded @FormParam("deliveries") String deliveries,
@Encoded @FormParam("signature") File signature) {
}
Теперь я получаю xml в виде текстовой строки, но я не могу автоматически развязать ее в список поставок, даже если Content-Type
этой части полезной нагрузки установлен на application/xml
. Другая проблема заключается в том, что файл, который я получаю, имеет длину == 0, и я не могу прочитать никаких байтов из него.
Не хватает ли здесь важного пункта?