Message SOAP avec piece jointe
Bonjour, je désire envoyer un message SOAP avec une pièce jointe (de type fichier txt) à un web service, la création du message SOAP avec l'attachement se déroule bien et appelle l'opération recupFile du web service, seulement je souhaiterais savoir comment récupérer le message SOAP et la piece jointe à partir de cette opération(modifiable)? Voici le code qui permet la création du message soap:
try{
/*creation du datahandler*/
URL url = new URL("file:///"+filename);
DataHandler data = new DataHandler(url);
java.net.URL endpoint = new URL(adress);
/*initialisation du message*/
MessageFactory usine= MessageFactory.newInstance();
SOAPMessage message = usine.createMessage();
message.getSOAPHeader().detachNode();
/*initialisation de l'entete du message*/
SOAPPart part = message.getSOAPPart();
MimeHeaders headers = message.getMimeHeaders();
headers.addHeader("Content-Length","length");
headers.addHeader("SOAPAction", adress);
/*configuration de l'enveloppe*/
SOAPEnvelope soapEnveloppe = message.getSOAPPart().getEnvelope();
soapEnveloppe.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
soapEnveloppe.setAttribute("xsd","http://www.w3.org/2001/XMLSchema");
soapEnveloppe.setAttribute("tns","http://soapinterop.org/");
/*configuration de l'entete de l'enveloppe*/
/*SOAPHeader header = soapEnveloppe.getHeader();
Name name = soapEnveloppe.createName("Transaction","t","http://localhost:9616/MyWebService/services/GestionFichier");
SOAPHeaderElement element = header.addHeaderElement(name);
element.setMustUnderstand(true);*/
/*configuration du corps de l'enveloppe*/
SOAPBody body = soapEnveloppe.getBody();
body.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
Name bodyname = soapEnveloppe.createName("recupFile","m","http://localhost:9616/MyWebService/services/GestionFichier/recupFichier");
body.addBodyElement(bodyname);
/*initialisation de la piece jointe*/
AttachmentPart attachment = message.createAttachmentPart();
attachment.setContentType("text/plain");
attachment.setMimeHeader("Content-Type", "text/plain");
attachment.setContent(data,"text/plain");
attachment.setDataHandler(data);
message.addAttachmentPart(attachment);
message.saveChanges();
/*initialisation de la connexion soap*/
SOAPConnectionFactory factory= SOAPConnectionFactory.newInstance();
SOAPConnection connection = factory.createConnection();
connection.call(message,endpoint);
connection.close();
return true;
}catch(Exception ex){
System.out.println((ex.getMessage()));
ex.printStackTrace();
return false;
}
envoi d'une piece jointe par protocole soap
J'ai réussi à trouver comment récupérer une piece jointe dans le web service en me servant de ce code::ccool:
MessageContext context = MessageContext.getCurrentContext();
SOAPMessage msg = context.getMessage();
Iterator attIter = msg.getAttachments();
if (attIter.hasNext()) {
while (attIter.hasNext()) {
AttachmentPart att = (AttachmentPart)attIter.next();
File file = new File(att.getContentId());
FileOutputStream fostr = new FileOutputStream(file);
DataHandler dataHandler = att.getDataHandler();
if(dataHandler != null){
dataHandler.writeTo(fostr);
fostr.flush();
}
}
}
Maintenant je souhaiterais insérer dans la réponse soap une piece jointe (de type fichier texte), comment puis- je faire cela sachant que ce code ne fonctionne pas?:boulet:
MessageContext context = MessageContext.getCurrentContext();
SOAPMessage message = (SOAPMessage)context.getResponseMessage();
AttachmentPart attachment = message.createAttachmentPart();
URL url = new URL(filename);
DataHandler data = new DataHandler(url);
attachment.setContentType("text/plain");
attachment.setMimeHeader("Content-Type", "text/plain");
attachment.setContent(data,"text/plain");
message.addAttachmentPart(attachment);