如何使用SOAP将对象从PHP发送到Java Web服务?

时间:2012-02-21 16:07:02

标签: java php web-services soap soap-client

我有一个正在运行的Web服务(使用EclipseLink作为JPA提供程序),并希望使用SOAP调用从PHP更新数据库中数据的方法。

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类型的对象,并将其作为Person的参数发送。我对吗?但我无法使用这些代码行:

$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的正确方法(好吧,它在java应用程序中调用updatePerson(Person p)方法,但是p不包含我输入的数据) PHP)。

1 个答案:

答案 0 :(得分:3)

如果可能,请向我们展示WSDL文件。

通常当我在PHP中使用SoapClient时,即使Web服务需要一个对象,我也会使用数组,因此,不要创建新的stdClass,而是尝试发送以下数组:

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

$client->updatePerson($obj);

这应该发送带有所需数据的对象。

希望它有所帮助。