Как использовать nuSOAP для сообщений с несколькими пространствами имен

Вам не нужно error-channel, если у вас не будет потока компенсации . Если вы просто сгенерируете исключение, как в вашем случае, то не настраивайте error-channel.

В большинстве случаев нам также не нужен reply-channel, даже этот default-reply-channel. Если вы не используете output-channel в последней конечной точке вашего потока, будет использоваться заголовок replyChannel. Нам это нужно только reply-channel для случаев использования, когда нам нужна какая-то обработка ответного сообщения pub-sub, где мы хотели бы отправить ответное сообщение не только в качестве возврата для вызова метода шлюза, но и в какой-то другой поток.

Более подробная информация находится в Документах: https://docs.spring.io/spring-integration/docs/current/reference/html/#gateway

6
задан wilth 9 April 2009 в 12:46
поделиться

3 ответа

После попытки сопоставления я нашел два возможных решения:

1) Не использовать WSDL создать nusoap_client и soapval () для создания сообщения Это имеет тот недостаток, что сообщение содержит много служебных данных (пространство имен определено в каждом элементе). Не очень хорошо.

2) Вместо того, чтобы полагаться на сопоставление параметров, создайте свой ответ в xml и поместите все определения префиксов в первый элемент - например,

$params = "<ns1:myOperation xmlns:ns1="..." xmlns:ns2="...">
      <ns2:Person>
        <ns2:Firstname>..</ns2:Firstname>
        ..
      </ns2:Person>
      <ns1:Attribute>..</ns1:Attribute>
    </ns1:myOperation>";

Все еще не очень хорошее решение, но оно работает: -)

5
ответ дан 10 December 2019 в 00:44
поделиться

Да, у меня было это та же проблема (нашел ваш q через google!), и я столкнулся с этим: http://www.heidisoft.com/blog/using-nusoap-consume-net-web-service-10-min Здесь разработчик создает XML-текст сообщения в coe, а затем использует nusoap для отправки.

0
ответ дан 10 December 2019 в 00:44
поделиться

Основываясь на сообщении Ирвина, я создал xml вручную и попросил nusoap сделать все остальное. Мой веб-хост не имеет расширения php soap, поэтому мне пришлось использовать nusoap, а веб-сервис, который я пытаюсь использовать, требует пространства имен для каждого тега (например, для имени пользователя и пароля в моем примере здесь).

require_once('lib/nusoap.php');

$client = new nusoap_client('https://service.somesite.com/ClientService.asmx');
$client->soap_defencoding = 'utf-8';
$client->useHTTPPersistentConnection(); // Uses http 1.1 instead of 1.0
$soapaction = "https://service.somesite.com/GetFoods";

$request_xml = '<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
  <env:Body>
    <n1:GetFoods xmlns:n1="https://service.somesite.com">
      <n1:username>banjer</n1:username>
      <n1:password>theleftorium</n1:password>
    </n1:GetFoods>
  </env:Body>
</env:Envelope>
';

$response = $client->send($request_xml, $soapaction, ''); 

echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';

Затем я получил ошибку, которая гласила:

Notice: Undefined property: nusoap_client::$operation in ./lib/nusoap.php  on line 7674

Поэтому я пошел по ленивому пути, зашел в nusoap.php и добавил этот код перед строкой 7674, чтобы сделать его счастливым:

    if(empty($this->operation)) {
        $this->operation = "";
    }
4
ответ дан 10 December 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: