Zend Framework Fórum
09. Září 2010, 02:25:34 *
Vítej, Host. Prosím přihlaš se nebo se zaregistruj.
Nedostal jsi svůj aktivační email?

Přihlaš se uživatelským jménem, heslem a délkou sezení
Novinky: Aktuální verze Zend Frameworku je 1.10.8 z 25.8.2010 [oznámení]

http://www.zendframework.cz/.

Veškerý PHP kód dávejte mezi tagy [php] a [/php], aby byl obarvený a přehlednější.
 
   Domů   Nápověda Vyhledávání Přihlásit Registrovat  
Stran: [1]
  Tisk  
Autor Téma: SOAP a AuthHeader - namespace  (Přečteno 224 krát)
chico
ZF User
*
Offline Offline

Příspěvků: 1


« kdy: 30. Červen 2010, 14:55:47 »

Ahoj,

řeším připojení přes Zend_Soap_Client na externí službu, která má následující pravidla:
1) Zavolej metodu Login
2) Vem si response, konkrétně hlavičky, které vypadají cca takto:


<NS1:AuthHeader xsi:type="NS1:AuthHeader">
  <param1 xsi:type="xsd:int">value1</param1>
  <param2 xsi:type="xsd:int">value2</param2>
  <param3 xsi:type="xsd:dateTime">value3</param3>
</NS1:AuthHeader>



3) Zavolej jinou metodu a použij při tom hlavičky z 2)

Problém je ten, že když do XML requestu přidám XML s AuthHeaderem ručně, tak v rodičovském uzlu <SOAP-ENV:Header> chybí namespace "xmlns:NS1="urn:IxmlPricesIntf", který je potřeba deklarovat, aby AuthHeader byl správně.

Otázka tedy zní, jakým způsobem zavolat přidání namespace do daného XML requestu. Přiložím ukázku, jak hlavičky přidávám:


$xml_auth_header = '
<NS1:AuthHeader xsi:type="NS1:AuthHeader">
  <param1 xsi:type="xsd:int">value1</param1>
  <param2 xsi:type="xsd:int">value2</param2>
  <param3 xsi:type="xsd:dateTime">value3</param3>
</NS1:AuthHeader>';

$auth_header = new SoapVar($xml_auth_header, XSD_ANYXML);
// zde se musi nejak vnutit xmlns:NS1="urn:IxmlPricesIntf" !!!!!!!!!
$ns = 'urn:IxmlPricesIntf';
$header = new SoapHeader($ns,'AuthHeader', $auth_header, false);


Měl jsem za to, že to řeší první parametr objektu SoapHeader, ale asi ne...  Kroutím očima

Výsledkem by tak mělo být:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="urn:IxmlPricesIntf-IIxmlPrices"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Header xmlns:NS1="urn:IxmlPricesIntf">
  <NS1:AuthHeader xsi:type="NS1:AuthHeader">
    <param1 xsi:type="xsd:int">value1</param1>
    <param2 xsi:type="xsd:int">value2</param2>
    <param3 xsi:type="xsd:dateTime">value3</param3>
  </NS1:AuthHeader>
</SOAP-ENV:Header>

  <SOAP-ENV:Body>
    ...
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


ale je (uvedu jen Header)

<SOAP-ENV:Header>
  <NS1:AuthHeader xsi:type="NS1:AuthHeader">
    <param1 xsi:type="xsd:int">value1</param1>
    <param2 xsi:type="xsd:int">value2</param2>
    <param3 xsi:type="xsd:dateTime">value3</param3>
  </NS1:AuthHeader>
</SOAP-ENV:Header>


Díky za jakoukoliv radu.
Zaznamenáno
Stran: [1]
  Tisk  
 
Skočit na:  

Poháněno MySQL Poháněno PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Validní XHTML 1.0! Validní CSS!