2012-07-01 2 views
0

Так что я пытаюсь получить доступ к простому java-методу через php, используя wsdl и soap. Но когда я пытаюсь запустить файл PHP он показывает мне следующее сообщение об ошибке:Застрял с мылом и PHP

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost:8080/WEB/services/SampleClass' : Extra content at the end of the document in C:\xampp\htdocs\abc.php:2 Stack trace: #0 C:\xampp\htdocs\abc.php(2): SoapClient->SoapClient('http://localhos...') #1 {main} thrown in C:\xampp\htdocs\abc.php on line 2

Вот мой код:

<?php 
    $client = new SoapClient("http://localhost:8080/WEB/services/SampleClass"); 
$name=15; 
$c=20; 
    $response = $client->demo($name, $c); 
    echo $response; 
?> 

Я не в состоянии выяснить, в чем проблема. Это аргумент для конструктора SoapClient? Должно ли это быть дано после некоторого другого синтаксиса?

А также я полный новичок в Soap и WSDL, поэтому пошаговое решение будет оценено!

+2

"HTTP: // локальный: 8080/WEB/услуги/SampleClass" должен быть путь к файлу WSDL Уре, это – Ziumin

+0

я так думаю, но я? Я не уверен, что на самом деле WSDL-файл java-кода, который я пытаюсь получить через php, был создан самим Eclipse как часть динамического веб-проекта. Там он предоставил этот уникальный путь, который был вставлен в конструктор SoapClient. это неправильный путь? –

ответ

2

Вы должны передать WSDL службы SOAP-конструктору, также может быть файл на localhost. Обычно просто добавьте? Wsdl для обслуживания URL-адреса.

<?php 
    $client = new SoapClient("http://localhost:8080/WEB/services/SampleClass?wsdl"); 
$name=15; 
$c=20; 
    $response = $client->demo($name, $c); 
    echo $response; 
?> 
+0

Спасибо за ответ. Старая ошибка исчезла, но теперь меня встретила следующая раздражающая ошибка: исключение SoapFault: [WSDL] SOAP-ERROR: анализ WSDL: не удалось загрузить с «http: // localhost: 8080/WEB/services/SampleClass? wsdl ': не удалось загрузить внешний объект «http: // localhost: 8080/WEB/services/SampleClass? wsdl» в C: \ xampp \ htdocs \ abc.php: 2 Трассировка стека: # 0 C: \ xampp \ htdocs \ abc.php (2): SoapClient-> SoapClient ('http: // localhos ...') # 1 {main} throw в C: \ xampp \ htdocs \ abc.php в строке 2 –

+0

Как я уже сказал, вам нужен (действительный) WSDL и URL-адрес localhost: 8080/WEB/services/SampleClass? wsdl не WSDL. Что вы знаете о своем сервисе? Существует ли URL-адрес localhost: 8080/WEB/services/SampleClass? Попробуйте открыть с помощью браузера (firefox или chrome показывает XML) ваш URL-адрес службы: localhost: 8080/WEB/services/SampleClass или localhost: 8080/WEB/services/SampleClass? Wsdl и сообщите, что вы видите. Ty –

+0

Нет, это действительный URL WSDL, на самом деле проблема была в моем сервере apache tomcat. Я изменил его на JBOSS, и все сработало хорошо! :). Но теперь есть еще одна проблема: всякий раз, когда я пытаюсь вызвать функцию java из моего объекта SoapClient и передавать ему аргументы, возникает следующая ошибка: Fatal error: Uncaught SoapFault exception: [soapenv: Server.generalException] Пытался вызвать метод public int Sample .demo (int) с аргументами null. Аргументы не соответствуют подписи; вложенное исключение: java.lang.IllegalArgumentException в C: \ xampp \ htdocs \ abc.php: 3 Теперь что это такое ?? Помоги пожалуйста! –

-1

Ваша проблема заключается в том, что вы не заявляющего расширение файла на WSDL,

изменить,

$client = new SoapClient("http://localhost:8080/WEB/services/SampleClass"); 

к этому,

$client = new SoapClient("http://localhost:8080/WEB/services/SampleClass.wsdl"); 
+0

Это не обычный способ вызова wsdl. –

-1

я когда-то эта проблема тоже. Источником была отсутствующая цитата.

XMLNS: myorder = "приложение/заказы/