2010-10-01 7 views
1

J'ai travaillé sur la création d'un client basé sur SAAJ. Tout semblait fonctionner correctement, jusqu'à ce que j'ai implémenté la logique pour envoyer des pièces jointes dans le cadre d'une demande de service Web.Compatibilité SAAJ avec JAXB

L'opération de service Web est simple: elle attend un élément de chaîne pour l'emplacement du fichier et un élément base64binary pour le contenu du fichier.

J'ai testé l'opération ws en utilisant SoapUI, et tout semble être en ordre. Toutefois, lorsque j'envoie la pièce jointe à partir de mon client SAAJ, l'opération de service Web reçoit uniquement la valeur de l'élément d'emplacement de fichier. J'ai écrit un gestionnaire sur le serveur WS pour intercepter la demande d'opération WS, afin de voir si la pièce jointe atteint même le service web. Comme prévu, la pièce jointe atteignait bien, et je pouvais accéder à son contenu en utilisant l'API SAAJ dans le gestionnaire. Cela m'amène à me demander s'il y a un problème de compatibilité lors de l'envoi de pièces jointes à l'aide de SAAJ et de leur réception via les liaisons JAXB? Y at-il quelque chose que je rate?

merci pour toute aide!

Répondre

1

Vous devez vous assurer qu'un AttachmentUnmarshaller est enregistré sur votre Unmarshaller pour recevoir des pièces jointes dans JAXB.

import javax.activation.DataHandler; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.bind.attachment.AttachmentUnmarshaller; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jaxbContext = JAXBContext.newInstance(Demo.class); 
     Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 
     unmarshaller.setAttachmentUnmarshaller(new MyAttachmentUnmarshaller()); 
    } 

    private static class MyAttachmentUnmarshaller extends AttachmentUnmarshaller { 

     @Override 
     public DataHandler getAttachmentAsDataHandler(String cid) { 
      // TODO - Lookup MIME content by content-id, cid, and return as a DataHandler. 
      ... 
     } 

     @Override 
     public byte[] getAttachmentAsByteArray(String cid) { 
      // TODO - Retrieve the attachment identified by content-id, cid, as a byte[] 
      ... 
     } 

    } 

} 
+0

Comment est-ce que l'on s'assure que? aussi, si un AttachmentUnmarshaller n'est pas enregistré, alors comment les pièces jointes envoyées via SoapUI ont-elles été résolues correctement? – anirvan

+0

Utilisez-vous un client généré ou un client écrit à la main avec votre service? –

+0

Le client est un manuscrit, basé sur SAAJ. Comme le client aura besoin de s'interfacer avec de nombreux services Web, nous ne pouvons pas simplement générer des liaisons spécifiques à un WSDL particulier. – anirvan