zz4567go
@zz4567go

Как в PHP SOAPClient настроить сохранение регистра переменной?

При генерации xml для запроса PHP SOAPClient преобразует все переменные передаваемые в функцию к нижмему регистру.
Например:
$params = array("Id"=>1);
$client = new SOAPClient($Url, array("cache_wsdl" => WSDL_CACHE_NONE, "trace" => 1));
$forecast = $client->Forecast($params);


В xml получу
<soap-env:body>
  <ns1:forecast>
    <request>
      <ns2:forecast>
        <ns2:id>1</ns2:id>
      </ns2:forecast>
    </request>
  </ns1:forecast>
</soap-env:body>


Как добиться что бы имена в xml имели тот же регистр что и у php переменных?
  • Вопрос задан
  • 2499 просмотров
Пригласить эксперта
Ответы на вопрос 1
copist
@copist
Empower people to give
С одной стороны, всё зависит от WSDL. Наверное там прописано, что параметры этого веб-метода именно в нижнем регистре.

С другой стороны, реализация SOAP в PHP - это редкая пакость. Ну просто руки выломать, а глаза выколоть тому, кто реализовал и прострелить голову тому, кто решил, что PHP может на равных общаться по веб-сервисам с приложениями на Java, .Net и на других языках.

Как бы страшно это не звучало, но я порекомендую реализовать SOAP Client и SOAP Server на Java, .Net или C++. При этом PHP с ними будет общаться через TCP или unix socket данными в формате JSON, а они уже будут работать с удалёнными серверами или клиентами по протоколу SOAP. Это называется "прокси" или "мост". В плане производительности даже выиграете, потому что
1. Эти языки умеют описание веб-сервиса в формате WSDL компилировать, а PHP его каждый раз интерпретирует
2. В этих языках есть полноценный маршаллинг Object<->XML, а в PHP жалкая имитация либо костыли типа nuSOAP под PHP4

Если у вас есть возможность, откажитесь от SOAP в пользу XML-REST или JSON-REST
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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