Bonjour,
je dispose d'un outil de crm (SugarCRM) incluant un serveur NuSOAP en PHP dont une des méthodes implémentées m'intéresse particulièrement : create_lead.
D'un autre coté, je dispose d'un formulaire de demande de documentation où un visiteur peut entrer ses nom prénom, mail, etc... ce formulaire se trouvant dans une page JSP.
Avant tout je précise que les serveur Tomcat(site web) et Apache(outil CRM) se trouvent sur la même machine.
Je voudrais que lorsqu'une demande de documentation est effectuée (via le formulaire JSP), un appel à la méthode create_lead via le protocole SOAP soit effectuée, afin d'intégrer ce lead (que je traduirai par "piste" ) à mon outil de crm.
Je ne sais pas si c'est facile, je n'ai jamais utilisé le protocole SOAP bien que j'en connaisse le fonctionnement, donc si des points ne sont pas très clairs ou si je me plante complet, n'hésitez pas à me le dire.
Tout d'abord, voici la description de la méthode create_lead :
Côté tomcat, j'ai récupéré le fichier soap.jar, je l'ai mis dans common/lib et je l'ai rajouté au classpath.
Et voici la partie du code de ma page JSP que j'ai rajoutée pour appeler la méthode distante :
Code :
- <%@ page import="org.apache.soap.*" %>
- <%@ page import="org.apache.soap.rpc.*" %>
- String first_name = request.getParameter("First_Name" );
- String surname = request.getParameter("Surname" );
- String email = request.getParameter("Email" );
- Call call = new Call ();
- String encodingStyleURI = org.apache.soap.Constants.NS_URI_SOAP_ENC;
- call.setEncodingStyleURI(encodingStyleURI);
- call.setTargetObjectURI ("urn:sugarsoapBinding" );
- call.setMethodName("create_lead" );
- Vector parameters = new Vector ();
- parameters.addElement (new Parameter("user_name", String.class, "nicolas", null));
- parameters.addElement (new Parameter("password", String.class, "", null));
- parameters.addElement (new Parameter("first_name", String.class, first_name, null));
- parameters.addElement (new Parameter("last_name", String.class, surname, null));
- parameters.addElement (new Parameter("email_address", String.class, email, null));
- call.setParams(parameters);
- Response soap_response = call.invoke(new java.net.URL("http://localhost/sugar_temp/soap.php" ), "" );
-
- if ( soap_response.generatedFault() ) {
-
- Fault fault = soap_response.getFault ();
- System.out.println("The call failed: " );
- System.out.println("Fault Code = " + fault.getFaultCode());
- System.out.println("Fault Entrie = " + fault.getFaultEntries());
- System.out.println("Fault String = " + fault.getFaultString());
- System.out.println("Detail Entrie = " + fault.getDetailEntries());
- System.out.println("Fault Actor URI = " + fault.getFaultActorURI());
-
- }
- else {
- Parameter soap_result = soap_response.getReturnValue();
- System.out.println(soap_result.getValue());
- System.out.println("J'ai une réponse !!!" );
- }
|
Lorsque je fait mes tests, je remplis mon formulaire, je valide, et là je n'ai aucune exception levée, mais dans les logs de tomcat j'ai ces lignes qui apparaissent :
Code :
- 0
- J'ai une réponse !!!
|
Si je comprend bien, çà signifie que l'appel à la méthode distante a réussi, c'est çà ?
Au début j'avais soap_response.generatedFault()=true car j'avais oublié le "urn:" dans call.setTargetObjectURI ("urn:sugarsoapBinding" );
Depuis que je l'ai rajouté, j'ai l'impression que l'appel à distance marche, cependant la méthode ne doit pas vraiment être appelée, car mon lead n'est pas créé dans l'outil de crm.
Est-ce que je me trompe quelque part au niveau du code java ?
Ou à votre avis cela viendrait de la méthode définie sur le server soap?
Voilà, désolé d'avoir été si long, mais je voyais pas comment expliquer çà plus clairement...
Si vous avez besoin de précision, n'hésitez pas !
Je vous remercie par avance du temps passé à la lecture de ce post et de vos réponses.
Nicolas