Implementando Recursos Usando Mensagens Multipartes

Uma mensagem multipartes contém uma ou mais mensagens dentro de sua estrutura. Cada parte de mensagem pode possuir seu próprio tipo de conteúdo. Usando a API IBM® Java™ para Serviços da Web RESTful (JAX-RS), é possível produzir e consumir mensagens multipartes.

Sobre Esta Tarefa

O IBM JAX-RS fornece classes a partir de um Wink Apache para modelar um pedido multipartes e uma resposta multipartes. Além disso, o IBM JAX-RS inclui provedores de entidade, por padrão, que suportam mensagens multipartes. Esses provedores de entidade podem serializar e desserializar as instâncias de classe multipartes quando o tipo de conteúdo de mensagem for compatível com multipart/*.

Para processar mensagens multipartes usando as APIs Apache Wink, é necessário usar as classes definidas para representar a entidade do corpo de mensagem multipartes.

Use as seguintes classes para representar um pedido multipartes recebido:
org.apache.wink.common.model.multipart.InMultiPart
org.apache.wink.common.model.multipart.BufferedInMultiPart

Use um dos tipos de classe de pedidos multipartes recebidos como um parâmetro de método no seu método de recurso. A classe InMultiPart flui a mensagem de pedido enquanto que a classe BufferedInMultiPart armazena a mensagem inteira na memória. Fluir a mensagem consome menos memória, mas é possível acessar apenas partes da mensagem uma vez de maneira iterativa. Por outro lado, usando armazenamento em buffer, é possível ler qualquer parte da mensagem a qualquer momento.

Use as seguintes classes para representar uma resposta multipartes de saída:
org.apache.wink.common.model.multipart.OutMultiPart
org.apache.wink.common.model.multipart.BufferedOutMultiPart

É possível retornar uma instância de um dos tipos de resposta multipartes de saída no seu método de recurso. A classe OutMultiPart flui a resposta multipartes enquanto que a classe BufferedOutMultiPart armazena a mensagem inteira na memória.

Essas classes multipartes de entrada e de saída usam os provedores de entidade JAX-RS para serializar e desserializar partes individuais da mensagem multipartes.

Para saber mais sobre as classes de mensagem multipartes, consulte a documentação da API Apache Wink.

Procedimento

  1. Determine se deseja usar a classe multipartes que flui as mensagens ou use a classe multipartes que armazena em buffer as mensagens. Considere o desempenho e as capacidades ao determinar qual implementação de mensagem multipartes é melhor para suas necessidades de negócios.
  2. Se uma mensagem multipartes for recebida, use uma das classes InMultiPart para desserializar a entidade de pedido.
    Por exemplo, inclua o parâmetro InMultiPart no método de recurso:
    @POST
    @Consumes("multipart/mixed")
    public void processMessage(InMultiPart inPart) {
    
    }
    O seguinte fragmento de código é um exemplo de um pedido que possui um valor de cabeçalho de pedido de Conteúdo-Tipo de multipart/mixed;boundary=myboundary e um corpo de mensagem:
    --myboundary
    Content-Type: text/plain
    MyCustomPartHeader: ThisIsTheGreetingPart
    
    Hello world
    --myboundary
    Content-Type: text/custom
    
    Bonjour
    --myboundary--
    O seguinte exemplo de código pode ler cada parte de uma mensagem multipartes:
    @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. Se uma mensagem multipartes tiver que ser enviada, use uma das classes OutMultiPart para serializar a entidade de pedido.
    Por exemplo, retorne uma instância BufferedOutMultiPart a partir do método de recurso:
    @GET
    @Produces("multipart/mixed;boundary=myboundary")
    public BufferedOutMultiPart processMessage() {
        BufferedOutMultiPart mpout = new BufferedOutMultiPart();
        mpout.setBoundary("myboundary");
    
        /* primeira parte */
        OutPart op = new OutPart();
        op.setBody("Hello world");
        op.setContentType("text/plain");
        op.addHeader("MyCustomHeader", "ThisIsTheGreetingPart");
        mpout.addPart(op);
    
        /* segunda parte */
        op = new OutPart();
        byte[] binaryData = "Bonjour".getBytes("UTF-8");
        op.setBody(binaryData);
        op.setContentType("custom/binarytype");
        mpout.addPart(op);
        return mpout;
    }
    O código de resposta anterior pode responder ao pedido com uma mensagem como o seguinte exemplo:
    --myboundary
    Content-Type: text/plain
    MyCustomHeader: ThisIsTheGreetingPart
    
    Hello world
    --myboundary
    Content-Type: custom/binarytype
    
    Bonjour
    --myboundary--

Resultados

É possível receber e enviar mensagens multipartes que contêm vários tipos de conteúdo.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipartcontent_impl
Nome do arquivo: twbs_jaxrs_multipartcontent_impl.html