Отправка SOAP-сообщений в PHP

  • Автор темы MainStalker
  • Дата начала

MainStalker

Guest
Отправка SOAP-сообщений в PHP

Как можно отправить и можно ли вообще отправить SOAP-сообщение из PHP некоему веб-сервису реализованному не на РНР?

Насколько я понял, читая многочисленные мануалы по SOAP+PHP, в PHP можно SOAP слать только PHP-скриптам?

Если я ошибаюсь, хотелось бы увидеть пример, как отправить SOAP-сообщение, например, сервлету, реализующему веб-сервис. И соответственно, получить ответ от этого веб-сервиса.

Заранее благодарен!
 

chameleon

Новичок
Насколько я понял, читая многочисленные мануалы по SOAP+PHP, в PHP можно SOAP слать только PHP-скриптам
ты не правильно понял. Если сервлет реализует веб-службу, то тебе нужно ее WSDL-описание.
 

MainStalker

Guest
Спасибо с этим я, действительно, ошибался.
А если нет WSDL описания и, как оказалось, сервлет не является веб-сервисом?
у меня задача, отправить SOAP-сообщение такому сервлету и получить от него ответ.

Вот пример SOAP-сообщения
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Transform>http://somedomen.com/tts/result.xslt</Transform>
<XsltParam name="nextaction" value="javascript:goPage%28%22stores%22%2C%20%22%22%29"/>
</soap-env:Header>
<soap-env:Body>
<Action>Duplicate</Action>
<DocIds><DocId>c3090abf00000103210763b100000003</DocId></DocIds>
</soap-env:Body>
</soap-env:Envelope>';

Как проще всего реализовать такое взаимодействие?
 

chameleon

Новичок
А если нет WSDL описания
его точно нет (что для Java очень странная практика) или ты не знаешь где его взять?
Как проще всего реализовать такое взаимодействие
смотрел пример non-WSDL взаимодействия на http://detail.phpclub.ru/article/soap?
 

MainStalker

Guest
его, точно нет, сервлет принимает SOAP, обрабатывает и выдает ответ.

non-WSDL не подходит, там везде используется технология веб-сервисов.

может проще установить соединение c сервлетом через socket или curl?
 

chameleon

Новичок
его, точно нет, сервлет принимает SOAP, обрабатывает и выдает ответ.
это что ж за ресурс такой? если публичный, дай URI сервлета.
non-WSDL не подходит, там везде используется технология веб-сервисов
технология веб-сервисов и подразумевает использование SOAP,WSDL, ...ну и много чего еще. Как я понял тебе нужно сформировать SOAP-запрос чем конкретно не подходит non-WSDL режим работы SOAP-клиента в PHP5?
 

MainStalker

Guest
Это не публичный ресурс и он в стадии разработки

Как я понял в режиме работы non-WSDL SOAP-клиента в PHP5, веб-сервису необходимо отправлять команды (SOAP-методы), веб-сервис их выполняет и присылает ответ.
Но мой сервлет не умеет выполнять команды-SOAP-методы, он принимает
/* SOAP-message 1*/
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header>
<Transform>http://somedomen.com/tts/result.xslt</Transform>
<XsltParam name="nextaction" value="javascript:goPage%28%22stores%22%2C%20%22%22%29"/>
</soap-env:Header>
<soap-env:Body>
<Action>Duplicate</Action>
<DocIds><DocId>c3090abf00000103210763b100000003</DocId></DocIds>
</soap-env:Body>
</soap-env:Envelope>';
/* End SOAP-message 1 */
Выбирает из него
команду
private static final String SELECT_ACTION = "/soap-env:Envelope/soap-env:Body/Action";

и документы, с которыми надо работать
private static final String SELECT_DOC_IDS = "/soap-env:Envelope/soap-env:Body/DocIds/DocId";


public static final String ACTION_DUPLICATE = "Duplicate";


/* получаем action="Duplicate" */
String action = TtsUtils.getXmlValue(message, SELECT_ACTION);
/* получаем docIds = "c3090abf00000103210763b100000003" */
List docIds = message.valueof(SELECT_DOC_IDS);


if (ACTION_DUPLICATE.equalsIgnoreCase(action))
{
/* functional code */
}

Если это можно как-то задать с помощью SOAP в PHP, хотелось бы узнать как.

$client->__call(
/* Имя SOAP-метода */
"Duplicate",
/* Параметры */
array(
new SoapParam(
/* Значение параметра */
"DocId",
/* Имя параметра */
"c3090abf00000103210763b100000003"
)));
Получит ли сервлет в таком случае тот же SOAP, что и SOAP-message 1, без header хотя бы?
 
Сверху