2010-05-27 24 views
1

對於新項目,我們希望使用JAX-WS RI在Java中構建Web服務,並且對於Web服務客戶端,我們希望使用PHP。在Java JAX-WS RI中使用PHP SoapClient(Webservice)

在約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瀏覽WDSL 「http://localhost:8080/calculator?wsdl」完美運作。但是從PHP調用Web服務失敗。

我很簡單的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()與其他Web服務,他們工作沒有任何問題。 JAX-WS RI與PHP結合是否存在已知問題,或者我的Web服務中有錯誤,我沒有看到?我發現this bug report,但即使更新到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) 

回答

0

如果超時,它看起來像PHP是不能夠妥善解決WSDL URL。您是否嘗試過WSDL URL上的file_get_contents()/ curl?也許嘗試調用IP而不是本地主機,並看看如何。

+0

這真的很瘋狂。帶有「localhost」或「127.0.0.1」的file_get_contents()超時。捲曲成功。和「本地主機」的SoapClient()超時,但與「127.0.0.1」成功。 我不明白問題出在哪裏(可能是我的XAMPP Apache配置或主機文件中的東西),但現在我知道如何讓它工作。 非常感謝! – 2ndkauboy 2010-05-27 21:28:04