Bonjour à tous,
Dans le cadre de mon travail, je dois convertir en Java un fichier Excel VBA qui envoie des données via un client SOAP avec des XML vers un serveur (qui n'a pas été développé par ma boîte et donc inaccessible à toute modif).

J'ai donc cherché un client Soap en Java corespondant à mes besoins, qui envoie des Xml basées sur des services et méthodes. J'ai trouvé et implémenté, ça marche bien mais le problème c'est que c'est beaucoup trop lent, inutilisable professionnelement. Alors que le client Soap de VBA du fichier Excel est ultra rapide.

J'aimerai donc savoir pourquoi mon client Soap est si lent et comment y remédier. peut-être un meilleur client Soap mieux codé ?
Je vous joint mon Soap ci-dessous. Merci d'avance.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
public class SoapHelper {
 
  // connection properties
  public String server   = "";
  public String username = "";
  public String password = "";
  public String session  = "";  // this is the session id returned by the server upon successful login
 
  // API
  public String service = "";
  public String method  = "";
  public StringBuffer request  = new StringBuffer();  // this is what we send to the server
  public String response = "";  // this is what the server return to us
 
  public SoapHelper(String server) {
	  this.server = server;
  }
 
  private String getURI() {
    return "https://" + this.server + this.session;
  }
 
  private SOAPMessage makeMessage(String nodeName, String xmlStr, boolean asResponse) throws Exception {
    MessageFactory msgFactory = MessageFactory.newInstance();
    SOAPMessage message = msgFactory.createMessage();
    SOAPPart part = message.getSOAPPart();
    SOAPEnvelope envelope = part.getEnvelope();
 
    envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/1999/XMLSchema-instance");
    envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/1999/XMLSchema");
 
    SOAPBody body = envelope.getBody();
 
    SOAPElement element = body.addChildElement(envelope.createName("ns1:" + this.method + (asResponse ? "Response" : "")));
    element.addAttribute(envelope.createName("xmlns:ns1"), "urn:" + this.service);
    element.addAttribute(envelope.createName("ns1"), "http://schemas.xmlsoap.org/soap/encoding");
 
    SOAPElement ele2 = element.addChildElement(envelope.createName(nodeName));
    ele2.addAttribute(envelope.createName("xsi:type"), "xsd:string");
    ele2.addTextNode(xmlStr);
 
 
    if (!asResponse) message.saveChanges();
 
    return message;
  }
 
  public void doRequest(String service, String method, String xml) 
  {
    this.service = service;
    this.method  = method;
 
    request.setLength(0);  // clear the buffer
    request.append(xml);
 
    try
    {
      sendRequest();
    } 
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
 
  private boolean sendRequest() throws Exception {
    try {
      SOAPConnectionFactory conFactory = SOAPConnectionFactory.newInstance();
      SOAPConnection con = conFactory.createConnection();
      URL endpoint = new URL(this.getURI());
 
      SOAPMessage message = this.makeMessage("msgstr", this.request.toString(), false);
      SOAPMessage retval = con.call(message, endpoint);
      	//extraction du XML en String lisible du message SOAP
      this.response = extractXML(retval);
 
    } catch (Exception e) {
      this.response = e.getMessage();
    }
    return true;
  }
 
private String extractXML(SOAPMessage message) throws Exception {
	    SOAPPart part = message.getSOAPPart();
	    SOAPEnvelope env = part.getEnvelope();
	    SOAPElement element = null;
	    SOAPBody body = env.getBody();
	    String returnxml = null;
 
	    if (body.hasFault()) {
	      throw new Exception(body.getFault().getFaultString());
	    } else {
	      Iterator iter = body.getChildElements();
	      while (iter.hasNext()) {
	        element = (SOAPElement) iter.next();
	        Name name = element.getElementName();
	        if (name.getQualifiedName().startsWith("ns1")) { // e.g ns1:Authenticate
	          break;
	        }
	      }
 
	      iter = element.getChildElements(env.createName("return"));
	      while (iter.hasNext()) {
	        element = (SOAPElement) iter.next();
	        returnxml = element.getValue();
	        break;
	      }
	    }
 
	    return returnxml;
 }