Использование PHP SoapClient с Java JAX-WS RI (Webservice) - PullRequest
1 голос
/ 28 мая 2010

Для нового проекта мы хотим создать веб-сервис на 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/calculator?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)

1 Ответ

0 голосов
/ 28 мая 2010

Если время ожидания истекло, похоже, что php не может правильно определить URL-адрес WSDL. Вы пробовали file_get_contents () / curl на URL WSDL? Может быть, попробуйте позвонить по IP вместо localhost и посмотреть, как это происходит.

...