使用PHP SoapClient和Java JAX-WS RI(Webservice)

对于新项目,我们希望使用JAX-WS RI在Java中构建Web服务,对于Web服务客户端,我们希望使用PHP。

在一个关于JAX-WS RI的小教程中,我找到了这个示例Web服务:

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; } } 

并为Web服务器:

 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); } } 

启动服务器并使用URL“ http:// localhost:8080 / calculator?wsdl ”浏览WDSL非常有效。 但是从PHP调用Web服务失败了。

我非常简单的PHP调用如下所示:

 $client = new SoapClient('http://localhost:8080/calculator?wsdl', array('trace' => 1)); echo 'Sum: '.$client->addValues(4, 5); 

但后来我得到一个“致命错误:超过60秒的最大执行时间……”或“Uncaught SoapFaultexception:[WSDL] SOAP-ERROR:解析WSDL:无法从’ http:// localhost加载: 8080 /计算器?wsdl ‘…“例外。

我已经使用其他Web服务测试了PHP SoapClient(),它们没有任何问题。 JAX-WS RI与PHP结合是否存在已知问题,或者我的Web服务中是否存在错误,我没有看到?

我发现了这个错误报告 ,但即使更新到PHP 5.3.2也无法解决问题。

谁能告诉我该怎么做? 顺便说一句,我在Windows 7 x64上运行的Java版本如下:

 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无法正确解析WSDL URL。 您是否在WSDL Url上尝试过file_get_contents()/ curl? 也许尝试调用IP而不是localhost,看看它是怎么回事。