Implemente recursos utilizando mensajes de múltiples partes

Un mensaje de múltiples partes contiene uno o varios mensajes en su estructura. Cada parte del mensaje puede tener su propio tipo de contenido. Mediante la utilización de IBM® Java™ API for RESTful Web Services (JAX-RS), puede generar y consumir mensajes de múltiples partes.

Acerca de esta tarea

IBM JAX-RS proporciona clases de Apache Wink para formar una solicitud de múltiples partes y una respuesta de múltiples partes. Además, IBM JAX-RS incluye proveedores de entidades, de forma predeterminada, que dan soporte a mensajes de múltiples partes. Estos proveedores de entidades pueden serializar y deserializar las instancias de clases de múltiples partes cuando el tipo de contenido del mensaje es compatible con multipart/*.

Para procesar mensajes de múltiples partes utilizando las API de Apache Wink, debe utilizar clases definidas para representar la entidad del cuerpo del mensaje de múltiples partes.

Utilice las clases siguientes para representar una solicitud de entrada de múltiples partes:
org.apache.wink.common.model.multipart.InMultiPart
org.apache.wink.common.model.multipart.BufferedInMultiPart

Utilice uno de los tipos de clase de solicitud de entrada de múltiples partes como parámetro de método en el método de recurso. La clase InMultiPart difunde el mensaje de solicitud mientras que la clase BufferedInMultiPart almacena todo el mensaje en la memoria. La difusión del mensaje consume menos memoria pero solamente puede acceder a las partes del mensaje una vez de forma iterativa. En cambio, si utiliza el almacenamiento intermedio, podrá leer todas las partes del mensaje cuando lo desee.

Utilice las clases siguientes para representar una respuesta saliente de múltiples partes:
org.apache.wink.common.model.multipart.OutMultiPart
org.apache.wink.common.model.multipart.BufferedOutMultiPart

Puede devolver una instancia de uno de los tipos de respuestas salientes de múltiples partes en el método de recurso. La clase OutMultiPart difunde la respuesta de múltiples partes mientras que la clase BufferedOutMultiPart almacena todo el mensaje en la memoria.

Estas clases entrantes y salientes de múltiples partes utilizan proveedores de JAX-RS para serializar y deserializar partes individuales del mensaje de múltiples partes.

Para obtener más información sobre las clases de mensajes de múltiples partes, consulte la documentación de la API de Apache Wink.

Procedimiento

  1. Determine si desea utilizar la clase de múltiples partes que difunde mensajes o utilizar la clase de múltiples partes que realiza un almacenamiento intermedio de los mensajes. Considere el rendimiento y las prestaciones a la hora de determinar la implementación de mensajes de múltiples partes que resulte más conveniente para sus necesidades empresariales.
  2. Si se recibe un mensaje de múltiples partes, utilice una de las clases InMultiPart para deserializar la entidad de solicitudes.
    Por ejemplo, añada el parámetro InMultiPart en el método de recursos:
    @POST
    @Consumes("multipart/mixed")
    public void processMessage(InMultiPart inPart) {
    
    }
    El fragmento de código siguiente es un ejemplo de una solicitud que tiene un valor de cabecera de solicitudes del tipo de contenido multipart/mixed;boundary=myboundary y un cuerpo de mensaje:
    --myboundary
    Content-Type: text/plain
    MyCustomPartHeader: ThisIsTheGreetingPart
    
    Hello world
    --myboundary
    Content-Type: text/custom
    
    Bonjour
    --myboundary--
    En el siguiente ejemplo de código se puede leer cada parte del mensaje de múltiples partes:
    @POST
    @Consumes("multipart/mixed")
    public void processMessage(InMultiPart inMultiPart) throws IOException {
        int counter = 0;
        while(inMultiPart.hasNext()) {
            counter++;
            InPart part = inMultiPart.next();
            System.out.println("The part number is: " + counter);
            System.out.println("The content type is: " + part.getContentType());
            System.out.println("The content body is: " + part.getBody(String.class, String.class));
            System.out.println("The content headers are: " + part.getHeaders());
        }
    }
  3. Si es necesario enviar un mensaje de múltiples partes, utilice una de las clases OutMultiPart para serializar la entidad de solicitudes.
    Por ejemplo, se devuelve una instancia de BufferedOutMultiPart desde el método de recursos:
    @GET
    @Produces("multipart/mixed;boundary=myboundary")
    public BufferedOutMultiPart processMessage() {
        BufferedOutMultiPart mpout = new BufferedOutMultiPart();
        mpout.setBoundary("myboundary");
    
        /* first part */
        OutPart op = new OutPart();
        op.setBody("Hello world");
        op.setContentType("text/plain");
        op.addHeader("MyCustomHeader", "ThisIsTheGreetingPart");
        mpout.addPart(op);
    
        /* second part */
        op = new OutPart();
        byte[] binaryData = "Bonjour".getBytes("UTF-8");
        op.setBody(binaryData);
        op.setContentType("custom/binarytype");
        mpout.addPart(op);
        return mpout;
    }
    El código de respuesta anterior puede responder a la solicitud con un mensaje como el siguiente ejemplo de código:
    --myboundary
    Content-Type: text/plain
    MyCustomHeader: ThisIsTheGreetingPart
    
    Hello world
    --myboundary
    Content-Type: custom/binarytype
    
    Bonjour
    --myboundary--

Resultados

Puede recibir y enviar mensajes de múltiples partes que contengan varios tipos de contenido.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipartcontent_impl
File name: twbs_jaxrs_multipartcontent_impl.html