Bonjour,

Des collègues m'ont affirmé qu'il était possible de faire appel à un WebService depuis Java sans WSDL. Je m'y suis donc attelé.

Pour info le WebService utilise NuSOAP.

Extrait du code java. J'ai une erreur 500 qui survient lors de l'appel à la méthode invoke().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Service service = new Service();
 
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new URL( URL_OPERATION ) );
call.setOperationName( "getInfo" );
call.addParameter("param1", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("param2", XMLType.XSD_STRING, ParameterMode.IN);
 
SOAPEnvelope se = (SOAPEnvelope) call.invoke( new Object[]{ sParam1, sParam2 }  );
(pour info URL_OPERATION contient l'url d'appel au web service, exactement la même qui est utilisée par le code php ci-dessous)

A côté de ça on m'a fournit une page php qui fait appel avec succès au WS, dont voici le code simplissime :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
require_once('/www/sites/includes/class/nusoap.php');
 
$client = new soapclient(URL_OPERATION);
$res = $client->call('getInfo', array( "params"=> array('param1'=>'CIRC', 'param2'=>'DRT' ) ));
Et voici ce que je peux lire dans la partie request affichée au retour :
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
User-Agent: NuSOAP/0.9.5 (1.123)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 708
 
<?xml version="1.0" encoding="iso-8859-1"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <ns2917:getInfo xmlns:ns2917="http://tempuri.org">
      <params>
        <param1 xsi:type="xsd:string">CIRC</type>
        <param2 xsi:type="xsd:string">DRT</sousType>
      </params>
    </ns2917:getInfo>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Je cherche ce qui manque dans le code Java pour que cela fonctionne. J'ai entre autres essayé d'ajouter le namespace "http://tempuri.org" avec le préfix "ns2917" mais sans succès.

Ca m'intrigue au passage de lire
SOAPAction: ""
Quelqu'un saurait-il m'expliquer comment résoudre ce problème ?

Merci d'avance pour votre aide.