Вам не нужно 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
После попытки сопоставления я нашел два возможных решения:
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>";
Все еще не очень хорошее решение, но оно работает: -)
Да, у меня было это та же проблема (нашел ваш q через google!), и я столкнулся с этим: http://www.heidisoft.com/blog/using-nusoap-consume-net-web-service-10-min Здесь разработчик создает XML-текст сообщения в coe, а затем использует nusoap для отправки.
Основываясь на сообщении Ирвина, я создал 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 = "";
}