Для нового проекта мы хотим создать веб-службу на Java с использованием JAX-WS RI, а для клиента веб-службы мы хотим использовать PHP.
В небольшом учебнике JAX-WS RI я нашел этот пример веб-службы:
package webservice; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style = Style.RPC) public class Calculator { public long addValues(int val1, int val2) { return val1 + val2; } }
и для веб-сервера:
package webservice; import javax.xml.ws.Endpoint; import webservice.Calculator; public class CalculatorServer { public static void main(String args[]) { Calculator server = new Calculator(); Endpoint endpoint = Endpoint.publish("http://localhost:8080/calculator", server); } }
Запуск сервера и просмотр WDSL с URL-адресом « http: // localhost: 8080 / calculator? Wsdl » отлично работает. Но вызов веб-службы из PHP завершается с ошибкой.
Мой очень простой вызов PHP выглядит так:
$client = new SoapClient('http://localhost:8080/calculator?wsdl', array('trace' => 1)); echo 'Sum: '.$client->addValues(4, 5);
Но затем я либо получаю «Неустранимая ошибка: максимальное время выполнения на 60 секунд превышено …», либо «Исключение неполадки SoapFault: [WSDL] SOAP-ERROR: Разбор WSDL: Не удалось загрузить из« http: // localhost: 8080 / калькулятор? Wsdl '… "исключение.
Я тестировал PHP SoapClient () с другими веб-службами, и они работают без каких-либо проблем. Есть ли известная проблема с JAX-WS RI в сочетании с PHP, или есть ошибка в моей веб-службе, которую я не видел?
Я нашел этот отчет об ошибке , но даже обновление до PHP 5.3.2 не решило проблему.
Может ли кто-нибудь сказать мне, что делать? И, кстати, моя версия Java, работающая на Windows 7 x64, выглядит следующим образом:
java version "1.6.0_17" Java(TM) SE Runtime Environment (build 1.6.0_17-b04) Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01, mixed mode)
Если время истечет, похоже, что php не может правильно разрешить URL WSDL. Вы пробовали файл_get_contents () / curl в URL WSDL? Возможно, попробуйте назвать IP вместо localhost и посмотреть, как это происходит.