2012-07-01 130 views
0

所以我试图通过使用wsdl和soap的php访问简单的java方法。但是,当我尝试运行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“ 必须是UR WSDL文件的路径,是 – Ziumin

+0

我想是这样,但我?实际上,我尝试通过php访问的java代码的WSDL文件是由Eclipse本身作为Dynamic Web Project的一部分创建的,它提供了我粘贴到SoapClient构造函数中的这条独特路径。错误消失了吗? –

回答

2

您必须将服务的WSDL传递给SOAP构造函数,也可以是localhost上的文件。通常简单地添加?wsdl到che服务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':无法在C:\中加载外部实体“http:// localhost:8080/WEB/services/SampleClass?wsdl” xampp \ htdocs \ abc.php:2堆栈跟踪:#0 C:\ xampp \ htdocs \ abc.php(2):SoapClient-> SoapClient('http:// localhos ...')#1 {main}抛出在第2行的C:\ xampp \ htdocs \ abc.php –

+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

不,它是一个有效的WSDL URL,实际上问题出在我的服务器apache tomcat上。我将其更改为JBOSS,一切正常! :)。但现在有另一个问题 - 每当我尝试从我的SoapClient对象调用java函数并将参数传递给它时,会发生以下错误 - 致命错误:Uncaught SoapFault异常:[soapenv:Server.generalException]尝试调用方法public int Sample .demo(int)参数为null。辩论与签名不符。嵌套的异常是:C:\ xampp \ htdocs \ abc.php中的java.lang.IllegalArgumentException: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 =“应用/命令/