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 :
- 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/" xmlnssd="http://www.w3.org/2001/XMLSchema" xmlnssi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<storeFile xmlns="http://webservicejava">
<filename>image.jpg</filename>
<dh href="cid:E790332A5CC67910DE669D376D0DBF23" xsi:type="ns1ataHandler" 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 :
- 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 :
- // 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