Bonjour,

J'essaie de programmer un webservice, que je consomme avec une applet, qui me permette de transferer un fichier du client vers le serveur, puis l'ecrire sur le serveur. Apres avoir lu beaucoup de documentation, j'ai compris un ceratin de nombre de choses, mais pas assez pour que ca marche ! Visiblement il faut que j'utilise un DataHandler pour transferer le fichier. Malheureusement, quand je genere les artefacts avec apt/wsimport, le DataHandler devient un byte[]. D'apres ce que je comprend, il faut que je fasse un custom binding au moment de la generation des artefacts, mais comment ?

Comme vous pourrez le deviner en regardant le code, j'ai lu (et essaye de comprendre) http://java.sun.com/developer/techni...xrpcpatterns3/ Je vois bien que la solution est la, mais ca ressemble plus a un aide-memoire qu'a un tutorial !

A l'aide !

A+

Anne


Code du serveur:

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package server;
 
import java.io.File;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.util.Date;
 
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
 
 
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Holder;
import java.awt.Image;
import javax.activation.DataHandler;
 
 
@WebService
public class Server {
 
public Server(){
}
 
@WebMethod
public String storeDoc(DataHandler dh, String filename){
try {
System.out.println(" >>>> storeDocumentService storing file to " + "/" + filename);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("/" + filename));
BufferedInputStream in = new BufferedInputStream(dh.getInputStream());
 
byte[] buffer = new byte[256];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead == -1)
break;
out.write(buffer, 0, bytesRead);
}
in.close();
out.close();
} catch (Exception e) {
System.out.println(e);
return e.toString();
}
return ("File processes succesfully " + filename + " " + new Date());
}
 
 
@WebMethod
public String sayHello(String userName){
String resultString="Hello" + userName;
return resultString;
}
 
}

Code du client:

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package client;
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
 
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
 
public class Client extends JApplet {
 
private Server server;
 
public void init() {
ServerService myservice = new ServerService();
Server myserver = myservice.getServerPort();
String filename = "/Users/anne/Desktop/gel.gif";
 
 
String printString=myserver.sayHello(new String("me"));
System.out.println(printString);
 
sendAttachmentWithDataHandler(filename, myserver);
} 
 
private static void sendAttachmentWithDataHandler(String filename, Server myserver) throws Exception {
DataHandler dh = new DataHandler(new FileDataSource(filename));
String response = myserver.storeDoc(dh, filename);
System.out.println("Response from server " + response);
}	
 
}


StoreDoc.java genere par wsimport:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "storeDoc", propOrder = {
"arg0",
"arg1"
})
public class StoreDoc {
 
protected byte[] arg0;
protected String arg1;