Recreer une pièce jointe avec JavaMail
Bonjour all,
Je cherche à envoyer une pièce jointe à un webservice, grâce à un DataHandler. Pas de problème pour la partie cliente, qui ressemble à ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public class WebServiceJavaTestor {
public static void main(String[] args) {
WebServiceJavaProxy p = new WebServiceJavaProxy();
try {
String filename = "image.jpg";
DataSource ds = new FileDataSource("C:\\temp\\source\\" + filename);
DataHandler dh = new DataHandler(ds);
System.out.println("Call to storeFile : " + p.storeFile(filename, dh));
} catch (RemoteException e) {
e.printStackTrace();
}
}
} |
Par contre la partie serveur doit fonctionner sur un serveur Domino 6.5, ce qui inclue un certain nombre de difficultés :
- java 1.3
- il faut tout parser à la main.
C'est donc ce que je fais. La requête que je reçoit ressemble à ça :
Citation:
------=_Part_0_14158819.1148988787982
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <B16DC35C0EB5DB244E8FB115971AAB01>
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<storeFile xmlns="http://webservicejava">
<filename>image.jpg</filename>
<dh href="cid:E790332A5CC67910DE669D376D0DBF23" xsi:type="ns1:DataHandler" xmlns:ns1="http://xml.apache.org/xml-soap"/>
</storeFile>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_0_14158819.1148988787982
Content-Type:image/jpeg
Content-Transfer-Encoding: binary
Content-Id: <E790332A5CC67910DE669D376D0DBF23>
Ï ÓJIF??? ?C?????? ???????????? $.\' \",#??(7),01444?
...
...
...
------=_Part_0_1
Bon j'arrive bien à séparer les deux parties et à parser la première pour récupérer le nom du fichier et le content ID, ce qui me permet d'aller récupérer le contenu à proprement parler dans la seconde partie.
Seulement mes essais pour recréer un DataHandler à partir du contenu ne fonctionnent que sur du texte, et pas sur des images ! Les images ainsi reçues (ou autre type de contenu un peu fun) ne sont pas exploitables.
Je vous mets quelques exemples de mes tentatives :
Code:
1 2 3 4 5 6 7 8 9
| String content = source.substring(begin, end).trim();
// create the data handler from the content and the mime type
DataSource dataSource = new ByteArrayDataSource(content, contentType);
DataHandler dh = new DataHandler(dataSource);
FileOutputStream fos = new FileOutputStream("C:\\temp\\image.jpg");
dh.writeTo(fos);
fos.close(); |
ou encore :
Code:
1 2 3 4 5 6 7 8 9 10 11
| // get a Session object
Session session = Session.getInstance(new Properties(), null);
// create a mime message for the attachment part
byte[] sourceBytes = source.getBytes(); // todo : get the good charset
ByteArrayInputStream inputStream = new ByteArrayInputStream(sourceBytes);
MimeMessage msg = new MimeMessage(session, inputStream);
FileOutputStream out = new FileOutputStream("C:\\temp\\image.jpg");
msg.getDataHandler().writeTo(out);
out.close(); |
Bref, tout ça ne marche pas, malheuresement, et je suis bien en galère. Vous pourriez m'aider SVP ?
Merci