【问题标题】:How send an object from PHP to Java web service using SOAP?如何使用 SOAP 将对象从 PHP 发送到 Java Web 服务?
【发布时间】:2012-02-21 16:07:01
【问题描述】:

我有一个正在运行的 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)。

【问题讨论】:

  • 您能向我们展示您的 WSDL 吗?此外,您可能还想查看here 示例,其中SoapClient 构造函数中使用了选项"classmap"

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


【解决方案1】:

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

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

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

$client->updatePerson($obj);

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

希望对你有帮助。

【讨论】:

  • 我几天前就开始工作了。但我没有,我可以发送一个数组而不是 stdClass 类型的对象! :-) 谢谢你!
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 2012-10-22
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多