2012-02-21 147 views
3

我有一個正在運行的Web服務(使用EclipseLink作爲JPA提供程序),並且想要調用PHP中使用SOAP更新數據庫中數據的方法。

在Web服務的方法可以是這個樣子:如何使用SOAP將對象從PHP發送到Java Web服務?

public void updatePerson(Person p){ 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersonLib"); 
    EntityManager em = emf.createEntityManager(); 
    if(!em.getTransaction().isActive()) { 
     em.getTransaction().begin(); 
    } 
    em.merge(p); 
    em.getTransaction().commit(); 
} 

從PHP,我想我必須創建stdClass類型的對象,並把它作爲一個人的參數。我對嗎?但我不把它用幾行代碼的工作:

$client = new SoapClient("url.to.wsdl", array("trace" => 1)); 
$obj = new stdClass(); 
$obj->Person = new stdClass(); 
$obj->Person->personId = 1; 
$obj->Person->name = "Peter"; 
$client->updatePerson($obj); 

我不知道這是否是從PHP發送對象到Java的正確方法(當然,它會調用該方法的updatePerson(人p)在java應用程序中,但p不包含我在PHP中輸入的數據)。

+0

你能告訴我們你的WSDL嗎?你也可能想要檢查'SoapClient'構造函數中使用''classmap''的例子[here](http://www.php.net/manual/en/soapclient.soapclient.php)。 – 2012-02-25 18:12:31

回答

3

如果可能,請向我們展示WSDL文件。

通常當我在PHP與SoapClient的工作,我使用數組即使網絡服務需要一個對象,因此,而不是創建一個新的stdClass的嘗試發送以下數組:

$client = new SoapClient("url.to.wsdl"); 
$obj = new array("personId" => 1, "name" => "Peter"); 

$client->updatePerson($obj); 

,並應送對象與所需的數據。

希望它有幫助。

+0

前幾天我得到了它的工作。但我沒有,我可以發送一個數組而不是stdClass類型的對象! :-)謝謝你! – Rox 2012-02-29 12:52:01

相關問題