Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SOAP namespace
Forum PHP.pl > Forum > PHP
PawelBah
Witam,
tworze soap server w oparciu o mapowanie klas (zwracany jest obiekt/complex type)
Klient w response otrzymuje poniższy kod:

  1. <SOAP-ENV:Envelop xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="namespace_test">
  2. <SOAP-ENV:Body>
  3. <ns1:TestResponse>
  4. <TestChildResult>
  5. <Test>xml string</Test>
  6. </TestChildResult>
  7. </ns1:TestResponse>
  8. </SOAP-ENV:Body>
  9. </SOAP-ENV:Envelope>


Niestety nie może go poprawnie przetworzyć (JAVA) ponieważ dzieci ns1:TestResponse nie posiadają prefiksu ns1. Jak dodać taki prefiks w czystym php i jak ktoś ma ewentualnie wiedzę to przy wykorzystaniu frameworka Yii.

Poprawna odpowiedź powinna wyglądać tak:

  1. <SOAP-ENV:Envelop xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="namespace_test">
  2. <SOAP-ENV:Body>
  3. <ns1:TestResponse>
  4. <[b]ns1:[/b]TestChildResult>
  5. <[b]ns1:[/b]Test>xml string</[b]ns1[/b]:Test>
  6. </[b]ns1:[/b]TestChildResult>
  7. </ns1:TestResponse>
  8. </SOAP-ENV:Body>
  9. </SOAP-ENV:Envelope>

Pyton_000
Szklana kuma mówi mi że nie zadeklarowałes ns w plikach.

Może łaskawie pokażesz kod generujący?
PawelBah
Sam kod niewiele pomoże w tym przypadku ponieważ jeśli nie znasz Yii to nie wiele Ci to pomoże.
Wszystko znajduje się w jednym pliku:

  1. class Data {
  2.  
  3. /**
  4.   * @var string {nillable = 1, minOccurs=0}
  5.   * @soap
  6.   */
  7. public $DataXml;
  8.  
  9. }
  10.  
  11. class DataRespone {
  12.  
  13. /**
  14.   * @var string {nillable = 1, minOccurs=0}
  15.   * @soap
  16.   */
  17. public $Test;
  18. }
  19.  
  20. class CheckServiceController extends GxController {
  21. public function actions() {
  22. return array(
  23. 'quote' => array(
  24. 'class' => 'CWebServiceAction',
  25. 'classMap' => array(
  26. 'Data',
  27. 'DataRespone',
  28. ),
  29. 'serviceOptions' => array(
  30. 'generatorConfig' => array(
  31. 'class' => 'CWsdlGenerator',
  32. 'operationBodyStyle' => array('use' => 'literal'),
  33. 'bindingStyle' => 'document',
  34. 'serviceName' => 'CheckService',
  35. 'namespace' => 'namespace_test'
  36. ),
  37. ),
  38. ),
  39. );
  40. }
  41.  
  42. /**
  43.   * @param Data
  44.   * @return DataRespone
  45.   * @soap
  46.   */
  47. public function TestResponse($data) {
  48. ...
  49. $TestResponse->TestChildResult= new DataRespone();
  50. return $TestResponse->TestChildResult;
  51. }
  52. }


Tak to mniej więcej się prezentuje.
Nie chodzi mi już o samo rozwiązanie na bazie Yii, ale nawet ogólne najprostsze w czystym PHP - wówczas do Yii jakoś sobie to przełoże.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.