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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
------=_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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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