У меня есть веб-сервис Soap, написанный на Java.
Я вызываю этот веб-сервис из php и передаю параметры в веб-метод, но получаю нулевое значение в веб-методе.
Мой веб-сервис выглядит следующим образом:
@SOAPBinding(style = Style.RPC)
@WebService(serviceName = "Test")
public class Test {
@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name1") String txt1, @WebParam(name = "name2") String txt2) {
System.out.println("Request : Hello " + txt1+" , "+txt2);
return "Response : Hello " + txt1 + " ! " + txt2;
}
}
И часть сообщения WSDL выглядит следующим образом:
<message name="hello">
<part name="name1" type="xsd:string"/>
<part name="name2" type="xsd:string"/>
</message>
<message name="helloResponse">
<part name="return" type="xsd:string"/>
</message>
И вызов веб-сервиса из php следующим образом:
$client = new SoapClient("http://localhost:8081/androidWebServiceTest/Test?wsdl"); // soap webservice call
$functions = $client->__getFunctions(); // getting list of web methods
$types = $client->__getTypes(); // getting types
$response = $client->hello(array("parameters" => array("name1" => "test1", "name2" => "test2"))); // calling web method hello
// dumping $functions, $types and $response
var_dump($functions);
var_dump($types);
var_dump($response);
Вывод этого вызова выглядит следующим образом:
D:\wamp64\www\WebService\netbeans\Monitor2Test\test.php:49:
array (size=1)
0 => string 'helloResponse hello(hello $parameters)' (length=38)
D:\wamp64\www\WebService\netbeans\Monitor2Test\test.php:51:
array (size=2)
0 => string 'struct hello {
string name;
}' (length=30)
1 => string 'struct helloResponse {
string return;
}' (length=40)
D:\wamp64\www\WebService\netbeans\Monitor2Test\test.php:53:
object(stdClass)[3]
public 'return' => string 'Response : Hello null ! null' (length=19)
И вывод в журнале сервера выглядит следующим образом:
Request : Hello null , null
Я пробовал другое решение, но у меня ничего не получалось, все еще не могу отправить параметры в веб-метод, всегда получая нулевое значение при веб-методе.
попробуй это:
<?php
// ...
$soapClient->hello([
'name1' => 'test1',
'name2' => 'test2'
]);
// or
$soapClient->__soapCall('hello', [
'parameters' => [
'name1' => 'test1',
'name2' => 'test2'
]
]);
Нашел решение После удара головой в течение 2 дней. Проблема заключалась в том, что мой PHP-скрипт, который использует веб-сервис, использует WSDL из кэшированного мыла. Проблема решена после добавления этой следующей строки в начале моего PHP-скрипта.
Решение: [добавьте эту строку в начале кода PHP]
ini_set("soap.wsdl_cache_enabled", "0");