Jaxrs multiparte

Estoy intentando realizar una solicitud a un servicio jaxrs que tiene el tipo de medio configurado enmultipart/form-data. Esta solicitud contiene una lista de entidades (xml) y una imagen (png, binario). He creado la solicitud como se describe enesta Hilo de BalusC.

La solicitud parece estar bien después de inspeccionarla en Wirehark, excepto que la suma de comprobación del encabezado de IP es incorrecta (dice algo acerca de que "puede haber una descarga de suma de comprobación de IP").

Mi gran problema aquí es cómo manejar la solicitud multiparte en el lado del servicio. No deseo incluir bibliotecas de apache.cxf, resteasy ni nada por el estilo. Todo lo que quiero confiar es el jaxrs api.

Las dos partes en la solicitud tienen nombresdeliveries ysignature, donde la firma es un archivo de imagen png enviado como binario. La lista de entregas se debe analizar desde un xml (la entidad tiene laxmlrootelement anotación y tal, por lo que esta parte funciona por separado). He intentado con esta forma de leer las diferentes partes, pero esto fue realmente un golpe largo;

@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.
}

Por supuesto, esto no funciona, y me da un código de estado HTTP 404 si ejecuto la solicitud en Websphere, y un 415 cuando ejecuto la solicitud hacia un openejb incrustado (en nuestro marco de prueba de integración). Si quito elFormParam anotaciones la solicitud tiene éxito.

¿Cómo puedo leer las diferentes partes de la solicitud multiparte utilizando solo la api de jaxrs?

EDITAR Ok, así que arreglé laPUT aPOST, y agregó un@Encoding Anotación a los parámetros como tal:

@POST
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(
    @Encoded @FormParam("deliveries") String deliveries,
    @Encoded @FormParam("signature") File signature) {

}

Ahora obtengo el xml como una cadena de texto, pero no puedo desmarcarlo automáticamente en una lista de entregas a pesar de queContent-Type de esta parte de la carga útil se establece enapplication/xml. El otro problema es que el archivo que recibí tiene una longitud == 0, y no puedo leer ningún byte de él.

¿Me estoy perdiendo un punto esencial aquí?

Respuestas a la pregunta(3)

Su respuesta a la pregunta