Как отправить объект с PHP на веб-службу Java с помощью SOAP?

У меня есть работающая веб-служба (использующая EclipseLink в качестве поставщика JPA), и я хотел бы вызывать методы, которые обновляют данные в базе данных из PHP с использованием SOAP.

Метод в веб-сервисе может выглядеть примерно так:

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(Person p) в java-приложении, но p не содержит данных, которые я ввел в PHP).


person Rox    schedule 21.02.2012    source источник
comment
Можете ли вы показать нам свой WSDL? Также вы можете проверить примеры здесь, где опция "classmap" используется в конструкторе SoapClient.   -  person El Barto    schedule 25.02.2012


Ответы (1)


если это возможно, пожалуйста, покажите нам файл WSDL.

Обычно, когда я работаю с SoapClient в PHP, я использую массивы, даже если веб-служба ожидает объект, поэтому вместо создания нового stdClass попробуйте отправить следующий массив:

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

$client->updatePerson($obj);

И это должно отправить объект с требуемыми данными.

Надеюсь, поможет.

person Odinn    schedule 28.02.2012
comment
Я заработал несколько дней назад. Но я не мог отправить массив вместо объектов типа stdClass! :-) Спасибо тебе за это! - person Rox; 29.02.2012