Implémentation des ressources en utilisant des messages à plusieurs parties

Un message à plusieurs parties contient un ou plusieurs messages dans sa structure. Chaque partie de message peut avoir son propre type de contenu. En utilisant IBM® Java™ API for RESTful Web Services (JAX-RS), vous pouvez produire et consommer des messages à plusieurs parties.

Pourquoi et quand exécuter cette tâche

IBM JAX-RS fournit des classes Apache Wink pour modéliser une demande à plusieurs parties et une réponse à plusieurs parties. En outre, IBM JAX-RS contient des fournisseurs d'entité, par défaut, qui prennent en charge les messages à plusieurs parties. Ces fournisseurs d'entités peuvent sérialiser et désérialiser les instances de classe à plusieurs parties lorsque le type de contenu du message est compatible avec multipart/*.

Pour traiter les messages à plusieurs parties en utilisant des API Apache Wink, vous devez utiliser des classes définies pour représenter l'entité de corps de message à plusieurs parties.

Utilisez les classes suivantes pour représenter une demande entrante à plusieurs parties :
org.apache.wink.common.model.multipart.InMultiPart
org.apache.wink.common.model.multipart.BufferedInMultiPart

Utilisez l'un des types de classes de demandes à plusieurs parties comme paramètre de méthode dans la méthode de ressource. La classe InMultiPart envoie le message de demande en continu alors que la classe BufferedInMultiPart stocke l'ensemble du message en mémoire. L'envoie en continu du message consomme moins de mémoire, mais les parties du message sont accessibles uniquement une seule fois de manière itérative. En revanche, en utilisant la mise en mémoire tampon, vous pouvez lire n'importe quelle partie du message à tout moment.

Utilisez les classes suivantes pour représenter une réponse sortante à plusieurs parties :
org.apache.wink.common.model.multipart.OutMultiPart
org.apache.wink.common.model.multipart.BufferedOutMultiPart

Vous pouvez retourner une instance de l'un des types de réponses à plusieurs parties sortants dans la méthode de ressource. La classe OutMultiPart envoie en continu la réponse à plusieurs parties, alors que la classe BufferedOutMultiPart stocke l'ensemble du message en mémoire.

Ces classes entrantes et sortantes à plusieurs parties utilisent des fournisseurs d'entité JAX-RS pour sérialiser et désérialiser les parties individuelles du message à plusieurs parties.

Pour plus d'informations sur les classes de messages à plusieurs parties, voir la documentation de l'API Apache Wink.

Procédure

  1. Déterminez si vous voulez utiliser la classe à plusieurs parties qui envoie en continu les messaqes ou utiliser la classe à plusieurs partie qui place les messages en mémoire tampon. Tenez compte des performances et des fonctions lorsque vous déterminez l'implémentation de message à plusieurs parties qui répond le mieux à vos besoins.
  2. Si un message à plusieurs parties est reçu, utilisez l'une des classes InMultiPart pour désérialiser l'entité de demande.
    Par exemple, ajoutez le paramètre InMultiPart à la méthode de ressource :
    @POST
    @Consumes("multipart/mixed")
    public void processMessage(InMultiPart inPart) {
    
    }
    Le fragment de code suivant est un exemple de demande ayant la valeur d'en-tête Content-Type, multipart/mixed;boundary=myboundary, et un corps de message :
    --myboundary
    Content-Type: text/plain
    MyCustomPartHeader: ThisIsTheGreetingPart
    
    Hello world
    --myboundary
    Content-Type: text/custom
    
    Bonjour
    --myboundary--
    L'exemple de code suivant peut lire chaque partie du message :
    @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. S'il est nécessaire d'envoyer un message à plusieurs parties, utilisez l'une des classes OutMultiPart pour sérialiser l'entité de demande.
    Par exemple, retournez une instance BufferedOutMultiPart à partir de la méthode de ressource :
    @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;
    }
    Le code de réponse précédent peut répondre à la demande avec un message correspondant à l'exemple de code suivant :
    --myboundary
    Content-Type: text/plain
    MyCustomHeader: ThisIsTheGreetingPart
    
    Hello world
    --myboundary
    Content-Type: custom/binarytype
    
    Bonjour
    --myboundary--

Résultats

Vous pouvez recevoir et envoyer des messages à plusieurs parties contenant plusieurs types de contenus.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_multipartcontent_impl
Nom du fichier : twbs_jaxrs_multipartcontent_impl.html